123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- <?php
- class AscParseController
- {
- public function Run ($ascFile, $jsonFile = "")
- {
- if ($jsonFile == "") {
- $jsonFile = substr($ascFile, 0, -4) . ".json";
- }
- if (!strpos($jsonFile, "\\")) {
- $jsonFile = dirname($ascFile) . "\\" . $jsonFile;
- }
- $report = $this->parseFile($ascFile);
- file_put_contents($jsonFile, json_encode($report));
- }
- public function parseFile ($fileName)
- {
- $ascFile = utf8_encode(file_get_contents($fileName));
- $layers = explode("\r\n\r\n", $ascFile);
- $meta = explode("\r\n", array_shift($layers));
- $report = array(
- 'Titel' => str_replace("\"", "", $meta[0]),
- 'Datum' => str_replace("\"", "", $meta[1]),
- 'Filter' => explode(";", str_replace("\"", "", $meta[2])),
- 'Bericht' => $this->parseLayers($layers)
- );
- return $report;
- }
- private function parseLayers ($layers)
- {
- $result = array();
- foreach ($layers as $layer) {
- $result[] = $this->parseLayer($layer);
- }
- return $result;
- }
- private function parseLayer ($layer)
- {
- $page = explode("\r\n", $layer);
- $result = array(
- 'Ebene' => str_replace("\"", "", array_shift($page)),
- 'Header' => $this->parseTableHeader(array_shift($page)),
- 'Struktur' => $this->parseStructure($page),
- 'Tabelle' => $this->parseTable($page)
- );
- return $result;
- }
- private function parseTableHeader ($header)
- {
- $title = explode(";", str_replace("\"", "", $header));
- $result = array();
- foreach ($title as $col) {
- $format = "Dezimal2";
- if (trim($col) == "") {
- $format = "Text";
- }
- if (strpos($col, "%") > 0) {
- $format = "Prozent1";
- }
- $result[] = array(
- 'Titel' => $col,
- 'Format' => $format
- );
- }
- return $result;
- }
- private function parseStructure ($rows)
- {
- $structure = array();
- $elements = array();
- foreach ($rows as $row) {
- if (trim($row) == "") {
- continue;
- }
- $cols = explode(";", str_replace("\"", "", $row));
- $title = array_shift($cols);
- $level = explode(".", $title);
- $structure = $this->addElement($structure, $level);
- $elements["." . $title] = $cols;
- }
- return $this->getNodes($structure, $elements);
- }
- private function addElement ($structure, $level)
- {
- if (count($level) == 0) {
- return $structure;
- }
- $title = array_shift($level);
- if (!isset($structure[$title])) {
- $structure[$title] = array();
- }
- $structure[$title] = $this->addElement($structure[$title], $level);
- return $structure;
- }
- private function getNodes ($structure, $elements, $title = "")
- {
- $result = array();
- foreach ($structure as $key => $sub) {
- $t = $title . "." . $key;
- $e = array('Ebene' => $key);
- if (count($sub) > 0) {
- $e['Struktur'] = $this->getNodes($sub, $elements, $t);
- }
- if (isset($elements[$t])) {
- $e['Zeile'] = $elements[$t];
- }
- $result[] = $e;
- }
- return $result;
- }
- private function parseTable ($rows)
- {
- $result = array();
- foreach ($rows as $row) {
- if (trim($row) == "") {
- continue;
- }
- $cols = explode(";", str_replace("\"", "", $row));
- $title = array_shift($cols);
- $level = explode(".", $title);
- $result[] = array(
- 'Tiefe' => count($level),
- 'Ebene' => array_pop($level),
- 'Zeile' => $cols
- );
- }
- return $result;
- }
- }
|