PHP: есть вопрос @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 12 ] 
*   Список форумов / Начинка и техника / Программирование для WWW » ответить » создать топик « | »
Автор Сообщение
Убивец
новый человек
0
Сообщения: 7
Зарегистрирован: 01.03.06
Заголовок сообщения: PHP: есть вопрос
Сообщение Добавлено: 2 Март 2006, 08:57:52 
В общем есть некий текст с определенной структурой. С каждой строки текста я регэкспом вырезаю нужные мне куски (строк н-ное количество, с каждой строки мне нужно вырезать 4 слова) вот таким образом:
Код:
preg_match_all ('/(\d{2}\.\d{2}\.\d{2}\s\d{2}\:\d{2})/', $_POST[data], $outdata); 
preg_match_all ('/\s([\w\s\d]+)\n/', $_POST[data], $ontime); 
preg_match_all ('/"([^"]*)",/', $_POST[data], $onwhoput);   
preg_match_all ('/"([^"]+)"\shas/', $_POST[data], $whoputit);
 
for($n=0;$n<count($whoputit[0]);$n++){
$whoput=str_replace("\\", "", $whoputit[1][$n]);
}
for($u=0;$u<count($outdata[0]);$u++){
$data=trim($outdata[1][$u]);
}
for($i=0;$i<count($onwhoput[0]);$i++){
$onwho=str_replace("\\", "", $onwhoput[1][$i]);
}
for($m=0;$m<count($ontime[0]);$m++){
$ot=trim(str_replace("for", "", $ontime[1][$m]));
}


вопрос каким образом засунуть полученные значения в БД? (с каждой строки текста 4 значения в 4 столбца 1й строки таблицы, следующие 4 значения пихаем во вторую строку таблицы и т.д пока не пропарсим весь текст)

Заранее спасибо
Чебурген
соучастник
3
Сообщения: 315
Зарегистрирован: 29.08.04
Сообщение Добавлено: 2 Март 2006, 09:47:03 
а в чём проблема-то?
Не умеешь вставлять данные в базу вообще, или не знаешь, как это сделать в цикле?
Убивец
новый человек
0
Сообщения: 7
Зарегистрирован: 01.03.06
Сообщение Добавлено: 2 Март 2006, 09:49:27 
Чебурген,
Не знаю как сделать это конкретно в моем случае.
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 2 Март 2006, 09:52:01 
Что конкретно тебе непонятно в твоем случае?
Убивец
новый человек
0
Сообщения: 7
Зарегистрирован: 01.03.06
Сообщение Добавлено: 2 Март 2006, 10:02:10 
Crazy,
смотри. У меня 4 цикла обработки текста. Каждый вылавливает из каждой строки конкретно 1 нужное слово. Надо чтобы после прохождения 4 циклов в БД вставлялись 4 значения подряд в одну строку, затем следующие 4 найденных слова и так со всего текста. как одним регэкспом выдрать все нужные мне данные я додумать не смог.

обрабатываемый текст имеет такую структуру:

30.11.04 03:10 text "keyword1" text "keyword2", text digit text\n
и так нное количество строк
Бaзиль Муж.
участник
49
Сообщения: 1288
Зарегистрирован: 13.02.05
Откуда: Околомосковье
Сообщение Добавлено: 2 Март 2006, 10:06:09 
ёмоё.

ну заведи еще один массив, в него записывай подряд нужные тебе значения, потом засовывай их в базу.

или объясни подоходчивее.

_________________
Не кочегары мы, не плотники,
Но сожалений горьких нет -
Как нет?
А мы дизайнеры-художники,
И с высоты вам шлем привет -
Привет!
Убивец
новый человек
0
Сообщения: 7
Зарегистрирован: 01.03.06
Сообщение Добавлено: 2 Март 2006, 10:20:47 
Бaзиль,
попытаюсь объяснить еще раз чего я хочу добиться.

есть никий текст такой структуры
30.11.04 03:10 text "keyword1" text "keyword2", text digit text\n
30.11.04 03:10 text "keyword1" text "keyword2", text digit text\n
30.11.04 03:10 text "keyword1" text "keyword2", text digit text\n
и так нное количество раз.

Надо сначала обработать текст и вырезать из него ключевые слова таким образом

$outdata - массив со значениями даты (в примере 30.11.04 03:10). вырезаю таким образом
Код:
preg_match_all ('/(\d{2}\.\d{2}\.\d{2}\s\d{2}\:\d{2})/', $_POST[data], $outdata); 


$whoputit - массив со словами из первых кавычек. после них всегда будет слово has посему, вырезаю так:
Код:
preg_match_all ('/"([^"]+)"\shas/', $_POST[data], $whoputit);


$onwhoput - массив со словами из вторых кавычек. после всегда "," вырезаю так
Код:
preg_match_all ('/"([^"]*)",/', $_POST[data], $onwhoput);


$ontime - массив со значениями после "," и перед символом перевода строки. вырезаю
Код:
preg_match_all ('/\s([\w\s\d]+)\n/', $_POST[data], $ontime);


далее надо засунуть все что получилось в БД таким образом:

поле id - автоинкримент
поле a - значение первого эл-та массива $outdata
поле b - значение первого эл-та массива $whoputit
поле с - значение первого эл-та массива $onwhoput
поле d - значение первого эл-та массива $ontime

и так в цикле пока все найденные значения не попадут в бд (сначала все первые эт-ты в первую строку, затем вторые эл-ты во вторую строку ну и т.д. Эл-ов может быть как я уже сказал нн-ое количество)
Бaзиль Муж.
участник
49
Сообщения: 1288
Зарегистрирован: 13.02.05
Откуда: Околомосковье
Сообщение Добавлено: 2 Март 2006, 11:11:25 
лучше так:

заводишь массив $data, который после вставки знеачений будет смотреться вот так вот:

$data[0]['outdata']
$data[0]['whoputit']
$data[0]['onwhoput']
$data[0]['ontime']
$data[1]['outdata']
$data[1]['whoputit']
$data[1]['onwhoput']
$data[1]['ontime']
$data[2]['outdata']
$data[2]['whoputit']
$data[2]['onwhoput']
$data[2]['ontime']
и т.д.

а потом делаешь

Код:

foreach($data as $val){

   $res=mysql_querry("insert into mytable(a,b,c,d) values('".$val['outdata']."','".$val['whoputit']."','".$val['onwhoput']."','".$val['ontime']."');",$link);

}



ну или что-то в этом духе.

_________________
Не кочегары мы, не плотники,
Но сожалений горьких нет -
Как нет?
А мы дизайнеры-художники,
И с высоты вам шлем привет -
Привет!
Убивец
новый человек
0
Сообщения: 7
Зарегистрирован: 01.03.06
Сообщение Добавлено: 2 Март 2006, 12:12:24 
еще заметил странность - preg_match_all создает вместо одного многомерного, много одномерных массивов (скока найдет совпадений тока массивов и создаст)
пример:

Код:
preg_match_all ('/(\d{2}\.\d{2}\.\d{2}\s\d{2}\:\d{2})/', $_POST[data], $outdata);
for($u=0;$u<count($outdata[0]);$u++){
$data=trim($outdata[1][$u]);
echo "<br>";
print_r(array($data));
}


получится так(при 2х найденных совпадениях):
Array ( [0] => 30.11.04 03:10 )
Array ( [0] => 30.11.04 03:11 )

в чем косяк?
Acid~Jazz Муж.
соучастник
1
Сообщения: 740
Зарегистрирован: 12.04.03
Откуда: Зеленоград
Сообщение Добавлено: 2 Март 2006, 12:38:47 
Убивец, preg_match_all возвращает двумерный массив.

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

В общем, документация вас спасет, я в нее верю.

_________________
начинающий менеджер . http://acidjazz.photosight.ru/
Убивец
новый человек
0
Сообщения: 7
Зарегистрирован: 01.03.06
Сообщение Добавлено: 2 Март 2006, 13:00:20 
Бaзиль,
спасибо за идею! сделал немного не так, но работает прекрасно. :beer:
Бaзиль Муж.
участник
49
Сообщения: 1288
Зарегистрирован: 13.02.05
Откуда: Околомосковье
Сообщение Добавлено: 2 Март 2006, 13:09:32 
Убивец, :beer:

_________________
Не кочегары мы, не плотники,
Но сожалений горьких нет -
Как нет?
А мы дизайнеры-художники,
И с высоты вам шлем привет -
Привет!
*   Список форумов / Начинка и техника / Программирование для WWW « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 12 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100