PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Страниц (1): [1]
Найдено сообщений: 6
Evgeniii
Отправлено: 25 Января, 2017 - 21:37:03 • Тема: Игнорируется последнее поле при разборе CSV файла • Форум: Вопросы новичков
Ответов: 10 Просмотров: 706
skruglikov пишет: ведь у вас в массиве $data все данные есть, ну на сколько я понял...
Все верно, в массиве данные есть, почему-то неверно опознается конец строки.
Читается файл вот этой функцией, возможно в ней где-то ошибка сидит
PHP:
скопировать код в буфер обмена
function fgetcsv ( $f , $length , $d = "," , $q = '"' ) { $st = fgets ( $f , $length ) ; if ( $st === false || $st === null ) return $st ;
while ( $st !== "" && $st !== false ) {
if ( $st [ 0] !== $q ) {
# Non-quoted.
} else {
# Quoted field.
$field = "" ;
while ( 1 ) {
# Find until finishing quote (EXCLUDING) or eol (including)
$part = $p [ 1] ;
if ( strlen ( $st ) && $st [ 0
] === $q ) { # Found finishing quote.
break ;
} else {
# No finishing quote - newline.
$st = fgets ( $f , $length ) ; }
}
}
$list [ ] = $field ;
}
return $list ;
}
(Добавление)
Ошибка именно в этой функции где-то
Evgeniii
Отправлено: 25 Января, 2017 - 11:01:36 • Тема: Игнорируется последнее поле при разборе CSV файла • Форум: Вопросы новичков
Ответов: 10 Просмотров: 706
skruglikov пишет: в 7 строке поменяйте 'w'=>'a'
Спасибо! Теперь записывается как надо.
Теперь вопрос, как к каждой строке добавить в конце разделитель ;
Код выглядит так:
Файл читается и записывается, но в конце каждой строки после идентификатора нет разделителя, как мне его добавить при записи?
Вот так выглядит то, что записывается
CODE (
htmlphp ):
скопировать код в буфер обмена
Категория; "Название товара" ; Производитель; "Цена товара" ; "Количество на складе" ; "Ссылка на фотографию (big)" ; "Ссылка для покупки товара" ; "Краткое описание" ; "Полное описание" ; "Ссылка на фото (small)" ; Активность; Идентификатор
Real; "Soft" ; "Германия" ; 45.94 ; 1000 ; http: //www.ez.by/uplo.jpg;http://www.ez.by/sgiant/;"Маленькое описание";"Большое описание";;on;5663060000
Boos; "Aquaglide" ;; 15.10 ; 1000 ; http: //www.ez.by/f444160a444c9ef.jpg;http://www.exz.by/0-ml/;"Маленькое описание";"Большое описание";;on;6171050000
Необходимо что бы в записанном файле после идентификатора присутствовал символ разделителя ;
(Добавление)
Предыдущий вопрос решил с помощью array_push
Evgeniii
Отправлено: 23 Января, 2017 - 19:13:56 • Тема: Игнорируется последнее поле при разборе CSV файла • Форум: Вопросы новичков
Ответов: 10 Просмотров: 706
Сломал всю голову уже...
Написал небольшой скрипт
print_r показывает все данные из 11 строки файла CSV.csv как надо
Но при выполнении fputcsv в файл записывается только дынные из последней строки, а именно
Почему так?
Evgeniii
Отправлено: 23 Января, 2017 - 17:05:00 • Тема: Игнорируется последнее поле при разборе CSV файла • Форум: Вопросы новичков
Ответов: 10 Просмотров: 706
skruglikov пишет: но перед тем как это делать, рекомендую проверить содержимое переменной $data перед строкой №15 вашего кода
Содержимое переменной следующее
CODE (
htmlphp ):
скопировать код в буфер обмена
Array ( [ 0
] => Категория
[ 1
] => Название товара
[ 2
] => Производитель
[ 3
] => Цена товара
[ 4
] => Количество на складе
[ 5
] => Ссылка на фотографию
( big
) [ 6
] => Ссылка для покупки товара
[ 7
] => Краткое описание
[ 8
] => Полное описание
[ 9
] => Ссылка на фото
( small
) [ 10
] => Активность
[ 11
] => Идентификатор
) Array ( [ 0 ] => Bigger
[ 1 ] => Soft
[ 2 ] => Orion
[ 3 ] => 45
. 94
[ 4 ] => 10 [ 5 ] => www
. ez
. by
/ uplo1b167c898391dac19
. jpg
[ 6 ] => http
: //www.ez.by/soft/ [7] => Маленькое описание... [8] =>Большое описание [9] => [10] => on [11] => 5663060000 )
Evgeniii
Отправлено: 23 Января, 2017 - 00:56:54 • Тема: Игнорируется последнее поле при разборе CSV файла • Форум: Вопросы новичков
Ответов: 10 Просмотров: 706
Есть скрипт, который разбирает из CSV файла данные.
CSV фал выглядит следующим образом:
CODE (
htmlphp ):
скопировать код в буфер обмена
Категория; "Название товара" ; Производитель; "Цена товара" ; "Количество на складе" ; "Ссылка на фотографию (big)" ; "Ссылка для покупки товара" ; "Краткое описание" ; "Полное описание" ; "Ссылка на фото (small)" ; Активность; Идентификатор
Bigger; "Soft" ; "Orion" ; 45.94 ; 10 ; http: //www.ez.by/uplo1b167c898391dac19.jpg;http://www.ez.by/soft/;"Маленькое описание...";"Большое описание";;on;5663060000
Последнее поле с идентификатором не обрабатывается. Если после идентификатора добавить разделитель ";", то есть сделать его не последним стобцом, то данные из него обрабатываются.
Как заставить обрабатывать информацию в последнем столбце?
Заранее спасибо.
PHP:
скопировать код в буфер обмена
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 ) ) {
$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 ) { // Если существует делаем обновление
$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 ; $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' ) ;
}
Страниц (1): [1]
Powered by ExBB FM 1.0 RC1. InvisionExBB