Работа с текстом.

rooot

Новичок
Работа с текстом.

Есть файл в нем строчки (файл привожу с нумерацией строк):
-------------------
0 :аааааа
1 :бббббб бббббб
2 :.............
18:ggggg ggg ggg
19:llll ll lllll
nn:.............
38:pppppp pppppp
mm:.............
-------------------
Читаю файл:
<?php
$lines = file("test.txt");
foreach ($lines as $line) {
echo $line."\n";
}
?>
Вроде бы все ОК, теперь о главном, все это я забиваю в БД (работать с БД научился), в БД у меня 19 столбцов,
вопрос как заставить скрипт загонять каждые 19 строк по столбцам, а далее начинать новую строку (в БД).
Т.е. на пальцах выглядит так, прочитали 19 строк загнали в БД, прочитали дальше загнали в БД и так до конца файла.
причем кол-во строк кратны 19 :)).
 

Фанат

oncle terrible
Команда форума
поясни, что у тебя за данные, и что за столбцы.
в описанном виде задача не имеет смысла.
почему именно 19? почему не 1 или 20?
 

rooot

Новичок
Фанат
Так получилось что 19, объясняю, есть 19 разновидностей свойств предмета, они записанны в файле, предметов много, очень много, их надо загнать в БД. Привожу структуру БД.
--------------------------------------------------------
|tab1|tab2|tab3|tab4|.....|......|tab18|tab19|
|obj1|1234|abc1|eww|....|......|.........|ngfgfg|
|obj2|2345|adc1|sdw|....|......|.........|ngfffg|
.....................................................................
-------------------------------------------------------
вот что примерно должно получится.
Еще раз.
Имею файл (уже обработанный не зря ты меня посылал заграницу к Манулу, огромное мерси начал более не менее понимать структуру языка). В нем строки масив в 19 строк определяет нашу задачу. Не получается построить скрипт который записывал бы из файла в БД каждые 19 строк в столбцы (т.к. их тоже 19) . Ну а дальше foreach пока не дойдем до конца файла, причем файл обработан до такого, что он кратен 19!. Т.е. ни одна ячейка не будет пустой, ну это уже не совсем важно.
 

SelenIT

IT-лунатик :)
rooot
Переформулируя твою задачу: тебе нужен скрипт, читающий строки из файла порциями по 19 штук и заполняющий ими SQL-запросы типа insert. Правильно?
 

SelenIT

IT-лунатик :)
В таком случае, какая часть этой задачи вызывает затруднение - чтение строк порциями или формирование запроса циклом?
 

rooot

Новичок
SelenIT
не догоняю как возможно прочитать 19 строчек и присвоить каждую перменым tab1,tab2,....,tab19 а цикл думаю построю.
 

SelenIT

IT-лунатик :)
rooot
В базе нет "переменных", там есть поля, но это сейчас не главное. У тебя есть стандартный запрос на вставку одной строки (содержащей 19 значений) в базу. Запрос - это строка. Т.е. тебе нужно собрать строку из 19 переменных частей и нескольких постоянных по определенным правилам.
Когда строка будет готова - посылаешь ее в mysql_query и начинаешь собирать новую.
 

rooot

Новичок
SelenIT
нет у меня 19 полей!!! И 19 строк!!!! Т.е. запрос таков
$query = "INSERT INTO map (tab1,tab2,tab3,tab4,tab5,tab6,tab7,tab8,tab9,tab10,tab11,tab12,tab13,tab14,tab15,tab16,tab17,tab18,tab19) VALUES ('$tab1','$tab2','$tab3','$tab4','$tab5','$tab6','$tab7','$tab8','$tab9','$tab10','$tab11','$tab12','$tab13','$tab14','$tab15','$tab16','$tab17','$tab18','$tab19')";
гед values у меня ничерта не выходит ((

-~{}~ 15.06.05 00:49:

'tab1'=строка1
'tab2'=строка2
'tab3'=строка3
........=............
'tab19'=строка19
Никто и не говорит что в БД есть переменные, они есть в ПХП я их объявляю и пытаюсь присвоить им значения считаных строк из фаило, только вот пива видимо мало вЫпил ))
 

SelenIT

IT-лунатик :)
нормальный запрос, причем часть
Код:
INSERT INTO map (tab1, ..., tab19) VALUES ('
у него всегда постоянна.
Затем нужно 19 раз добавить к этой части по строке из файла (не забывая экранировать кавычки). После каждой строки из файла нужно дописывать 18 раз дописывать по "','" а на 19-й раз - "')".
И без 19 промежуточных переменных, в принципе, вполне можно обойтись.
 

rooot

Новичок
SelenIT
ну ты не понял меня )) либо издеваешся, почитал джуть джуть, и понял что 5 банка бочки рулит ))
$lines = file($filename);
for ($i = 0; $i < sizeof($tab); i += 19)
echo $tab[$i].$tab[$i+1]....$ltab[$i+18];
 

SelenIT

IT-лунатик :)
Эх...
PHP:
for ($i=0,$num_of_lines=count($lines); $i<$num_of_lines; $i++) {
   if ($i%19==0) $query = "INSERT INTO map (tab1, ..., tab19) VALUES ('";
   $query .= mysql_real_escape_string(trim($lines[$i]));
   if ($i%19!=18) $query .= "','";
   else {
      $query .= "')";
      // echo $query; // вывод запроса для отладки
      mysql_query($query);
   }
}
Что-то вроде этого )

Хотя пожалуй я перестарался, твой способ по-видимому будет даже быстрее :)
 

zap

Guest
Автор оригинала: rooot
SelenIT
ну ты не понял меня )) либо издеваешся, почитал джуть джуть, и понял что 5 банка бочки рулит ))
$lines = file($filename);
for ($i = 0; $i < sizeof($tab); i += 19)
echo $tab[$i].$tab[$i+1]....$ltab[$i+18];
помоему просто муторно, зачем тогда ваще нужен цыкл в твоем случае ??
 
Сверху