Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2014, 14:47   #1
ElenaA
Пользователь
 
Регистрация: 02.07.2007
Сообщений: 19
По умолчанию Delphi определяет конец файла в его середине

Добрый день!

Помогите, разобраться, пожалуйста.
Имеется файл. Пытаюсь читать его посимвольно (f:textfile). До определенного места читается, а потом Delphi говорит, что видит конец файла. При этом попытка читать "в лоб" проходит. По циклу read(f,a), где a:char, ошибки не выдает, и в выходной файл печатает символы с кодом 26. Ioresult при чтении =0.
Обойти данную ситуацию не могу.
while(ord(a))=26 do read(f,a) - уходит в глубочайший аут.
Файл открывается по f4 нормально.
Кто-нибудь сталкивался с подобным?
У меня Delphi 7. Кусок файла во вложении. Заваливается в районе 22-23 символа.

Буду благодарна за любые мысли.
Вложения
Тип файла: txt 1.txt (75 байт, 132 просмотров)
ElenaA вне форума Ответить с цитированием
Старый 24.02.2014, 14:53   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не надо читать БИНАРНЫЙ файл как текстовый и сразу всё будет хорошо!


NB. для чтения можете воспользоваться типом file of char или file of byte;
А ещё лучше, вместо этого воспользоваться типом TFileStream и уйти от древних технологий...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.02.2014, 14:56   #3
ElenaA
Пользователь
 
Регистрация: 02.07.2007
Сообщений: 19
По умолчанию

Дык он идет как текстовый поначалу!
А потом вставка (кусок приведен).
А потом опять текст.

Как бинарный читать попробую. Может, получится что. Спасибо за совет!
ElenaA вне форума Ответить с цитированием
Старый 24.02.2014, 15:14   #4
ElenaA
Пользователь
 
Регистрация: 02.07.2007
Сообщений: 19
По умолчанию

Мда...
file of char работает, но жутко медленно.
8 Мб гоняет целых 3 минуты. И это без обработки - только чтение.
Надо осваивать новые технологии...
ElenaA вне форума Ответить с цитированием
Старый 24.02.2014, 15:17   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
И это без обработки - только чтение.
Это если побайтово читать. А если blockread использовать то скорость увеличивается капитально при считывании всего файла или блока.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.02.2014, 16:04   #6
ElenaA
Пользователь
 
Регистрация: 02.07.2007
Сообщений: 19
По умолчанию

Это не файл, а рулон туалетной бумаги...
Читать нужно либо посимвольно, при этом сразу отсекать мусор служебных символов, либо выяснять позиции символов "=" и читать кусками.
при объявлении f:textfile работает быстро (секунды 3). Но вот выдает конец файла на 2.6 Мб (это треть).
f:file of char, тот же алгоритм - уже 3 минуты.
f:TfileStream - около 1.5 минут.
Может, я совсем нуб, и можно запросто перейти к следующему вхождению символа "="? Воспользоваться удалением куска строки нельзя. Файл на строки не делится - идет сплошной поток символов.
ElenaA вне форума Ответить с цитированием
Старый 24.02.2014, 16:46   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Читать нужно либо посимвольно
Это кто такое сказал? В ТЗ указано что именно посимвольно иначе зарэжу?
Что за проблема считать все в память, а уже в памяти выбирать нужное?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.02.2014, 11:26   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
:TfileStream - около 1.5 минут.
для 8 Мб это ОЧЕНЬ долго!

Ищите проблему в алгоритмах (циклы, скорее всего, написаны неоптимально)

p.s. выложите ваш код обработки и пример файла, будет повод для конкретного разговора.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фалы,паскаль-Найти самое большое число в файле.Если оно чётное вывести его повторно в конец файла Vika2112 Помощь студентам 0 13.12.2012 08:14
Вводится последовательность ненулевых чисел, 0 – конец последовательности. Каждое число разделить на его порядковый ном(C++ язык) dimazak2009 Помощь студентам 8 12.03.2012 13:59
Типизированный файл file of integer (добавить в конец файла копии положительных чисел) (Delphi) phasha Паскаль, Turbo Pascal, PascalABC.NET 8 17.04.2011 15:50
Конец файла (delphi) CAMOBAP Помощь студентам 3 12.01.2011 09:31
Delphi.Как организовывать чтение из файла и отображение его в списке-ListBoxе. FireflyJuillet Помощь студентам 0 20.05.2010 00:54