Skip to content

Commit e762050

Browse files
committed
Try to parse older editions
1 parent e54c4d9 commit e762050

File tree

6 files changed

+555
-7
lines changed

6 files changed

+555
-7
lines changed

UNCLParser.php

+1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ private function process ($filePath) {
6060
$result = preg_match("/^(.{5})([0-9\s]{6})(.{56})\[([A-Z]?)\]/", $row, $codeArr);
6161
if(!isset($codeArr[1])) {
6262
$result = preg_match("/^(.{5})([0-9\s]{6})(.*)/", $row, $codeArr);
63+
6364
$elementStatus = trim($codeArr[1]);
6465
$elementCode = trim($codeArr[2]);
6566
$elementTitle = trim($codeArr[3]);

pre99B/EDCDParser.php

+116
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
<?php
2+
3+
class EDCDParser
4+
{
5+
private $msgXML;
6+
7+
public function __construct ($filePath)
8+
{
9+
$this->msgXML = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8" standalone="yes"?><composite_data_elements></composite_data_elements>');
10+
11+
$arrayXml = $this->process($filePath);
12+
13+
$msg = $this->msgXML->asXML();
14+
$dom = new DOMDocument('1.0', 'utf-8');
15+
$dom->xmlStandalone = true;
16+
$dom->preserveWhiteSpace = false;
17+
$dom->formatOutput = true;
18+
$dom_xml = dom_import_simplexml($this->msgXML);
19+
$dom_xml = $dom->importNode($dom_xml, true);
20+
$dom_xml = $dom->appendChild($dom_xml);
21+
$result = $dom->saveXML();
22+
23+
$this->msgXML = $result;
24+
}
25+
26+
private function process ($filePath) {
27+
$fileLines = file_get_contents($filePath);
28+
$fileLines = preg_replace('/[\xC4]/', '-', $fileLines);
29+
30+
$edcdArr = preg_split('/[-]{70}/', $fileLines);
31+
32+
unset($edcdArr[0]);
33+
34+
foreach ($edcdArr as $edcdElm) {
35+
$elmArr = preg_split('/[\r\n]+/', $edcdElm);
36+
$segmentCode = '';
37+
$segmentTitle = '';
38+
$segmentFunction ='';
39+
$dataElements = [];
40+
41+
$defXML = $this->msgXML->addChild("composite_data_element");
42+
43+
$i = 0;
44+
for ($i=0;$i<count($elmArr);) {
45+
$row = $elmArr[$i];
46+
if (strlen($row) < 1) {
47+
$i++;
48+
continue;
49+
}
50+
51+
// segment name, change indicator
52+
if ($segmentCode === '') {
53+
$result = preg_match("/[\s]{3}.{1,3}[\s]{0,2}([A-Z0-9]{4})\s+([A-Z\s]+)/", $row, $codeArr);
54+
$segmentCode = $codeArr[1];
55+
$segmentTitle = $codeArr[2];
56+
$i++;
57+
continue;
58+
}
59+
60+
// function
61+
if($segmentFunction === '' && preg_match("/[\s]{6}Desc: (.*)/", $row, $matches)) {
62+
$segmentFunction = $matches[1];
63+
$i++;
64+
while (strlen($elmArr[$i])>1) {
65+
if (preg_match("/^[\s]{12}(.*)/", $elmArr[$i], $matches)) {
66+
$segmentFunction .= " ".$matches[1];
67+
$i++;
68+
} else {
69+
break;
70+
}
71+
}
72+
}
73+
74+
// element list, change indicator
75+
if (preg_match("/[\d]{3}.{3}([\w]{4})\s{2}([\w\s]{10,47})([\w]{1})/", $elmArr[$i], $matches)) {
76+
$dataElement=[
77+
'elementId' => $matches[1],
78+
'elementName' => trim($matches[2])
79+
];
80+
if ($matches[1]{0} == 'C') {
81+
$dataElement['composite'] = true;
82+
} else {
83+
$dataElement['composite'] = false;
84+
}
85+
86+
if (isset($matches[3])) {
87+
$dataElement['elementCondition'] = $matches[3];
88+
}
89+
$dataElements[]= $dataElement;
90+
}
91+
$i++;
92+
}
93+
94+
$defXML->addAttribute('id', $segmentCode);
95+
$defXML->addAttribute('name', lcfirst(str_replace(" ", "", ucwords(strtolower($segmentTitle)))));
96+
$defXML->addAttribute('desc', $segmentFunction);
97+
foreach ($dataElements as $childs) {
98+
$ctype = 'data_element';
99+
if ($childs['composite']) {
100+
$ctype = "composite_data_element";
101+
}
102+
$cdefXML = $defXML->addChild($ctype);
103+
$cdefXML->addAttribute('id', $childs['elementId']);
104+
if ($childs['elementCondition'] == 'M') {
105+
$cdefXML->addAttribute('required', "true");
106+
}
107+
}
108+
}
109+
110+
}
111+
112+
113+
public function getXML() {
114+
return $this->msgXML;
115+
}
116+
}

pre99B/EDEDParser.php

+138
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
<?php
2+
3+
class EDEDParser
4+
{
5+
private $msgXML;
6+
7+
public function __construct ($filePath)
8+
{
9+
$this->msgXML = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8" standalone="yes"?><data_elements></data_elements>');
10+
11+
$arrayXml = $this->process($filePath);
12+
13+
$msg = $this->msgXML->asXML();
14+
$dom = new DOMDocument('1.0', 'utf-8');
15+
$dom->xmlStandalone = true;
16+
$dom->preserveWhiteSpace = false;
17+
$dom->formatOutput = true;
18+
$dom_xml = dom_import_simplexml($this->msgXML);
19+
$dom_xml = $dom->importNode($dom_xml, true);
20+
$dom_xml = $dom->appendChild($dom_xml);
21+
$result = $dom->saveXML();
22+
23+
$this->msgXML = $result;
24+
}
25+
26+
private function process ($filePath) {
27+
$fileLines = file_get_contents($filePath);
28+
$fileLines = preg_replace('/[\xC4]/', '-', $fileLines);
29+
30+
$ededArr = preg_split('/[-]{70}/', $fileLines);
31+
32+
unset($ededArr[0]);
33+
34+
foreach ($ededArr as $ededElm) {
35+
$elmArr = preg_split('/[\r\n]+/', $ededElm);
36+
37+
$elementStatus='';
38+
$elementCode = '';
39+
$elementTitle = '';
40+
$elementUse='';
41+
42+
$elementDescription ='';
43+
44+
$elementType='';
45+
$elementMaxSize='';
46+
47+
$elementNote='';
48+
49+
$defXML = $this->msgXML->addChild("data_element");
50+
51+
$i = 0;
52+
for ($i=0;$i<count($elmArr);) {
53+
$row = $elmArr[$i];
54+
if (strlen($row) < 1) {
55+
$i++;
56+
continue;
57+
}
58+
59+
if ($elementCode === '') {
60+
$result = preg_match("/^(.{3})([0-9\s]{6})(.{58})\[([A-Z]?)\]/", $row, $codeArr);
61+
if(!isset($codeArr[1])) {
62+
$result = preg_match("/^(.{3})([0-9\s]{6})(.*)/", $row, $codeArr);
63+
$elementStatus = trim($codeArr[1]);
64+
$elementCode = trim($codeArr[2]);
65+
$elementTitle = trim($codeArr[3]);
66+
$i++;
67+
$result = preg_match("/^[\s]{9}(.*)\[([A-Z]?)\]/", $elmArr[$i], $codeArr2);
68+
$elementTitle .= " ".trim($codeArr2[1]);
69+
$elementUse = $codeArr2[2];
70+
$i++;
71+
continue;
72+
}
73+
$elementStatus = trim($codeArr[1]);
74+
$elementCode = trim($codeArr[2]);
75+
$elementTitle = trim($codeArr[3]);
76+
$elementUse = $codeArr[4];
77+
$i++;
78+
continue;
79+
}
80+
81+
if($elementDescription === '' && preg_match("/.{1}\s{2}Desc: (.*)/", $row, $matches)) {
82+
$elementDescription = $matches[1];
83+
$i++;
84+
while (strlen($elmArr[$i])>1) {
85+
if (preg_match("/^[\s]{9}(.*)/", $elmArr[$i], $matches)) {
86+
$elementDescription .= " ".$matches[1];
87+
$i++;
88+
} else {
89+
break;
90+
}
91+
}
92+
continue;
93+
}
94+
95+
if ($elementType === '') {
96+
$result = preg_match("/^.{1}\s{2}Repr: (a?n?)[\.]*(\d+)/", $row, $codeArr);
97+
if(!isset($codeArr[1]))var_dump($row);
98+
$elementType = trim($codeArr[1]);
99+
$elementMaxSize = trim($codeArr[2]);
100+
$i++;
101+
continue;
102+
}
103+
104+
if($elementNote === '' && preg_match("/[\s]{3}Note:/", $row, $matches)) {
105+
$elementNote = "";
106+
$i++;
107+
while (strlen($elmArr[$i])>1) {
108+
if (preg_match("/^[\s]{11}(.*)/", $elmArr[$i], $matches)) {
109+
if ($elementNote != '') {
110+
$elementNote .= " ";
111+
}
112+
$elementNote .= $matches[1];
113+
$i++;
114+
} else {
115+
break;
116+
}
117+
}
118+
continue;
119+
}
120+
121+
$i++;
122+
}
123+
124+
$defXML->addAttribute('id', $elementCode);
125+
$defXML->addAttribute('name', lcfirst(str_replace(" ", "", ucwords(strtolower($elementTitle)))));
126+
$defXML->addAttribute('usage', $elementUse);
127+
$defXML->addAttribute('desc', $elementDescription);
128+
$defXML->addAttribute('type', $elementType);
129+
$defXML->addAttribute('maxlength', $elementMaxSize);
130+
}
131+
132+
}
133+
134+
135+
public function getXML() {
136+
return $this->msgXML;
137+
}
138+
}

pre99B/EDSDParser.php

+122
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
<?php
2+
3+
class EDSDParser
4+
{
5+
private $msgXML;
6+
7+
public function __construct ($filePath)
8+
{
9+
$this->msgXML = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8" standalone="yes"?><segments></segments>');
10+
11+
$arrayXml = $this->process($filePath);
12+
13+
$msg = $this->msgXML->asXML();
14+
$dom = new DOMDocument('1.0', 'utf-8');
15+
$dom->xmlStandalone = true;
16+
$dom->preserveWhiteSpace = false;
17+
$dom->formatOutput = true;
18+
$dom_xml = dom_import_simplexml($this->msgXML);
19+
$dom_xml = $dom->importNode($dom_xml, true);
20+
$dom_xml = $dom->appendChild($dom_xml);
21+
$result = $dom->saveXML();
22+
23+
$this->msgXML = $result;
24+
}
25+
26+
private function process ($filePath) {
27+
$fileLines = file_get_contents($filePath);
28+
$fileLines = preg_replace('/[\xC4]/', '-', $fileLines);
29+
30+
$edsdArr = preg_split('/[-]{70}/', $fileLines);
31+
32+
unset($edsdArr[0]);
33+
34+
foreach ($edsdArr as $edsdElm) {
35+
$elmArr = preg_split('/[\r\n]+/', $edsdElm);
36+
$segmentCode = '';
37+
$segmentTitle = '';
38+
$segmentFunction ='';
39+
$dataElements = [];
40+
41+
$defXML = $this->msgXML->addChild("segment");
42+
43+
$i = 0;
44+
for ($i=0;$i<count($elmArr);) {
45+
$row = $elmArr[$i];
46+
if (strlen($row) < 1) {
47+
$i++;
48+
continue;
49+
}
50+
51+
// segment name
52+
if ($segmentCode === '') {
53+
$result = preg_match("/[\s]{3}.{1,3}[\s]{0,2}([A-Z]{3})\s+(.+)/", $row, $codeArr);
54+
if(!isset($codeArr[1])) {var_dump($row);}
55+
$segmentCode = $codeArr[1];
56+
$segmentTitle = $codeArr[2];
57+
$i++;
58+
continue;
59+
}
60+
61+
// function
62+
if($segmentFunction === '' && preg_match("/[\s\|]{6}Function: (.*)/", $row, $matches)) {
63+
$segmentFunction = $matches[1];
64+
$i++;
65+
while (strlen($elmArr[$i])>1) {
66+
if (preg_match("/^[\s]{16}(.*)/", $elmArr[$i], $matches)) {
67+
$segmentFunction .= " ".$matches[1];
68+
$i++;
69+
} else {
70+
break;
71+
}
72+
}
73+
}
74+
75+
// element list
76+
if (preg_match("/^[\d]{3}[\w\s]{3}([\w]{4})\s{2}(.{10,47})([\w]{1})/", $elmArr[$i], $matches)) {
77+
//var_dump($matches);
78+
$dataElement=[
79+
'elementId' => $matches[1],
80+
'elementName' => trim($matches[2])
81+
];
82+
83+
if ($matches[1]{0} == 'C') {
84+
$dataElement['composite'] = true;
85+
} else {
86+
$dataElement['composite'] = false;
87+
}
88+
89+
if (isset($matches[3])) {
90+
$dataElement['elementCondition'] = $matches[3];
91+
} else {
92+
var_dump($elmArr[$i]); die();
93+
}
94+
95+
$dataElements[]= $dataElement;
96+
}
97+
$i++;
98+
}
99+
100+
$defXML->addAttribute('id', $segmentCode);
101+
$defXML->addAttribute('name', lcfirst(str_replace(" ", "", ucwords(strtolower($segmentTitle)))));
102+
$defXML->addAttribute('desc', $segmentFunction);
103+
foreach ($dataElements as $childs) {
104+
$ctype = 'data_element';
105+
if ($childs['composite']) {
106+
$ctype = "composite_data_element";
107+
}
108+
$cdefXML = $defXML->addChild($ctype);
109+
$cdefXML->addAttribute('id', $childs['elementId']);
110+
if ($childs['elementCondition'] == 'M') {
111+
$cdefXML->addAttribute('required', "true");
112+
}
113+
}
114+
}
115+
116+
}
117+
118+
119+
public function getXML() {
120+
return $this->msgXML;
121+
}
122+
}

0 commit comments

Comments
 (0)