Commit cd8b9f70e71a504b61f7ba46ab66f662730141e8
1 parent
0c6fd004
add cleanUp method to Parser class
Showing
7 changed files
with
59 additions
and
38 deletions
Show diff stats
lib/CsvParser.php
... | ... | @@ -34,6 +34,8 @@ class CsvParser extends TableParser |
34 | 34 | { |
35 | 35 | parent::read(); |
36 | 36 | |
37 | + $this->cleanUp(); | |
38 | + | |
37 | 39 | return $this->result; |
38 | 40 | } |
39 | 41 | |
... | ... | @@ -54,6 +56,10 @@ class CsvParser extends TableParser |
54 | 56 | $j = 0; |
55 | 57 | for ($i = 1; $i <= count( $this->row ); $i++) { |
56 | 58 | |
59 | + if ( !isset( $this->row[ $i - 1 ] ) ) { | |
60 | + continue; | |
61 | + } | |
62 | + | |
57 | 63 | if ( $this->isEmptyColumn( $this->row[$i - 1] ) ) { |
58 | 64 | $j++; |
59 | 65 | } |
... | ... | @@ -70,4 +76,8 @@ class CsvParser extends TableParser |
70 | 76 | protected function isEmptyColumn( $val ){ |
71 | 77 | return $val == ''; |
72 | 78 | } |
79 | + | |
80 | + protected function setResult( ){ | |
81 | + $this->result[] = $this->row; | |
82 | + } | |
73 | 83 | } |
74 | 84 | \ No newline at end of file | ... | ... |
lib/Parser.php
... | ... | @@ -17,6 +17,9 @@ abstract class Parser |
17 | 17 | public $converter_conf = []; |
18 | 18 | protected $converter = NULL; |
19 | 19 | |
20 | + /** @var экземляр SplFileObject читаемого файла */ | |
21 | + public $file; | |
22 | + | |
20 | 23 | /** |
21 | 24 | * @var array - результирующий массив с отпарсенными значениями |
22 | 25 | */ |
... | ... | @@ -28,9 +31,15 @@ abstract class Parser |
28 | 31 | /** @var bool |
29 | 32 | имеет ли файл заголовок который будет установлен ключами возвращемого массива*/ |
30 | 33 | public $has_header_row = false; |
34 | + /* | |
35 | + *если есть ключи, то колонки с пустыми значениями будут пропускаться (из ряда такие значения будут удаляться), | |
36 | + * например если в файле вторая колонка пустая то она будет удалена | |
37 | + * если есть $has_header_row - то первая значимая строка становится ключами, но пустые колонки не удаляются из ряда | |
38 | + * например если в файле вторая колонка пустая то ей будет назначен соответсвующий ключ (второй) из первой строки | |
39 | + * все описаное выше реализуется в дочернем семействе классов TableParser в методе filterRow() | |
40 | + * для xml происходит просто сопоставление переданных ключей с прочитанными | |
41 | + */ | |
31 | 42 | |
32 | - /** @var экземляр SplFileObject читаемого файла */ | |
33 | - public $file; | |
34 | 43 | |
35 | 44 | |
36 | 45 | |
... | ... | @@ -78,4 +87,14 @@ abstract class Parser |
78 | 87 | return $arr; |
79 | 88 | |
80 | 89 | } |
90 | + | |
91 | + protected function cleanUp( ) | |
92 | + { | |
93 | + unset( $this->file ); | |
94 | + unset( $this->converter ); | |
95 | + unset( $this->converter_conf ); | |
96 | + | |
97 | + } | |
98 | + | |
99 | + | |
81 | 100 | } |
82 | 101 | \ No newline at end of file | ... | ... |
lib/ParserHandler.php
... | ... | @@ -60,24 +60,12 @@ class ParserHandler |
60 | 60 | |
61 | 61 | public function run() |
62 | 62 | { |
63 | - $result = []; | |
64 | - if (count($this->custom_configuration)) { | |
63 | + $parser = $this->createObjectByConfiguration( $this->custom_configuration ); | |
65 | 64 | |
66 | - $parser = $this->createObjectByConfiguration($this->custom_configuration); | |
67 | - | |
68 | - try { | |
69 | - | |
70 | - $parser->setup(); | |
71 | - $result = $parser->read(); | |
72 | - | |
73 | - } catch (\ErrorException $e) { | |
74 | - | |
75 | - echo $e->getMessage(); | |
76 | - | |
77 | - } | |
78 | - | |
79 | - } | |
65 | + $parser->setup(); | |
66 | + $result = $parser->read(); | |
80 | 67 | |
68 | + unset($this->fileObject); | |
81 | 69 | return $result; |
82 | 70 | } |
83 | 71 | |
... | ... | @@ -106,6 +94,10 @@ class ParserHandler |
106 | 94 | { |
107 | 95 | return ObjectCreator::build($configuration); |
108 | 96 | } |
97 | + | |
98 | + | |
99 | + | |
100 | + | |
109 | 101 | } |
110 | 102 | |
111 | 103 | ... | ... |
lib/TableParser.php
... | ... | @@ -94,11 +94,8 @@ abstract class TableParser extends Parser { |
94 | 94 | // обнуляем счетчик, так как считаюся пустые строки ПОДРЯД |
95 | 95 | $empty_lines = 0; |
96 | 96 | |
97 | - | |
98 | - | |
99 | 97 | } |
100 | 98 | |
101 | - | |
102 | 99 | } |
103 | 100 | /** |
104 | 101 | * определяет первую значимую строку, |
... | ... | @@ -131,7 +128,8 @@ abstract class TableParser extends Parser { |
131 | 128 | if ( $this->keys !== NULL ) { |
132 | 129 | |
133 | 130 | if (count($this->keys) !== count($this->row)) { |
134 | - throw new \Exception("Ошибка парсинга файла в строке # {$this->current_row_number}. Не соответсвие числа ключевых колонок (заголовка) - числу колонок с данными"); | |
131 | + throw new \Exception("Ошибка парсинга файла в строке # {$this->current_row_number}. | |
132 | + Не соответсвие числа ключевых колонок (заголовка) - числу колонок с данными"); | |
135 | 133 | } |
136 | 134 | |
137 | 135 | $this->row = array_combine($this->keys, $this->row); |
... | ... | @@ -161,15 +159,13 @@ abstract class TableParser extends Parser { |
161 | 159 | } |
162 | 160 | |
163 | 161 | protected function filterRow(){ |
164 | - // если есть заголовок или ключи - все значения нужны, не фильтруем | |
165 | - if ( $this->has_header_row || $this->keys !== NULL ) { | |
162 | + // если есть заголовок - все значения нужны, не фильтруем | |
163 | + if ( $this->has_header_row || $this->row === NULL ) { | |
166 | 164 | return; |
167 | 165 | } |
168 | - // CustomVarDamp::dump( $this->row); | |
169 | 166 | $this->row = array_filter( $this->row, function($val){ |
170 | 167 | return !$this->isEmptyColumn($val); |
171 | 168 | }); |
172 | - //CustomVarDamp::dump( $this->row); | |
173 | 169 | } |
174 | 170 | |
175 | 171 | protected function isLastLine(){ | ... | ... |
lib/XlsxParser.php
... | ... | @@ -62,18 +62,13 @@ class XlsxParser extends TableParser { |
62 | 62 | $this->current_node = $xml->sheetData->row; |
63 | 63 | $this->current_node->rewind(); |
64 | 64 | if ( $this->current_node->valid() ) { |
65 | - | |
66 | 65 | parent::read(); |
67 | - | |
68 | 66 | } |
69 | - | |
70 | 67 | } |
71 | - | |
72 | 68 | } |
73 | 69 | |
74 | - | |
70 | + $this->cleanUp(); | |
75 | 71 | if ( $this->active_sheet ) { |
76 | - | |
77 | 72 | // в настройках указан конкретный лист с которогшо будем производить чтение, поэтому и возвращаем подмассив |
78 | 73 | return $this->result[ $this->current_sheet ]; |
79 | 74 | }else{ |
... | ... | @@ -90,7 +85,6 @@ class XlsxParser extends TableParser { |
90 | 85 | throw new \Exception( 'Ошибка создания временного каталога - ' . $this->path_for_extract_files ); |
91 | 86 | } |
92 | 87 | |
93 | - | |
94 | 88 | $zip = new \ZipArchive; |
95 | 89 | if ( $zip->open( $this->file->getPathname() ) === TRUE ) { |
96 | 90 | $zip->extractTo( $this->path_for_extract_files . '/' ); |
... | ... | @@ -226,9 +220,16 @@ class XlsxParser extends TableParser { |
226 | 220 | } |
227 | 221 | } |
228 | 222 | |
229 | - function __destruct() | |
223 | + | |
224 | + protected function cleanUp() | |
230 | 225 | { |
226 | + parent::cleanUp(); | |
227 | + unset($this->strings_arr); | |
228 | + unset($this->sheets_arr); | |
229 | + unset($this->current_node); | |
230 | + | |
231 | 231 | $this->deleteExtractFiles(); |
232 | + | |
232 | 233 | } |
233 | 234 | |
234 | 235 | ... | ... |
lib/XmlParser.php
... | ... | @@ -24,16 +24,17 @@ class XmlParser extends Parser{ |
24 | 24 | |
25 | 25 | } |
26 | 26 | |
27 | + $this->cleanUp(); | |
27 | 28 | return $result; |
28 | 29 | } |
29 | 30 | |
30 | 31 | |
31 | 32 | /** |
32 | 33 | * Converts an XML string to a PHP array |
33 | - * | |
34 | - * @uses recursiveXMLToArray() | |
35 | - * @param string $file_path | |
36 | - * @return array | |
34 | + * @param $file_path | |
35 | + * @return mixed | |
36 | + * @throws Exception | |
37 | + * @throws \Exception | |
37 | 38 | */ |
38 | 39 | protected function xmlToArray( $file_path ) { |
39 | 40 | ... | ... |
lib/YiiMultiparser.php
... | ... | @@ -17,6 +17,7 @@ class YiiMultiparser extends Component{ |
17 | 17 | |
18 | 18 | public $configuration; |
19 | 19 | public $parserHandler; |
20 | +public $filePath; | |
20 | 21 | |
21 | 22 | public function init() |
22 | 23 | { |
... | ... | @@ -29,6 +30,7 @@ public $parserHandler; |
29 | 30 | |
30 | 31 | public function parse( $filePath, $options = [] ){ |
31 | 32 | |
33 | + $this->filePath = $filePath; | |
32 | 34 | $this->parserHandler->setup( $filePath, $options ); |
33 | 35 | |
34 | 36 | return $this->parserHandler->run(); | ... | ... |