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

  • Автор темы Автор темы rooot
  • Дата начала Дата начала

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 :)).
 
поясни, что у тебя за данные, и что за столбцы.
в описанном виде задача не имеет смысла.
почему именно 19? почему не 1 или 20?
 
Фанат
Так получилось что 19, объясняю, есть 19 разновидностей свойств предмета, они записанны в файле, предметов много, очень много, их надо загнать в БД. Привожу структуру БД.
--------------------------------------------------------
|tab1|tab2|tab3|tab4|.....|......|tab18|tab19|
|obj1|1234|abc1|eww|....|......|.........|ngfgfg|
|obj2|2345|adc1|sdw|....|......|.........|ngfffg|
.....................................................................
-------------------------------------------------------
вот что примерно должно получится.
Еще раз.
Имею файл (уже обработанный не зря ты меня посылал заграницу к Манулу, огромное мерси начал более не менее понимать структуру языка). В нем строки масив в 19 строк определяет нашу задачу. Не получается построить скрипт который записывал бы из файла в БД каждые 19 строк в столбцы (т.к. их тоже 19) . Ну а дальше foreach пока не дойдем до конца файла, причем файл обработан до такого, что он кратен 19!. Т.е. ни одна ячейка не будет пустой, ну это уже не совсем важно.
 
rooot
Переформулируя твою задачу: тебе нужен скрипт, читающий строки из файла порциями по 19 штук и заполняющий ими SQL-запросы типа insert. Правильно?
 
В таком случае, какая часть этой задачи вызывает затруднение - чтение строк порциями или формирование запроса циклом?
 
SelenIT
не догоняю как возможно прочитать 19 строчек и присвоить каждую перменым tab1,tab2,....,tab19 а цикл думаю построю.
 
rooot
В базе нет "переменных", там есть поля, но это сейчас не главное. У тебя есть стандартный запрос на вставку одной строки (содержащей 19 значений) в базу. Запрос - это строка. Т.е. тебе нужно собрать строку из 19 переменных частей и нескольких постоянных по определенным правилам.
Когда строка будет готова - посылаешь ее в mysql_query и начинаешь собирать новую.
 
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
Никто и не говорит что в БД есть переменные, они есть в ПХП я их объявляю и пытаюсь присвоить им значения считаных строк из фаило, только вот пива видимо мало вЫпил ))
 
нормальный запрос, причем часть
Код:
INSERT INTO map (tab1, ..., tab19) VALUES ('
у него всегда постоянна.
Затем нужно 19 раз добавить к этой части по строке из файла (не забывая экранировать кавычки). После каждой строки из файла нужно дописывать 18 раз дописывать по "','" а на 19-й раз - "')".
И без 19 промежуточных переменных, в принципе, вполне можно обойтись.
 
SelenIT
ну ты не понял меня )) либо издеваешся, почитал джуть джуть, и понял что 5 банка бочки рулит ))
$lines = file($filename);
for ($i = 0; $i < sizeof($tab); i += 19)
echo $tab[$i].$tab[$i+1]....$ltab[$i+18];
 
Эх...
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);
   }
}
Что-то вроде этого )

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