Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: помогите создать запрос
Форумы портала PHP.SU » PHP » Регулярные выражения » помогите создать запрос

Страниц (1): [1]
 

1. Вездеход - 09 Июня, 2008 - 12:52:59 - перейти к сообщению
есть база с инфой в текстовом файле...

вида:
189 09.06.2008 13:22
189 09.06.2008 13:22
341 09.06.2008 13:21
26 09.06.2008 13:20
341 09.06.2008 13:19

выглядит так: (пробелы)(номер)(1пробел)(день создания)(1пробел)(часы:минуты создания)
подскажите как можно такую строку разбить на 3 части - номер дата время - чтобы можно было нормально обрабатывать как массив с инфой
2. valenok - 09 Июня, 2008 - 12:54:52 - перейти к сообщению
file() + trim() + explode()
3. EuGen - 09 Июня, 2008 - 12:59:36 - перейти к сообщению
Ну, зачем же так делать, если MySQL любезно предоставляет нам:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. LOAD DATA INFILE 'Ваш_файл'
  3. INTO TABLE Ваша_таблица
  4. CHARACTER SET Кодировка_файла
  5. FIELDS TERMINATED BY ' '
  6.  
4. Вездеход - 09 Июня, 2008 - 13:17:42 - перейти к сообщению
2 valenok
я так и сделал собсна...
не катит =(
всего строк в файле - 456876
а выводит только 483
это если через file() + trim() + explode()

проблема в том, что в начале строки разное колличество пробелов...
от 1 до 4

потому все и осложняется =(

2 EuGen
а как база отнесется к пробелам в начале строки?
(Добавление)
попробовал вот это сделать:

LOAD DATA INFILE 'Ваш_файл'
INTO TABLE Ваша_таблица
CHARACTER SET Кодировка_файла
FIELDS TERMINATED BY ' '

как я и думал - загрузилась пустота...
5. valenok - 09 Июня, 2008 - 14:54:58 - перейти к сообщению
Я вообще понял что данные в файле записаны..
ну и что что количество разное ? trim()

всего строк в файле - 456876
а выводит только 483

Это интересно..
А что касается 456876..
То это не мало..
Скорее всего file() съест много оперативки которой сервер не выделяет
так что придётся файл читать построчно в ручную.
6. Вездеход - 10 Июня, 2008 - 15:32:26 - перейти к сообщению
trim я и сам думал что уберет пробелы...
но как то не понятно дальше получается...

valenok пишет:
всего строк в файле - 456876
а выводит только 483

тут и я не понимаю как такое возможно...
да, там есть условие вывода - если значение = NULL - то не выводить. но строк с таким значением меньше 100...

valenok пишет:
А что касается 456876..

а вот это уже не важно. скрипт для работы на локальном хосте для личных целей =)
так что оперативы хватит
7. valenok - 10 Июня, 2008 - 16:59:54 - перейти к сообщению
Что там дальше както непонятно ?
8. Вездеход - 11 Июня, 2008 - 14:33:52 - перейти к сообщению
ну вот и не понятно почему пачти в 1000 раз уменьшается количество записей...
9. IOpeH - 11 Июня, 2008 - 15:34:27 - перейти к сообщению
дак а показываются записи подряд от начала, или 2,5,65,442 и тд

если подряд дак наверно действительно оперативы не хватает
10. valenok - 11 Июня, 2008 - 17:49:24 - перейти к сообщению
исходный код покажите
11. IOpeH - 11 Июня, 2008 - 21:07:52 - перейти к сообщению
Вездеход, попробуй такой код
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP require_once('../before_html.php')?>
  3. <html>
  4. <head>
  5. <title>Untitled Document</title>
  6. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  7. </head>
  8. <body>
  9. <?PHP
  10. //(пробелы)(номер)(1пробел)(день создания)(1пробел)(часы:минуты создания)
  11. $log='test.txt';
  12. $log_stream=fopen($log,'a');
  13. flock($log_stream,2);
  14. //for($i=0;$i<500000;$i++)fwrite($log_stream,'   '.rand(1,999).' '.date("d.m.Y H:i")."\n");
  15. $log_array=file($log);
  16. echo'<table align="center" cellpadding="5" cellspacing="5"><col style="background:#F5F5F5; width:100px;"><col style="background:#F5F5F5; width:200px;"><col style="background:#F5F5F5; width:100px;">';
  17. $i=1;
  18. foreach($log_array as $k=>$v){
  19.         $v=trim($v);
  20.         $v_array=explode(' ',$v);
  21.         echo'<tr><td>',$i++,' ',$v_array[0],'</td><td>',$v_array[1],'</td><td>',$v_array[2],'</td></tr>';
  22. }
  23. echo'</table>';
  24. flock($log_stream,3);
  25. fclose($log_stream);
  26. ?>
  27. </body>
  28. </html>
  29.  

у меня работает прекрасно (до 56044 строки дошол, дальше время вышло Радость )
12. Вездеход - 12 Июня, 2008 - 17:26:53 - перейти к сообщению
попробую. и код покажу - но только в понедельник (
на работе все осталось...

зы.
ваш код красивше. но принцип тот же )

зы2.
массив я перебирал через foreach а не через for
13. Champion - 28 Августа, 2008 - 15:51:24 - перейти к сообщению
до конца файла
$line_elements =explode(' ', trim( fgets(....) ) );
$line_elements[0], [1], [2] - три поля

 

Powered by ExBB FM 1.0 RC1