The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Число строк в файле Perl, !*! Александр, 20-Апр-07, 14:52  [смотреть все]
Как узнать число строк в файле на Perl? Неужели у такого мощного языка работы с текстом нет такой функции, (даже в PHP это делается одной функцией), не прибегая к полному считыванию файла в массив @content=<F> а далее число строк = $#content + 1;

Никакой памяти не хватит при работе с большими файлами.

  • Число строк в файле Perl, !*! FarID, 15:04 , 20-Апр-07 (1)
    >Как узнать число строк в файле на Perl? Неужели у такого мощного языка работы с текстом нет такой функции, (даже в PHP это делается одной функцией), не прибегая к полному считыванию файла в массив @content=<F> а далее число строк = $#content + 1;
    >
    >Никакой памяти не хватит при работе с большими файлами.


    а вы представляете как вообще происходит работа с файлами?
    количество строк вы можете посчитать только когда просмотрите весь файл и посчитаете количество символов перевода строки [\r\n]

  • Число строк в файле Perl, !*! seller, 15:31 , 20-Апр-07 (2)
    >Как узнать число строк в файле на Perl? Неужели у такого мощного языка работы с текстом нет такой функции, (даже в PHP это делается одной функцией), не прибегая к полному считыванию файла в массив @content=<F> а далее число строк = $#content + 1;
    >
    >Никакой памяти не хватит при работе с большими файлами.


    а сис.вызов не поможет?

    my $lines = `wc -l $filename`;
    $lines =~ s/[^0-9]//g;

    Для пояснения:

    $ wc -l /etc/rc.conf
          36 /etc/rc.conf

    $ cat /etc/rc.conf | wc -l
          36

  • Число строк в файле Perl, !*! andy, 05:43 , 23-Апр-07 (4)
    >Никакой памяти не хватит при работе с большими файлами.

    а зачем читать в массив, чтобы узнать количество строк? Вам, как уже было сказано, нужно посчитать количество символов "\n".

    open(FILE, "< any.txt") or die($!);
    $lines_count++ while <FILE>;
    close(FILE);
    print $lines_count, "\n";

    если напрягает расход памяти и есть жутко длинные строки можно воспользоваться sysread. В кукбуке утверждается, что самое быстрое решение выглядит так:

    $count += tr/\n/\n/ while sysread(FILE, $_, 2**20); # 2**20 - читает кусками по 1Мб

    Опять же, как сказано выше, `wc -l`

    ($lines_count) = split(/\s+/, `wc -l $filename`);




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру