![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Uran34 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 9.11.2010 Репутация: нет Всего: нет |
Помогите разобраться. Есть задача: в некотором файле file.txt хранятся данные
в виде текстовых строк. Необходимо, введя номер строки извлечь соответсвующую ему строку. Процедура здесь вроде бы не сложная. Используется индексирование. В первой подпрограмме DAT открываем файл с текстом file.txt и через функцию tell получаем побайтовое смещение каждой строки.Упаковываем их по шаблону "N" и Записываем в индексный файл index.idx. Во второй подпрограмме INDX сначала определяем смещение в индексе, соответсвующее номеру искомой строки, устанавливаем позицию seek для считывания в index.idx и считываем в переменную $entry упакованное значение байтов смещения строки. Распаковываем, устанавливаем позицию в файле file.txt, соответсвующую определенному смещению и получаем из него нашу искомую строку. Все вроде бы работает, но до определенного номера строки. Я использовал файлы с разным количеством строк: 365 и 400. Содержание строк (их длина) были разными. Во втором файле я использовал строки с числительными (для удобства) "один", "два" и т. д. до "четырехсот". В первом случае сбой начинался на 110 строке, во второй на 168, когда программа выдавала значение неопределенной переменной или содержание не соответсвовало номеру строки. Разбираясь я выяснил, что, по видимому, причина в искаженных данных, доставаемых при распаковке из index.idx. Действительно ли это так, и что делать, как сохранить информацию, если файлы должны быть длинными?
|
|||
|
||||
| Jimy |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 4.7.2010 Репутация: нет Всего: 3 |
Файл с исходными строками (file.txt) выложите.
|
|||
|
||||
| ming |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 30.1.2009 Где: Новосибирск Репутация: 2 Всего: 3 |
Обязательно через индексирование?
Ведь есть специальная переменная в Perl - $., хранящая номер последней прочитанной из потока (в т.ч. файла) строки.
|
|||
|
||||
| Uran34 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 9.11.2010 Репутация: нет Всего: нет |
||||
|
||||
| Uran34 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 9.11.2010 Репутация: нет Всего: нет |
У меня была задача. В одном файле собрана определенная информация, строки я выбираю в зависимости от определенного условия. Ну, например, если а==0, то берутся строки начиная с 10 и по 34, если b==1, то начиная, допустим, со 123 и по 456 и т. д. Переменная $. запоминает первое условие и начинает работать только с него. Нельзя присваивать переменной $. значение 10 или 123 попеременно (я долго бился, пытаясь заставить ее принимать различные значения в зависимости от условия - безрезультатно). При индексировании можно перемещаться в файле по байтам. Присоединённый файл ( Кол-во скачиваний: 4 )
file.txt 7,36 Kb |
|||
|
||||
| Jimy |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 4.7.2010 Репутация: нет Всего: 3 |
||||
|
||||
| Uran34 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 9.11.2010 Репутация: нет Всего: нет |
||||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |