|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Определение конца файлаФрагмент программы обработки ошибок открытия файла label bye; var f: TextFile; fname: string[80]; // имя файла res: integer; // значение IOResult answ: word; // ответ пользователя begin fname:= ‘d:\ test.txt’; AssignFile (f, fname); repeat {$I-} Reset (f); // открыть файл для чтения {$I +} res:= IOResult; if res <> 0 then answ:= MessageDlg (‘Ошибка открытия ‘ + fname +#13 + ‘Повторить попытку?’, mtWarning, [mbYes, mbNo], 0); until (res = 0) OR (answ = mrNo); if res <> 0 then goto bye; // здесь программа, которая выполняется в случае успешного открытия файла bye:
Чтение данных из файла Чтение из файла выполняется с помощью read и readln, которые записываются в виде: read (ФайловаяПеременная, СписокПеременных) readln (ФайловаяПеременная, СписокПеременных) где ФайловаяПеременная – перменная типа TextFile; СписокПеременных – имена переменных, разделенные запятыми.
Чтение чисел В текстовом файле находятся не числа, а их изображения. Действие, выполняемое операторами read и readln, состоит из двух: сначала из файла читаются символы до появления разделителя (пробела или конца строки), затем прочитанные символы, являющиеся изображением числа, преобразуются в число. procedure Simple; var f: TextFile; a, b: integer; begin AssignFile (f, ‘d:\data.txt’); Reset (f); read (f, a); readln (f, b); end;
Чтение строк В программе строковая переменная может быть объявлена с указанием длины или без указания: stroka1: string [10]; stroka2: string. При чтении из файла значения строковой переменной, длина которой явно задана в описании, считывается столько символов, сколько указано в описании, но не больше, чем в оставшейся непрочитанной части текущей строки. При чтении из файла значения строковой переменной, длина которой явно не задана в описании переменной, значением переменной становится оставшаяся после последнего чтения часть текущей строки.
Определение конца файла Для определения конца файла используется функция EOF (End Of File – конец файла). У функции EOF один параметр – файловая переменная. Значение функции EOF равно FALSE, если прочитанный элемент данных не является последним в файле, т.е. возможно дальнейшее чтение из файла. Если прочитанный элемент данных является последним, то значение EOF равно TRUE.
Задача. На диске есть текстовый файл, содержащий информацию о доходах. Каждая строка файла начинается с цифры, соответствующей величине дохода, за которой следует строка символов – комментарий. Файл может быть таким: 250 Чтение лекций 1000 Гонорар за книгу 120 Доход по акциям ГАЗПРОМ Вычислить суммарный доход. Надо открыть файл, прочитать число из первой строки и добавить его к сумме, прочитать число из второй строки и добавить его к сумме и т.д. После прочтения последней строки вывести результат. На форме имеется один компонент – метка (Label1), используемый для вывода результатов. procedure Tform1.FormActivate (Sender: TObject); var fname: string [20]; f: TextFile; {файловая переменная} incom: integer; {доход из очередной строки файла} summ: integer; {суммарный доход} begin fname:= ‘d:\incom.txt’; AssignFile (f, fname); {$I -} Reset (f); {открытие для чтения} {$I +} if IOResult =0 then begin summ:=0; while NOT EOF (f) do {пока не конец файла} begin readln (f, incom); summ:= sum + incom; end; CloseFile (f); label1.caption:= ‘суммарный доход: ‘ + IntToStr (summ); end else label1.caption:= ‘ошибка открытия ‘ + fname; end;
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.) |