Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Правильная обработка csv
 
 автор: Richard Ferlow   (10.12.2007 в 13:21)   письмо автору
 
 

Прайс-листы берем и сохраняем из экселя в csv формат.

Далее на php черех explode запихиваем в базу данных.

Вопрос в том, как правильно это сделать, обработать, чтобы коллизий не возникло.

Например там перевод строки в экселе вставленный, или знако ";", используемый в самом прайсе ?

   
 
 автор: Trianon   (10.12.2007 в 14:43)   письмо автору
 
   для: Richard Ferlow   (10.12.2007 в 13:21)
 

Интересно, почему explode() ?
Формат csv куда сложнее простого implode.

Существует функция fgetcsv() - её и применяйте.

А ещё я бы очень хотел взглянуть на пример csv-файла со вставленным переводом строки. Кроме шуток.

   
 
 автор: sim5   (10.12.2007 в 14:56)   письмо автору
 
   для: Trianon   (10.12.2007 в 14:43)
 

1;"text
text";2;3

   
 
 автор: Trianon   (10.12.2007 в 15:14)   письмо автору
 
   для: sim5   (10.12.2007 в 14:56)
 

И этот csv был получен честным путем, то бишь создан в excel?

   
 
 автор: sim5   (10.12.2007 в 15:18)   письмо автору
 
   для: Trianon   (10.12.2007 в 15:14)
 

Trianon, вы меня еще мошеничестве подозреваете? Ай не хорошо :) "Честно", если жмахать Enter в ячейке, ничего не получится, но если вставить в ячейку текст с переводом строк, например, из Блокнота - ... в общем попробуйте сами.

   
 
 автор: Trianon   (10.12.2007 в 15:27)   письмо автору
 
   для: sim5   (10.12.2007 в 15:18)
 

попробовал.
картинка удручающая.
Хотя бы тем, что переводы строк внутри ячейки и между строками - разные.

fgetcsv() эту "прелесть" хавает, интересно?
Во всех её вариациях...

   
 
 автор: sim5   (10.12.2007 в 15:35)   письмо автору
 
   для: Trianon   (10.12.2007 в 15:27)
 

Да, внутри ячейки будет 0А. fgetcsv() лажает в таком случае.

   
 
 автор: Trianon   (10.12.2007 в 15:38)   письмо автору
 
   для: sim5   (10.12.2007 в 15:35)
 

И как? Баг-репорт писать будем?

   
 
 автор: sim5   (10.12.2007 в 15:43)   письмо автору
 
   для: Trianon   (10.12.2007 в 15:38)
 

А вам больше всех надо?))

   
 
 автор: Trianon   (10.12.2007 в 15:57)   письмо автору
 
   для: sim5   (10.12.2007 в 15:43)
 

Мне - нет. Мне - только fgetcsv . Но поскольку они его при всём желании в существующих хостеров не запихнут, то и его не особо надо...
Придется дописывать собственный парсер...

   
 
 автор: sim5   (10.12.2007 в 16:04)   письмо автору
 
   для: Trianon   (10.12.2007 в 15:57)
 

Ну тогда заодно и отпишите баг.)

   
 
 автор: Trianon   (10.12.2007 в 16:06)   письмо автору
 
   для: sim5   (10.12.2007 в 16:04)
 

мне проще парсер дописать. :)

   
 
 автор: sim5   (10.12.2007 в 16:14)   письмо автору
 
   для: Trianon   (10.12.2007 в 16:06)
 

И как расширение - csvlib, распространять.

   
 
 автор: Richard Ferlow   (10.12.2007 в 16:21)   письмо автору
 
   для: sim5   (10.12.2007 в 16:14)
 

Самое обидное, что эта фигня почему-то и встречается....хотя надо же представить, чтобы кто-то в прай листы данные из блокнота пихал =)

   
 
 автор: sim5   (10.12.2007 в 16:57)   письмо автору
 
   для: Trianon   (10.12.2007 в 16:06)
 

Кстати, опасения напрасны - в 5 все нормально, а вот на 4.3.9 почему-то глюк был, по идее то ведь тоже не должно быть?

   
 
 автор: Trianon   (10.12.2007 в 17:50)   письмо автору
 
   для: sim5   (10.12.2007 в 16:57)
 

В changelog'e php5 функция fgetcsv упоминается около пяти раз.
а в php4 - как минимум в 4.3.10 и 4.3.11
Мерзкая на самом деле функция.
Потому что тот, кто придумывал формат этого CSV , с головой совсем таки не дружил....

   
 
 автор: sim5   (10.12.2007 в 18:08)   письмо автору
 
   для: Trianon   (10.12.2007 в 17:50)
 

Я с этой вставкой столкнулся случайно, месяцев 5 назад примерно. Товарищ печатал одним пальцем (в ворде), потом глядел на экран, жал Enter, так как решал, что пора.., а затем все это вставлял в ячейку. Тогда у меня стояла 4.3.9 - и результатом были лишние поля. Я тогда решил проблему кардинально - просто сказал ему, если будшеь жать без причины Enter, убью.)
Тогда надобность в csv была временной. С тех пор ни разу не требовалась мне эта функция. А тут решил проверить - работает. Поля определяются правильно, хотя сам перенос в строке так и остается. Сейчас у меня 5.2.6. Я вот просто сомневаюсь, может это у меня глючная либ была, странностей много было с ней. Кто бы на 4 версии проверил, интересно было бы узнать.

   
 
 автор: Trianon   (10.12.2007 в 18:17)   письмо автору
 
   для: sim5   (10.12.2007 в 18:08)
 

Убили?
:)

   
 
 автор: sim5   (10.12.2007 в 18:27)   письмо автору
 
   для: Trianon   (10.12.2007 в 18:17)
 

Нет, он из понятливых. :)

   
 
 автор: Richard Ferlow   (10.12.2007 в 21:39)   письмо автору
 
   для: sim5   (10.12.2007 в 18:08)
 

Примерно так же справлялся - говорил, как надо подготавливать :)

   
 
 автор: Richard Ferlow   (10.12.2007 в 15:10)   письмо автору
 
   для: Trianon   (10.12.2007 в 14:43)
 

Пожалуй стоит поизучать эту функцию.

Вот я к тому и спрашиваю, что через explode не все гладко.

Хотя если подготавливать файл специально, то работает.

   
 
 автор: mihdan   (10.12.2007 в 17:52)   письмо автору
 
   для: Richard Ferlow   (10.12.2007 в 13:21)
 

Может не в тему, но по-моему вас заинтересует это

http://softtime.ru/info/csv.php

   
 
 автор: Trianon   (10.12.2007 в 18:00)   письмо автору
 
   для: mihdan   (10.12.2007 в 17:52)
 

>Может не в тему, но по-моему вас заинтересует это

Не поможет. У Антона тоже жесткое соответствие между числом строк csv-файла и числом элементов в массиве результата. А значит встроенные переводы строк ожидаемо обрабатываться не будут.

   
 
 автор: mihdan   (10.12.2007 в 18:14)   письмо автору
 
   для: mihdan   (10.12.2007 в 17:52)
 

Посмотрите это может поможет

   
 
 автор: Richard Ferlow   (10.12.2007 в 21:39)   письмо автору
 
   для: mihdan   (10.12.2007 в 18:14)
 

Не найдено ни одного документа, соответствующего запросу csv.

Не помогло :)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования