|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
24.02.2014, 14:47 | #1 |
Пользователь
Регистрация: 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 символа. Буду благодарна за любые мысли. |
24.02.2014, 14:53 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
не надо читать БИНАРНЫЙ файл как текстовый и сразу всё будет хорошо!
NB. для чтения можете воспользоваться типом file of char или file of byte; А ещё лучше, вместо этого воспользоваться типом TFileStream и уйти от древних технологий... |
24.02.2014, 14:56 | #3 |
Пользователь
Регистрация: 02.07.2007
Сообщений: 19
|
Дык он идет как текстовый поначалу!
А потом вставка (кусок приведен). А потом опять текст. Как бинарный читать попробую. Может, получится что. Спасибо за совет! |
24.02.2014, 15:14 | #4 |
Пользователь
Регистрация: 02.07.2007
Сообщений: 19
|
Мда...
file of char работает, но жутко медленно. 8 Мб гоняет целых 3 минуты. И это без обработки - только чтение. Надо осваивать новые технологии... |
24.02.2014, 15:17 | #5 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
24.02.2014, 16:04 | #6 |
Пользователь
Регистрация: 02.07.2007
Сообщений: 19
|
Это не файл, а рулон туалетной бумаги...
Читать нужно либо посимвольно, при этом сразу отсекать мусор служебных символов, либо выяснять позиции символов "=" и читать кусками. при объявлении f:textfile работает быстро (секунды 3). Но вот выдает конец файла на 2.6 Мб (это треть). f:file of char, тот же алгоритм - уже 3 минуты. f:TfileStream - около 1.5 минут. Может, я совсем нуб, и можно запросто перейти к следующему вхождению символа "="? Воспользоваться удалением куска строки нельзя. Файл на строки не делится - идет сплошной поток символов. |
24.02.2014, 16:46 | #7 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Что за проблема считать все в память, а уже в памяти выбирать нужное?
I'm learning to live...
|
|
25.02.2014, 11:26 | #8 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
Ищите проблему в алгоритмах (циклы, скорее всего, написаны неоптимально) p.s. выложите ваш код обработки и пример файла, будет повод для конкретного разговора. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Фалы,паскаль-Найти самое большое число в файле.Если оно чётное вывести его повторно в конец файла | 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 |