Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Общие вопросы > Вопросы по работе с файлами |
Автор: d0k 19.3.2006, 18:35 |
Тема такова: Открываем файл , считываем строки <filehandle>. Необходимо изменять положение текущей считываемой строки ( также положение текущей записи в файл). Переменная $. изменяется по порядку как и должна показывает номер строки. $/ не трогаю (по умолчанию). Но если я меняю $. , надеясь перейти на определенную строку, то просто $. изменяется, а указатель остаётся на том же месте и аккумулируется уже от мною заданного значения. Почему? И всё-таки как изменить указатель строки? Для понимания более точный вопрос : Как перейти на последнию строку или как считать строку с заданным номером? ![]() seek и tell - работают с байтами - это понятно, а нет ли чего похожего но для работы со строками? ![]() |
Автор: nitr 19.3.2006, 18:47 | ||||||
если файлик маленький: можно через массив @content = <HANDLE>; искомая строка $str = $content[NUMBER-1]; , начиная с 1 ![]() Вот хорошее решение для любого размера и большая скорость - http://search.cpan.org/author/MJD/Tie-File-0.96/lib/Tie/File.pm Он занимаеться тем же ![]() ![]()
и последняя строка: print "$content[-1]\n"; Для чего тебе это всё? Покажи кусок кода ![]() Вот по твоему вопросу:
результат $file = "ex.pl"; для последней:
результат print; |
Автор: BlackLFL 19.3.2006, 18:54 | ||
поддерживаю |
Автор: d0k 19.3.2006, 20:53 | ||||
Мне это нужно, чтобы просто к любому символу в любой строке текстового файла можно было обратиться. Ещё поясню, прочитал (в perldoc),что изменяя переменную $. (в которой хранится номер текущей строки) можно обращаться к любой строке:
Массив подходит - но не целесообразно после изменений в одной строке сохранять весь массив, особенно если он на 100000 строк. Массив можно, но как тогда заменить в файле именно определённую строку,а не переписывать весь массив в файл заного. nitr написал:
Это верно - когда мы просто перебором доходим до последней строки, а дальше как вернуться вверх? Или начать перебор заного? А если в файле 100000 строк. А как после того как мы прочитали последнию строку прочитать предпоследнию а затем 4-ую затем 8-ую 2-ую и т.д. в любой последовательности? |
Автор: nitr 19.3.2006, 21:00 | ||||||
http://search.cpan.org/author/MJD/Tie-File-0.96/lib/Tie/File.pm ВНИМАТЕЛЬНО и для чего это ![]() ![]()
|
Автор: nitr 19.3.2006, 21:21 | ||
один из самых простых подсчётов строк
|
Автор: d0k 23.3.2006, 02:02 |
![]() DB_File очень удобная библиотека в прямом смысле привязал хеш к файлу и никаких проблем. Berkeley DB рулят, но уж слишком заумно сделано. ладно разберусь |
Автор: Бонифаций 23.3.2006, 13:19 | ||
Очень интересно. А как вы собираетесь изменить только одну строку в тестовом файле?. Вы полагаете текстовые редакторы не переписывают файлы если вы изменили только одну строку? |