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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2011, 16:29   #1
WsPoison
Новичок
Джуниор
 
Регистрация: 24.03.2011
Сообщений: 7
По умолчанию Вопрос по работе функции Eof(f) f:TextFile

Имеется текстовый файл который состоит из непечатных символов (в том числе)
Идет построчное считывание файла.
Readln(f,s);
Используется функция Eof(f{f:TextFile})
Файл считывается до тех пор пока не натыкается на символ с кодом 26. Функция "видит" конец файла ошибочно.
Подскажите как "обмануть", если можно так выразится, функцию Eof(f).
WsPoison вне форума Ответить с цитированием
Старый 24.03.2011, 16:35   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

встречный вопрос - для чтения бинарных файлов много удобнее и надёжнее использовать TFileStream - чем вызвана необходимость чтения через TextFile ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.03.2011, 16:52   #3
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

> текстовый файл который состоит из непечатных символов (в том числе)

В старину за желание странного головы рубили)

Если текстовый файл слодержит коды непечатных символов, НЕ относящихся ни к одному из стандартов на использование управляющих символов, то это уже не текстовый файл. Посему нет никакого оправдания применению для работы с таким файлом заведомо неподходящих для этого алгоритмов.
mss вне форума Ответить с цитированием
Старый 24.03.2011, 17:56   #4
WsPoison
Новичок
Джуниор
 
Регистрация: 24.03.2011
Сообщений: 7
По умолчанию

Программа с таким алгоритмом была мною создана более года назад, и при помощи таковой был открыт не один десяток файлов, как говорится, чем умеем тем и оперируем. (К вопросу почему TextFile). За помощь спасибо! Буду разбираться.
WsPoison вне форума Ответить с цитированием
Старый 24.03.2011, 18:21   #5
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Для бинарных ещё просто File неплохо юзать....
_-Re@l-_ вне форума Ответить с цитированием
Старый 24.03.2011, 20:10   #6
WsPoison
Новичок
Джуниор
 
Регистрация: 24.03.2011
Сообщений: 7
По умолчанию

Уважаемые эксперты, не сочтите за наглость, помогите "добить" эту тему.

Структура файла такова
Строка 1
Строка 2
Строка n

В некой строке Х встречается символ который функция Eof(f) принимает за конец файла.

Изложите пожалуйста процедуру как можно построчно считать файл. В процессе загрузки файла строки поочередно присваиваются переменной TString.

Спасибо, респект и уважуха знающим людям!
WsPoison вне форума Ответить с цитированием
Старый 24.03.2011, 20:30   #7
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Вот так.
Код:
Var
     myFile:TextFile;
     S : String;
Begin
        AssignFile(F,'c:\myfile.txt');
        Reset(F);
        While Not Eof(F) Do
        Begin
                Readln(F,S);   // Читаем строку из файла
                Writeln('Текст - ',S); // Выводим на экран
        End;
        CloseFile(F);
        Readln;
End.
_-Re@l-_ вне форума Ответить с цитированием
Старый 24.03.2011, 20:58   #8
WsPoison
Новичок
Джуниор
 
Регистрация: 24.03.2011
Сообщений: 7
По умолчанию

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
Вот так.
Код:
Var
     myFile:TextFile;
     S : String;
Begin
        AssignFile(F,'c:\myfile.txt');
        Reset(F);
        While Not Eof(F) Do
        Begin
                Readln(F,S);   // Читаем строку из файла
                Writeln('Текст - ',S); // Выводим на экран
        End;
        CloseFile(F);
        Readln;
End.
Гениально. Именно так выглядит процедура в моей программе. И все работает до тех пор пока в некой строке не оказывается символ с кодом 26.
WsPoison вне форума Ответить с цитированием
Старый 24.03.2011, 21:17   #9
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

хм... А если так
Код:
size := sizeof(f); {где f фаловая переменная}
str := '';
j := 0;
for i := 1 to size do
begin
    i := 0;
    while (not(EOLN(f))) do
    begin
        Inc(i);
        Inc(j);
        Read(f, ch);
        str[i] := ch;
        if ch = 26 then {или #26 я не помню}
            Writeln ('В ', j, 'строке есть конец файла');
    end;
    Writeln (str);
end;
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 24.03.2011, 21:18   #10
WsPoison
Новичок
Джуниор
 
Регистрация: 24.03.2011
Сообщений: 7
Стрелка ку

Попробую. Но по-моему цикл завершится опять не вовремя.

Последний раз редактировалось WsPoison; 24.03.2011 в 21:25.
WsPoison вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по работе со строками. Кнехт Общие вопросы .NET 7 25.11.2010 17:09
Вопрос по работе с МЕМО combays Общие вопросы Delphi 4 15.11.2010 11:38
Вопрос по работе с DBGRID Dux Компоненты Delphi 23 15.02.2010 15:42
Функции и процедуры в работе с массивами Qwerty91 Помощь студентам 0 13.12.2009 14:22
Вопрос по работе с таблицей НД БД golt-andrej БД в Delphi 4 06.10.2008 08:58