Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LAB4.DOC
Скачиваний:
3
Добавлен:
12.02.2015
Размер:
207.87 Кб
Скачать

Текстовые файлы

В прикладных программах, как правило, имеется большое число входных и выходных данных, причем часто возникает необходимость передачи данных из одной программы в другую. Поэтому данные хранятся в файлах и при необходимости считываются, а также записываются в файлы операторами программы. Напомним, что файлом называется именованная область внешней памяти ЭВМ, содержащая различные данные. Доступ к данным в файле может быть прямым или последовательным в зависимости от типа файла. Рассмотрим работу с данными текстовых файлов.

Текстовые файлы представляют совокупность строк переменной длины с последовательным доступом к данным, т. е. данные записываются на диск и считываются только последовательно.

а) Информация в текстовых файлах хранится в символьном (ASCII коды) виде. При записи чисел происходит их автоматическое преобразование в символьный тип, а при их считывании наоборот автоматически преобразуются в ASCII коды.

б) Строки текстового файла заканчиваются символом #13- Enter и #10- возврат каретки, вводятся оба при нажатии на клавиатуре клавиши Enter (признак EOLnEnd Of Line).

с) Признаком конца файла является код #26 (управляющий символ Ctrl+Z, если файл вводится с клавиатуры) записываемый в его конец (признак EOFEnd Of File). При записи в файл данные записываются подряд, а управляющие символы устанавливаются автоматически оператором Writeln. Управляющие символы работают при просмотре/редактировании файла на экране или при печати, но при этом, как правило, не показываются.

Запись информации и считывание ее из текстового файла происходит с помощью процедур ввода и вывода Writeln (или Write) и Readln (или Read) через файловую переменную.

1. Файловая переменная "F" описывается в разделе переменных Var f:Text;

2. Файловая переменная "F" связывается с именем файла на диске, процедурой:

Assign(F, 'Имя_файла');

Например: Assign(F, 'file. dat'); связывает с переменную "F" с файлом "file. dat", если файл находится в текущем каталоге, а в противном случае перед его именем указывают маршрут (префикс): 'C:\Pascal\Work\file.dat'. Связывание файловой переменной "F" с именем файла на диске означает обращение к этому файлу при каждом использовании переменной в файловых процедурах.

3. Файл открывается:

а) для записи данных процедурой – ReWrite(F);

На диске создается новый файл. Имя файла указано в процедуре Assign(F,‘Имя_файла’);. Процедурой Write(F,y1,y2,…); или Writeln(F,y1,y2,…); из указанных переменных данные записываются в файл. Процедура Writeln(F,y1,y2,…); дополнительно устанавливает в конце выводимых данных управляющие символы: #13, #10. Здесь обозначено y1,y2,… - список переменных. Повторное применение процедуры стирает содержимое файла и устанавливает указатель на начало файла.

б) для считывания данных процедурой – Reset(F);

При первом обращении к файлу внутренний указатель устанавливается на начало файла, и данные считываются с начала файла процедурой Read(F, y1,y2,…); или Readln(f, y1,y2,…); (при каждом обращении к файлу указатель увеличивается на единицу). Процедура Readln(f, y1,y2,…); после считывания данных в указанные переменные переводит указатель за управляющие символы: #13, #10, игнорируя возможно оставшиеся в строке данные. Следовательно, процедура Readln(F); пропускает все данные записанные до управляющих символов #13, #10. Повторное применение оператора Reset(F); снова устанавливает указатель на начало файла для считывания данных, содержимое файла при этом не меняется.

Конец файла можно определить с помощью функции EOF(F), которая возвращает TRUE, если внутренний указатель файла переменной F достиг метки “конец файла” (иначе FULSE).

с) для добавления данных в конец файла процедурой – Append(F);

На диске должен существовать файл с именем, указанным в операторе Assign(F,’Имя_файла’);.

4. После вывода данных в файл его необходимо закрыть процедурой:

Close(F);

Записывает метку “конец файла” (EOF – End Of File). Если программа не закроет, по какой либо причине файл, то возможна потеря данных.

!!! Если в процедурах ввода/вывода не указывается переменная "F" то происходит вывод данных на экран или их считывание с клавиатуры с отображением на экране.

При работе с числовыми данными необходимо учитывать, что числа в текстовом файле должны отделяться друг от друга хотя бы одним пробелом.

Программа ниже выводит в текстовый файл File1.dat пары значений чисел вводимых с клавиатуры. Ввод пары нулевых значений завершает программу.

Program Wwod;

var

a,b:Real;

F1:Text; { файловя переменная F1 для работы с текстовым файлом}

Begin

Assign(F1,'File1.dat'); { назначить переменой F1, имя файла: File1.dat }

ReWrite(F1); { открыть файл File1.dat для записи }

Writeln(‘Введите построчно a и b’); { вывести первую строчку на экран}

Writeln(F1,' A, B'); { вывести первую строчку в файл}

repeat

readln(a, b); { считать с клавиатуры элементы a и b }

If (a<>0)and(b<>0) then writeln(F1,a:6:2,’ ‘,b:8:3);{записать пару элементов в файл}

until (a=0) and (b=0); ); {закончить цикл при вводе a=0 и b=0}

Close (F1); { закрыть файл File1.dat }

Writeln(‘Файл записан’)

End.

Следующий пример программы читает из предыдущего текстового файла пары чисел, складывает их (условная обработка) и затем все снова записывает в текстовый файл “File2.dat”.

Program Obrabotka_I_Zapis;

Const C1=100;

var

X,Y,Z: Real;{ }

F1, F2:Text; { файловые переменные F1 и F2 для работы с текстовыми файлами}

S:String;

Begin

Assign(F1,'File1.dat'); { назначить переменой F1, имя файла: File1.dat }

Assign(F2,'File2.dat'); { назначить переменой F2, имя файла: File2.dat }

Rewrite(F2); { открыть файл File2.dat для записи }

Reset(F1); { открыть файл File1.dat для чтения }

Readln(F1,S); { прочитать первую строку в файле File1.dat }

S :=S + ’ Z’; { добавить в строку ‘ Z’ }

Writeln(S); { вывод строку на экран }

Writeln(F2,S); { вывод строку в файл File2.dat }

While not (EOF(F1)) =True do { выполнять пока не достигнем конца файла File1.dat }

begin

readln(F1, X, Y);{ считать данные из файла File1.dat }

Z:= X+Y; {пример расчета нового значения }

writeln(X:6:2,’ ‘,Y:8:3,’ ‘, Z:8:3);{ вывести данные на экран }

writeln(F2,X:6:2,’ ‘,Y:8:3,’ ‘,Z:8:3);{ записать данные в файл File2.dat }

end;

Close (F2); { закрыть файл File2.dat }

Close (F1); { закрыть файл File1.dat }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]