В общем пробую писать парсер на перле, под свои нужды и встретился с такой траблой: кто видел access.log, знает, что там бывают очень длинные строки, такая конструкция не рулит :(
($date, $unuse1, $ip_addr, $unuse2, $unuse3, $unuse4, $url_full, $unuse5, $unuse6, $unuse7) = split(/\s+/, $_);
В $ip_addr заносятся данные, которые вроде бы расположены на одной строке в самом конце, например - DIRECT/194.186.36.134
Как побороть энто?
Не парься, возьми готовый - http://calamaris.cord.de/
>Не парься, возьми готовый - http://calamaris.cord.de/Блин я этих парсеров пересмотрел уже целую кучу! Мне вот этого не надо:
Calamaris parses the Squid Native Log and genereates reports
about Peak-usage, Request-Methods, Status-reports of incoming
and outgoing requests, second and Top-level destinations,
content-types and performance.Мне надо дата, время, сайт - по определенному ip. Больше нахрен ничего не надо.
>В общем пробую писать парсер на перле, под свои нужды и встретился
>с такой траблой: кто видел access.log, знает, что там бывают очень
>длинные строки, такая конструкция не рулит :(
>($date, $unuse1, $ip_addr, $unuse2, $unuse3, $unuse4, $url_full, $unuse5, $unuse6, $unuse7) = split(/\s+/,
>$_);
>В $ip_addr заносятся данные, которые вроде бы расположены на одной строке в
>самом конце, например - DIRECT/194.186.36.134
>Как побороть энто?
А ты попробуй ...= split('\s+')
У меня работает
>В общем пробую писать парсер на перле, под свои нужды и встретился
>с такой траблой: кто видел access.log, знает, что там бывают очень
>длинные строки, такая конструкция не рулит :(
>($date, $unuse1, $ip_addr, $unuse2, $unuse3, $unuse4, $url_full, $unuse5, $unuse6, $unuse7) = split(/\s+/,
>$_);
>В $ip_addr заносятся данные, которые вроде бы расположены на одной строке в
>самом конце, например - DIRECT/194.186.36.134
>Как побороть энто?Ну, для начала надо использовать "\s+" и плюс к этому время (первое значение в строке) нужно вырезать отдельно, т.к. если через сквид будет проходить файл большой длины и большим временем выполнения, то первые два значения в строке сольются в одно (сам на этом подловился :( мег 200 трафика пропустил пока доехало).
('s+') тоже не рулит. Все решилось проверкой массива на количество элементов.