Commit 4fd43c2545259bcfbba966a5a54e9a36ec156267
1 parent
04c37836
add detectStartPosition func in CsvParser
Showing
4 changed files
with
64 additions
and
34 deletions
Show diff stats
backend/components/parsers/CsvParser.php
@@ -13,7 +13,8 @@ use Yii; | @@ -13,7 +13,8 @@ use Yii; | ||
13 | use yii\base\ErrorException; | 13 | use yii\base\ErrorException; |
14 | use common\components\debug\CustomVarDamp; | 14 | use common\components\debug\CustomVarDamp; |
15 | 15 | ||
16 | -class CsvParser { | 16 | +class CsvParser |
17 | +{ | ||
17 | 18 | ||
18 | 19 | ||
19 | /** @var bool */ | 20 | /** @var bool */ |
@@ -28,6 +29,7 @@ class CsvParser { | @@ -28,6 +29,7 @@ class CsvParser { | ||
28 | public $in_charset = 'windows-1251'; | 29 | public $in_charset = 'windows-1251'; |
29 | /** @var int - first line for parsing */ | 30 | /** @var int - first line for parsing */ |
30 | public $first_line = 0; | 31 | public $first_line = 0; |
32 | + public $last_line = 10; | ||
31 | 33 | ||
32 | /** @var int - first column for parsing */ | 34 | /** @var int - first column for parsing */ |
33 | public $first_column = 0; | 35 | public $first_column = 0; |
@@ -42,40 +44,51 @@ class CsvParser { | @@ -42,40 +44,51 @@ class CsvParser { | ||
42 | public function setup() | 44 | public function setup() |
43 | { | 45 | { |
44 | 46 | ||
47 | + $this->file->setCsvControl($this->delimiter); | ||
48 | + $this->file->setFlags(\SplFileObject::READ_CSV); | ||
49 | + $this->file->setFlags(\SplFileObject::SKIP_EMPTY); | ||
50 | +// $this->file->setFlags(\SplFileObject::READ_AHEAD); | ||
51 | + | ||
45 | if ($this->auto_detect_start_position) { | 52 | if ($this->auto_detect_start_position) { |
46 | $this->first_line = $this->detectStartPosition(); | 53 | $this->first_line = $this->detectStartPosition(); |
47 | } | 54 | } |
48 | - CustomVarDamp::dumpAndDie( $this->first_line ); | ||
49 | - $this->file->setCsvControl($this->$delimiter); | ||
50 | - $this->file->setFlags(\SplFileObject::READ_CSV); | ||
51 | - $this->file->seek( $this->first_line ); | 55 | + // CustomVarDamp::dumpAndDie($this); |
56 | +// echo $this->file->key(); | ||
57 | +// $this->file->seek($this->first_line + 1); | ||
58 | +// echo $this->file->key(); | ||
52 | 59 | ||
53 | 60 | ||
54 | } | 61 | } |
55 | 62 | ||
56 | 63 | ||
57 | - | ||
58 | - protected function detectStartPosition () | 64 | + protected function detectStartPosition() |
59 | { | 65 | { |
60 | - $first_column = 0; | 66 | + $first_line = 0; |
61 | $find = false; | 67 | $find = false; |
62 | while (!$find) { | 68 | while (!$find) { |
63 | 69 | ||
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 | + $j = 0; |
71 | + $row = $this->readRow(); | ||
72 | + | ||
73 | + if ($row === false) { | ||
74 | + continue; | ||
70 | } | 75 | } |
71 | - if ( $j >= $this->min_column_quantity ) { | ||
72 | - $find = true; | ||
73 | - break; | 76 | + |
77 | + $first_line++; | ||
78 | + for ($i = 1; $i <= count($row); $i++) { | ||
79 | + | ||
80 | + if ($row[$i - 1] <> '') { | ||
81 | + $j++; | ||
82 | + } | ||
83 | + | ||
84 | + if ($j >= $this->min_column_quantity) { | ||
85 | + $find = true; | ||
86 | + break; | ||
87 | + } | ||
74 | } | 88 | } |
75 | } | 89 | } |
76 | - } | ||
77 | 90 | ||
78 | - return $first_column; | 91 | + return $first_line; |
79 | 92 | ||
80 | } | 93 | } |
81 | 94 | ||
@@ -87,10 +100,10 @@ class CsvParser { | @@ -87,10 +100,10 @@ class CsvParser { | ||
87 | { | 100 | { |
88 | // @todo add comments | 101 | // @todo add comments |
89 | $return = []; | 102 | $return = []; |
90 | - | 103 | + //CustomVarDamp::dump(debug_print_backtrace(1,2)); |
91 | $line = 0; | 104 | $line = 0; |
92 | $this->keys = NULL; | 105 | $this->keys = NULL; |
93 | - | 106 | + CustomVarDamp::dump($this->file->key()); |
94 | while (($row = $this->readRow()) !== FALSE) { | 107 | while (($row = $this->readRow()) !== FALSE) { |
95 | $line++; | 108 | $line++; |
96 | 109 | ||
@@ -110,10 +123,16 @@ class CsvParser { | @@ -110,10 +123,16 @@ class CsvParser { | ||
110 | } else { | 123 | } else { |
111 | $return[] = $row; | 124 | $return[] = $row; |
112 | } | 125 | } |
126 | + if(($this->last_line) && ($line > $this->last_line)){ | ||
127 | +// CustomVarDamp::dump($this->last_line); | ||
128 | +// CustomVarDamp::dump($line); | ||
129 | + break; | ||
130 | + } | ||
131 | + | ||
113 | } | 132 | } |
114 | 133 | ||
115 | $this->closeHandler(); | 134 | $this->closeHandler(); |
116 | - | 135 | + //CustomVarDamp::dumpAndDie($return); |
117 | return $return; | 136 | return $return; |
118 | } | 137 | } |
119 | 138 | ||
@@ -127,16 +146,14 @@ class CsvParser { | @@ -127,16 +146,14 @@ class CsvParser { | ||
127 | // @todo add comments | 146 | // @todo add comments |
128 | { | 147 | { |
129 | 148 | ||
130 | - $row = $this->file->fgetcsv( ); | 149 | + $row = $this->file->fgetcsv(); |
131 | // | 150 | // |
132 | if (is_array($row)) { | 151 | if (is_array($row)) { |
133 | - $row = array_slice( $row, $this->first_column ); | ||
134 | - $row = Encoder::encodeArray( $this->in_charset, $this->out_charset, $row ); | ||
135 | - } else{ | ||
136 | - $row = false; | 152 | + // $row = array_slice( $row, $this->first_column ); |
153 | + $row = Encoder::encodeArray($this->in_charset, $this->out_charset, $row); | ||
137 | } | 154 | } |
138 | - | ||
139 | - | 155 | + if (is_null($row)) |
156 | + $row = false; | ||
140 | // if ($this->keys !== NULL) | 157 | // if ($this->keys !== NULL) |
141 | // @$clear_arr[3] = ValueFilter::pricefilter($clear_arr[3]);{}{}{} | 158 | // @$clear_arr[3] = ValueFilter::pricefilter($clear_arr[3]);{}{}{} |
142 | 159 |
backend/components/parsers/ParserHandler.php
@@ -35,7 +35,6 @@ class ParserHandler { | @@ -35,7 +35,6 @@ class ParserHandler { | ||
35 | 35 | ||
36 | //preg_match( '/\.[^\.]+$/i',$filePath, $resultArray ); | 36 | //preg_match( '/\.[^\.]+$/i',$filePath, $resultArray ); |
37 | $this->extension = $this->fileObject->getExtension(); | 37 | $this->extension = $this->fileObject->getExtension(); |
38 | - $this->run(); | ||
39 | } | 38 | } |
40 | 39 | ||
41 | public function run(){ | 40 | public function run(){ |
@@ -46,12 +45,14 @@ class ParserHandler { | @@ -46,12 +45,14 @@ class ParserHandler { | ||
46 | $csvParser = Yii::createObject([ | 45 | $csvParser = Yii::createObject([ |
47 | 'class' => 'backend\components\parsers\CsvParser', | 46 | 'class' => 'backend\components\parsers\CsvParser', |
48 | 'file' => $this->fileObject, | 47 | 'file' => $this->fileObject, |
48 | + 'auto_detect_start_position' => true, | ||
49 | ]); | 49 | ]); |
50 | //CustomVarDamp::dumpAndDie($csvParser); | 50 | //CustomVarDamp::dumpAndDie($csvParser); |
51 | - $csvParser = new CsvParser( ); | ||
52 | - $csvParser->setup( $this->fileObject, $first_line, $first_column ); | 51 | + // $csvParser = new CsvParser( ); |
52 | + $csvParser->setup( ); | ||
53 | 53 | ||
54 | - return $csvParser->read(); | 54 | +// CustomVarDamp::dumpAndDie($data); |
55 | + return $csvParser->read();;// | ||
55 | }; | 56 | }; |
56 | } | 57 | } |
57 | } | 58 | } |
backend/views/parser/results.php
@@ -22,9 +22,14 @@ $this->params['breadcrumbs'][] = $this->title; | @@ -22,9 +22,14 @@ $this->params['breadcrumbs'][] = $this->title; | ||
22 | 'dataProvider' => $dataProvider, | 22 | 'dataProvider' => $dataProvider, |
23 | 'columns' => [['class' => SerialColumn::className()], | 23 | 'columns' => [['class' => SerialColumn::className()], |
24 | '1', | 24 | '1', |
25 | - '2',] | 25 | + '2', |
26 | + '3', | ||
27 | + '4', | ||
28 | + '5',] | ||
26 | ]); ?> | 29 | ]); ?> |
27 | 30 | ||
31 | + | ||
32 | + | ||
28 | <?= Html::a('Вернуться', ['parser/index'], ['class' => 'btn btn-primary', 'name' => 'Return',]) ?> | 33 | <?= Html::a('Вернуться', ['parser/index'], ['class' => 'btn btn-primary', 'name' => 'Return',]) ?> |
29 | 34 | ||
30 | </div> | 35 | </div> |
31 | \ No newline at end of file | 36 | \ No newline at end of file |
common/components/debug/CustomVarDamp.php
@@ -17,4 +17,11 @@ class CustomVarDamp extends BaseVarDumper { | @@ -17,4 +17,11 @@ class CustomVarDamp extends BaseVarDumper { | ||
17 | echo "</pre>"; | 17 | echo "</pre>"; |
18 | die; | 18 | die; |
19 | } | 19 | } |
20 | + public static function dump($var, $depth = 10, $highlight = false) | ||
21 | + { | ||
22 | + echo "<pre>"; | ||
23 | + echo static::dumpAsString($var, $depth, $highlight); | ||
24 | + echo "</pre>"; | ||
25 | + | ||
26 | + } | ||
20 | } | 27 | } |
21 | \ No newline at end of file | 28 | \ No newline at end of file |