|
|
|
|
<?
mysql_connect("localhost","local","12345");
mysql_select_db("kvadrat");
$f=$_FILES['file']['name'];
if($f){
mysql_query("CREATE TABLE `kvadrat`.`tmp` ( `id` int( 11 ) NOT NULL default '0',
`address` varchar( 200 ) NOT NULL default '',
`size` varchar( 10 ) NOT NULL default '3x4',
`hot` varchar( 11 ) NOT NULL default '0',
`svet` varchar( 11 ) NOT NULL default '0',
`excise` varchar( 11 ) NOT NULL default '0',
`free_from_1` varchar( 100 ) default NULL ,
`january` varchar( 100 ) NOT NULL default '',
`free_from_2` varchar( 100 ) default NULL ,
`february` varchar( 100 ) NOT NULL default '',
`free_from_3` varchar( 100 ) default NULL ,
`march` varchar( 100 ) NOT NULL default '',
`free_from_4` varchar( 100 ) default NULL ,
`april` varchar( 100 ) NOT NULL default '',
`free_from_5` varchar( 100 ) default NULL ,
`may` varchar( 100 ) NOT NULL default '',
`free_from_6` varchar( 100 ) default NULL ,
`june` varchar( 100 ) NOT NULL default '',
`free_from_7` varchar( 100 ) default NULL ,
`july` varchar( 100 ) NOT NULL default '',
`free_from_8` varchar( 100 ) default NULL ,
`august` varchar( 100 ) NOT NULL default '',
`free_from_9` varchar( 100 ) default NULL ,
`september` varchar( 100 ) NOT NULL default '',
`free_from_10` varchar( 100 ) default NULL ,
`october` varchar( 100 ) NOT NULL default '',
`free_from_11` varchar( 100 ) default NULL ,
`november` varchar( 100 ) NOT NULL default '',
`free_from_12` varchar( 100 ) default NULL ,
`december` varchar( 100 ) NOT NULL default '',
`free_from_0` varchar( 100 ) default NULL ,
`january1` varchar( 100 ) NOT NULL default '',
`pic1` varchar( 50 ) NOT NULL default '',
`pic2` varchar( 50 ) NOT NULL default '',
`text` text NOT NULL ,
KEY `id` ( `id` ) ) ENGINE = MyISAM DEFAULT CHARSET = cp1251;
");
$arr = file($f);
unset($arr[0]);
sort($arr);
$sql = "INSERT INTO tmp VALUES ";
$i = 1;
foreach($arr as $line)
{
$number = explode(";",$line);
$order = "($i,";
foreach($number as $num)
{
$order .= "'$num',";
}
$order = substr($order,0,strlen($order) - 1).")";
$sql .= "$order,";
$i++;
}
$sql = substr($sql,0,strlen($sql) - 1);
if(!mysql_query($sql))
{
echo $sql."<br>";
echo "Ошибка - ".mysql_error();
}
else {mysql_query("DROP table `address`");
mysql_query("RENAME TABLE `kvadrat`.`tmp` TO `kvadrat`.`address`") ;}
unset($f);
}
?>
|
вот скрипт который разбивает на "блоки" данные из файла для импорта в БД .. но тут есть проблема... если в колонке используется символ разбиения - в данном случае ; то csv выглядить как
"кухня; столовая"; спальня
|
данный скрипт посчитает что здесь 3 колонки вместо 2х!
как мне отлавливать строки обрамленные двойными кавычками дабы не делить находящийся в них текст на колонки? | |
|
|
|
|
|
|
|
для: moonfox
(07.06.2007 в 17:31)
| | помогите плиз | |
|
|
|
|
|
|
|
для: moonfox
(07.06.2007 в 17:31)
| | csv обрабатывать explode'ом -бесполезно.
Для этого существует стандартная функция fgetcsv() | |
|
|
|
|
|
|
|
для: Trianon
(07.06.2007 в 18:42)
| | Я бы воспользовался форматом *.tsv (то же самое, что и *.csv, только разделитель - '\t'), тем более, что перевести файл из одного формата в другой - минутное дело.
2 Trianon: fgetcsv() некорректно работает с русскими символами (по крайней мере я решения такой проблемы не нашел), тут explode() - нормальный выход | |
|
|
|
|
|
|
|
для: Фитч
(07.06.2007 в 19:34)
| | Я могу попросить пример файла .csv, который вызвал проблему при работе с fgetcsv? | |
|
|
|
|
 395 байт |
|
|
для: Trianon
(07.06.2007 в 19:36)
| | Вот, пожалуйста.
Самое странное, что на локалхосте все прекрасно, а на хостинге начинаются проблемы...
Если найдете способ его побороть - выложите решение, если не трудно. Я уже 2 раза обращался на этом форуме с проблемой, однако решения так и не было. | |
|
|
|
|
|
|
|
для: Фитч
(08.06.2007 в 10:50)
| | Вот то, что он пишет у меня.
Первая строка 1 А этот текст выведет
Вторая строка 2 И этот тоже
Warning: Invalid argument supplied for foreach() in z:\home\localhost\www\Test\test.php on line 8
Обратите внимание, что русский текст после цифр выведен нормально
|
Это не CSV а ТSV . Соответственно, и функцию нужно вызывать fgetcsv($fh,512, '\t');
Какая версия php на хостинге? | |
|
|
|
|
|
|
|
для: Trianon
(08.06.2007 в 11:36)
| | может у кого есть уже написаный обработчик и использованием fgetcsv? | |
|
|
|
|
|
|
|
для: moonfox
(08.06.2007 в 13:44)
| | поищите поиском. Тут их полно. | |
|
|
|
|
|
|
|
для: Trianon
(08.06.2007 в 13:48)
| | Trianon, не помогло. Пробовал и с TSV, но результат один - на локалке работает на хостинге нет (там PHP 5.2.0) Вот ссылка на хостинг: http://effenheim.jino-net.ru/csv/test.php
На локалке выводит:
Русский текст 1 Еще текст
Еще русский текст 2 И еще
|
ЗЫ:
Понимаю, что оффтоп, но сам с этим не справился(( | |
|
|
|
|
|
|
|
для: Фитч
(08.06.2007 в 14:57)
| | и Вы убеждены, что это именно fgetcsv шалит?
Что я могу сказать... в разделе скриптов есть посимвольный парсер CSV от antf.
в теме http://softtime.ru/forum/read.php?id_forum=1&id_theme=15744 я привел свою версию анализатора, которая работает не посимвольно, а большими кусками строк.
Попробуйте одну из них... | |
|
|
|
|
|
|
|
для: Trianon
(08.06.2007 в 15:10)
| | подскажите, а что здесь идет?
| |
|
|
|
|
|
|
|
для: moonfox
(08.06.2007 в 18:58)
| | цикл, условия выхода из которого заранее неизвестны. | |
|
|
|
|
|
|
|
для: Trianon
(08.06.2007 в 19:02)
| | а какие аргументы то там?
что является отправным значением? | |
|
|
|
|
|
|
|
для: moonfox
(09.06.2007 в 00:41)
| | У оператора цикла не бывает аргументов.
Бывают выражения. Инициализирующее, условия продолжения, пересчета. Каждое из трех может отсутствовать. | |
|
|
|