| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Тексты > [PCRE] log-файл в массив |
| Автор: Gold Dragon 17.1.2007, 11:58 | ||||
Помогите log-файл загнать в массив. Вот пример
Данные разделяются пробелами. Количество пробелов между данными не постоянно. формат массива такой:
И уж заодно, как лучше загружать log-файл, т.к. размер его может быть довольно большим |
| Автор: SamDark 17.1.2007, 12:08 |
| Gold Dragon, т.к. число пробелов не постояноо: используй preg_split(' +', $log_line). Вывод лучше организовать постраничный. При этом не читать весь файл. Пользоваться fseek(). |
| Автор: Mal Hack 17.1.2007, 14:33 |
| Проще сначала грохнуть все двойные пробелы, затем explode. |
| Автор: SamDark 17.1.2007, 15:56 |
| Mal Hack, Двойные пробелы всё-равно грохать регуляркой (может их и не два). Зачем делать лишние действия? |
| Автор: Mal Hack 18.1.2007, 01:12 |
| А потому, что регурялка скорее всего в данном случае больше скушает. |
| Автор: SamDark 18.1.2007, 09:11 |
| Mal Hack, Надо проверить. |
| Автор: Gold Dragon 18.1.2007, 12:22 |
| Так. а как мне грухнуть двоуные, тройные и тому подобные пробулы? |
| Автор: mishaSL 18.1.2007, 15:07 |
| Проще как говорил SamDark, к примеру preg_split("/[\s]+/", $line); потом протестируй на больших файлах. |
| Автор: SamDark 18.1.2007, 16:18 |
| Gold Dragon, Всё правильно. Читать придётся побайтно порциями. |
| Автор: Mal Hack 18.1.2007, 16:23 | ||
На счет начального "гроханья" двойных пробелов я поспешил... Виноват...
На выходе получаем единый вектор. Работать проще, чем с матрицей. Надо просто смещение указывать. А смысл использовать fseek? - Никакого. Файл в любом случае будет полностью записан в ОП. Так что на больших файлам вообще потоке придется использовать. |
| Автор: SamDark 18.1.2007, 16:28 | ||
| Mal Hack, Может сразу preg_split("#\s+#", $str)?
|
| Автор: Mal Hack 18.1.2007, 16:32 |
Наверное, это уже замашки сишника с паскальщиком Только не забудь, что нам еще резать надо по концу строки. Жжошь |
| Автор: Gold Dragon 18.1.2007, 16:39 | ||
да но в каждой строе разное количество байт Добавлено @ 16:51
По моему с матрицей лучше SamDark, что-то не хочет запускаться... ps а такой глупый вопрос: пробел и табуляция - это ведь разные вещи? |
| Автор: SamDark 19.1.2007, 10:22 | ||||||||||
Mal Hack,
Ну, это же вариант с вектором... так что не надо.
Люблю, когда наглядно Gold Dragon,
Открываешь файл. Смещаешь курсор на некоторое значение. Читаешь не менее N символов до следующего перевода строки.
Разные, поэтому в регулярном выражении используется класс \s, который включает и пробелы и табуляции и, если не ошибаюсь, переводы строк. Вот рабочий код для вектора:
|
| Автор: Gold Dragon 19.1.2007, 11:50 |
| Всё, спасибо всем! Вопрос решён |
| Автор: Mal Hack 19.1.2007, 15:13 | ||
Хм... А у тебя тогда получится что-то вроде: "aasd\n123"
Он включает в себя ТОЛЬКО пробел. Табуляция - \t |
| Автор: SamDark 19.1.2007, 15:22 | ||
| Mal Hack, Из доков PHP:
|
| Автор: Mal Hack 19.1.2007, 15:26 |
| Хм... Пропустил. Спасибо. |