E
E
Evgenka12017-01-23 01:47:37
csv
Evgenka1, 2017-01-23 01:47:37

Why is the last field ignored when parsing a CSV file?

There is a script that parses data from a CSV file.
The problem is that the field in the last column is ignored, the script does not see information in it. The
CSV file looks like this:

Категория;"Название товара";Производитель;"Цена товара";"Количество на складе";"Ссылка на фотографию (big)";"Ссылка для покупки товара";"Краткое описание";"Полное описание";"Ссылка на фото (small)";Активность;Идентификатор
Bigger;"Soft";"Orion";45.94;10;http://www.ez.by/uplo1b167c898391dac19.jpg;http://www.ez.by/soft/;"Маленькое описание...";"Большое описание";;on;5663060000

It is the field with the identifier that is not processed. If you add the separator ";" after the identifier, that is, make it not the last column, then the data from it is processed.
How to force to process the information in the last column?
Thanks in advance.
Script code:
if((($handle = fopen($local, "r")) !== FALSE) && $r) {

          $headers = fgetcsv($handle, 0, ';', '"');
          
          if ((int) $this->request->post['pointer'] == '0' ) { // Если это первая цикл - обнуляем количество товара
            if (!$this->request->post['reset_qty']) {
              $this->model_catalog_csvsynchroniz->resetQantity($shopname);//Обнуляем количество товара
            }
          }else{
            fseek($handle,$this->request->post['pointer']);// Если не первый - выставляем указатель на то место где закончили
          }

          $k = 0;
          while((($data = $FGetCSV->fgetcsv($handle, 30000, ';', '"')) !== FALSE ) && ($k < $inpart_quantity)) {
            $num = count($data);
            $pairs = array();

            $product_model = $data[$this->request->post['model_number']];

            if ($product_model != '') {
              $p_exist = $this->model_catalog_csvsynchroniz->productExist($product_model, $shopname);//Проверяем существование товара

              if ($p_exist->row){// Если существует делаем обновление
                $data_old = array();
                $product_id = $p_exist->row['product_id'];
                $update_data = $this->get_data($headers,$data,$num,$product_model,$data_old,$nacenka,$optprice,$this->request->post);//Меняем поля из файла csv

                $this->model_catalog_csvsynchroniz->updateProduct($update_data,$product_id);
              } 
            /*	else { // Если нет - создаем новый
                $default_data = $this->default_data($product_model);//Заливаем дефолтные данные товара
                $add_data = $this->get_data($headers,$data,$num,$product_model,$default_data,$nacenka,$this->request->post);//Меняем поля из файла csv
                $this->model_catalog_product->addProduct($add_data);
              } */
            }						
            $k++;
          }
          $pointer = ftell($handle);
          $eof_flag = feof($handle) + 0; 
          fclose($handle);
          $json['info'] = sprintf($this->language->get("text_updated"), $k+1);
          $json['updated'] = $k;
          $json['pointer'] = $pointer;
          $json['eof_flag'] = $eof_flag;

          $this->cache->delete('product');
        } else {

          $json['warning'] = $this->language->get('file_error');

        }

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question