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 |