Commit e55d56cc451aee24d07b72e478b28ad90b3dc88b
1 parent
dfeb2d10
add draft version of detect function
Showing
2 changed files
with
46 additions
and
20 deletions
Show diff stats
backend/components/parsers/CsvParser.php
... | ... | @@ -13,51 +13,71 @@ use Yii; |
13 | 13 | use yii\base\ErrorException; |
14 | 14 | use common\components\debug\CustomVarDamp; |
15 | 15 | |
16 | -class CsvParser implements \IteratorAggregate { | |
16 | +class CsvParser { | |
17 | 17 | |
18 | 18 | |
19 | 19 | /** @var bool */ |
20 | - private $hasHeaderRow; | |
20 | + public $hasHeaderRow = false; | |
21 | 21 | |
22 | 22 | /** @var resource */ |
23 | - private $file; | |
23 | + public $file; | |
24 | 24 | |
25 | 25 | /** @var out encoding charset */ |
26 | - private $out_charset = 'UTF-8'; | |
26 | + public $out_charset = 'UTF-8'; | |
27 | 27 | /** @var out encoding charset */ |
28 | - private $in_charset; | |
28 | + public $in_charset = 'windows-1251'; | |
29 | 29 | /** @var int - first line for parsing */ |
30 | - private $first_line; | |
30 | + public $first_line = 0; | |
31 | 31 | |
32 | 32 | /** @var int - first column for parsing */ |
33 | - private $first_column; | |
33 | + public $first_column = 0; | |
34 | 34 | |
35 | 35 | /** @var array - array of headers values */ |
36 | - private $keys; | |
36 | + public $keys; | |
37 | + public $delimiter = ';'; | |
38 | + public $auto_detect_start_position = false; | |
39 | + public $min_column_quantity = 5; | |
37 | 40 | |
38 | - public function setup( $file, $first_line, $first_column, $hasHeaderRow = false, $delimiter = ';') | |
39 | - { | |
40 | - | |
41 | - $this->first_line = $first_line; | |
42 | - $this->first_column = $first_column; | |
43 | 41 | |
44 | - $this->file = $file; | |
42 | + public function setup() | |
43 | + { | |
45 | 44 | |
46 | - $this->file->setCsvControl($delimiter); | |
45 | + if ($this->auto_detect_start_position) { | |
46 | + $this->first_line = $this->detectStartPosition(); | |
47 | + } | |
48 | + CustomVarDamp::dumpAndDie( $this->first_line ); | |
49 | + $this->file->setCsvControl($this->$delimiter); | |
47 | 50 | $this->file->setFlags(\SplFileObject::READ_CSV); |
48 | 51 | $this->file->seek( $this->first_line ); |
49 | 52 | |
50 | 53 | |
51 | - $this->in_charset = 'windows-1251'; | |
52 | - $this->hasHeaderRow = $hasHeaderRow; | |
53 | 54 | } |
54 | 55 | |
55 | - public function getIterator() | |
56 | + | |
57 | + | |
58 | + protected function detectStartPosition () | |
56 | 59 | { |
57 | - return new \ArrayIterator($this->read()); | |
58 | - } | |
60 | + $first_column = 0; | |
61 | + $find = false; | |
62 | + while (!$find) { | |
63 | + | |
64 | + $j = 0; | |
65 | + $row = $this->readRow(); | |
66 | + $first_column++; | |
67 | + for ($i = 1; $i<=count($row); $i++) { | |
68 | + if (!$row[$i]) { | |
69 | + $j++; | |
70 | + } | |
71 | + if ( $j >= $this->min_column_quantity ) { | |
72 | + $find = true; | |
73 | + break; | |
74 | + } | |
75 | + } | |
76 | + } | |
59 | 77 | |
78 | + return $first_column; | |
60 | 79 | |
80 | + } | |
61 | 81 | |
62 | 82 | /** |
63 | 83 | * @return array | ... | ... |
backend/components/parsers/ParserHandler.php
1 | 1 | <?php |
2 | 2 | namespace backend\components\parsers; |
3 | +use common\components\debug\CustomVarDamp; | |
3 | 4 | |
4 | 5 | use Yii; |
5 | 6 | |
... | ... | @@ -42,6 +43,11 @@ class ParserHandler { |
42 | 43 | $first_line = isset( $this->options->first_line )? $this->options->first_line : 0; |
43 | 44 | $first_column = isset( $this->options->first_column )? $this->options->first_column : 0; |
44 | 45 | |
46 | + $csvParser = Yii::createObject([ | |
47 | + 'class' => 'backend\components\parsers\CsvParser', | |
48 | + 'file' => $this->fileObject, | |
49 | + ]); | |
50 | + //CustomVarDamp::dumpAndDie($csvParser); | |
45 | 51 | $csvParser = new CsvParser( ); |
46 | 52 | $csvParser->setup( $this->fileObject, $first_line, $first_column ); |
47 | 53 | ... | ... |