nixp.ru v3.0

30 мая 2017,
вторник,
06:43:11 MSK

DevOps с компанией «Флант»
Аватар пользователя Feuerbach
Feuerbach написал 28 мая 2005 года в 15:09 (285 просмотров) Ведет себя как мужчина; открыл 53 темы в форуме, оставил 447 комментариев на сайте.

Надо обработать файл некий. К примеру, сишный код.

В сишном коде разбиение на строки несущественно. То есть читать построчно — неэффективно. Куда логичней было бы разбивать файл не по переводам строк, а по пробелам. Есть ли в Perl что-нибудь такое?

Master

заменить переводы сторок на пробелы и использовать split?

Feuerbach
Master
заменить переводы сторок на пробелы

хм.. где? во всем файле? тогда уж лучше наоборот: заменить все пробелы на переводы строк и использовать построчное чтение. Только кто будет выполнять эту работу?..

Master
и использовать split?

Ну в таком случае будет двойная работа: сначала разбиение по строкам, потом по пробелам. Или имеется ввиду, что переводов строк в файле нет? Тогда это будет напряжно для памяти — вместо чтения маленькими порциями придется держать в памяти весь файл…

Master

да, я предлагал эту работу выполнять в два этапа.

Genie

regexp-ы в perl-е вполне себе могут работать с многострочными шаблонами.

естественно, что для этого обрабатываемая конструкция должна быть целиком в памяти.

на больших файлах тут может случиться «ой» ;)

но сишные файлы не пишутся большими — максимум, что я помню — это 300кб в одном файле. перебор, если честно. разбиение на функциональные части надо использовать при объёмах более 50-70кб.

а на таких объёмах — всё нормально, проблем не возникало.

кроме того, есть разбиение по regexp, а не по подстроке. поэтому можно вполне попросить разбить на запчасти по /[ \n]/

решать грабли с записями 'a=+b*(fa(c,&d)+g(ar[4]));' (вот так, без пробелов) предлагается вопрошавшему самостоятельно. ;))

Feuerbach
Genie
regexp-ы в perl-е вполне себе могут работать с многострочными шаблонами.

естественно, что для этого обрабатываемая конструкция должна быть целиком в памяти.

на больших файлах тут может случиться «ой» ;)

Ага, об том и речь :)

Genie
но сишные файлы не пишутся большими — максимум, что я помню — это 300кб в одном файле.

Сишные — это например (для понимания специфики файла).

А можно ли каким-нить образом «прикрутить» к перлу такую фичу? Без хака самого перла — какой-нибудь бинарный модуль, что ли… Или перл не задуман как расширяемый?

Genie

у меня проблема начиналась на 700кб файле при сложной его обработке

не хватало умолчального 8Мб сегмента данных.

myst
Feuerbach
Или перл не задуман как расширяемый?

Смешно…

Genie
myst
Смешно…

ага, особенно вспоминая изречение «Perl-а нет, но есть CPAN»…. :D