Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема 10 - Файлы.doc
Скачиваний:
5
Добавлен:
12.07.2019
Размер:
83.97 Кб
Скачать

Процедуры и функции для текстовых файлов

Обращение

Действие

Append(f)

Открывает файл для добавления в конец файла

Read(f, СписокВвода)

Считывает из файла одно или более значений в одну или более переменных

ReadLn(f, СписокВвода)

То же с переходом к следующей строке файла

Write(f, СписокВывода)

Записывает одно или несколько значений в файл, заранее открытый для вывода

WriteLn(f, СписокВывода)

То же с выводом маркера – признака конца строки

SetTextBuf(f, Буфер [, Размер])

Назначает буфер ввода/вывода для файла (по умолчанию размер буфера – 128 байт)

Flash(f)

Выталкивает буфер файла вывода

Eoln(f)

Возвращает признак конца строки

SeekEoln(f)

Возвращает признак конца строки, предварительно пропустив все пробелы и символы табуляции

SeekEof(f)

Возвращает признак конца файла, предварительно пропустив все пробелы, символы табуляции и признаки конца строки

1. Дан текстовый файл. Записать в новый файл все слова из исходного, перевернув каждое слово в тексте.

VAR F1, F2:text; i:byte;

FileName1, FileName2, S, S1, S2:string;

BEGIN

readln(FileName1);

Assign(F1, FileName1); Reset(F1);

readln(FileName2);

Assign(F2, FileName2); Rewrite(F2);

While not EOF(F1) do

BEGIN

readln(F1, S1);

S2:=’ ‘; S:=’ ‘;

For i:=1 to length(S1) do

BEGIN

If (S1[i]<>’ ‘) and (i<>length(S1)) then

S:=S1[i]+S

else

BEGIN

S2:=S2+S+’ ‘;

S:=’ ‘;

END;

writeln(F2, S2);

END;

Close(F1);

Close(F2);

END.

Пример программы

{ Модуль для получения музыки из внешнего файла - musik. pas }

uses crt;

var Musfile: text;

frequency, time: integer; { частота и длительность звучания }

begin

assign ( Musfile, 'musik.dat' ); { связать файл с набором данных }

reset ( Musfile ); { открыть текстовый файл для чтения }

while not eof ( Musfile) do { пока не конец файла }

begin

read ( Musfile, frequency, time); { считать из файла 2 числа }

sound ( frequency); { звук с частотой frequency }

delay ( time); { длительностью time }

nosound; { отключить звук }

end;

end.

{ Содержимое внешнего файла musik. dat

первый параметр - частота, второй - длительность звука }

400 1000

250 500

225 500

200 1000

300 1000

и т.д.

Тип запись.

Наиболее гибким механизмом построения данных являются записные типы. Тип ЗАПИСЬ (RECORD) задает некоторый образ (шаблон) структуры объектов данного типа, каждая часть которой может иметь совершенно различные характеристики. Примером может служить описание людей с помощью некоторых существенных характеристик, таких как фамилия, имя, год рождения, пол, семейное положение и т.д.

Запись - это структура данных, состоящая из фиксированного числа компонент, называемых полями. В отличии от массивов компоненты могут относиться к различным типам, и непосредственно индексировать их с помощью выражений нельзя. В определении записных типов для каждой из компонент задаются ее имя и тип, имя поля, обозначающее эту компоненту.

Type student = record

fio: string [20]; {фамилия студента}

gr: string [4]; {группа}

age: 16..35; {возраст}

a: array [1..4] of integer; {оценки за аттестацию}

end;

Var st: student;

Целиком ко всей переменной записи применимы лишь две операции: присваивание, селекция (выделение) компоненты.

Записи представляют собой структуры с прямым методом доступа, т.е. доступ возможен к любому полю записи без перебора предшествующих полей. Для того, чтобы обращаться к компонентам (полям) записи, необходимо указать идентификаторы записи, за которыми ставится точка (селектор), а затем идентификатор поля, например, st. fio.

Компоненты записи могут быть в свою очередь составными. Таким образом, селекторы могут добавляться один к другому. Следует заметить, что на практике не все комбинации записного типа могут иметь смысл, поэтому ответственность за то, чтобы при выполнении программы не возникали подобные бессмысленные значения, возлагается на программиста.

Записи могут иметь как фиксированную, так и вариантную часть Вариантная часть появляется тогда, когда в запись необходимо включать информацию, зависящую от другой, уже включенной в ту же запись информации. В описании записи можно использовать только одну вариантную часть, причем она должна быть записана только после фиксированной части.

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

Оператор присоединения WITH

Для обращения к компонентам записи используются составные имена. При этом они могут получаться очень длинными, причем одни и те же идентификаторы многократно повторяются. Обращение к компонентам записей можно упростить, если воспользоваться оператором присоединения WITH.

with st do

begin gotoxy(1,3);

writeln('Фамилия: '); readln ( fio );

writeln('Группа : ' ); readln ( gr );

writeln('Возраст: ' ); readln ( age );

end;

Файлы записей

Описание:

Тип переменной может быть определен как файловый непосредственно в разделе переменных

var f_st_rec = file of student;

Длины файлов в описаниях не определены, но каждый файл имеет конец, называемый признаком конца файла. это признак формируется операционной системой автоматически после закрытия файла (при этом размер файла кратен 1 блоку = 512 байт) и может быть опознан с помощью предопределенной функции EOF (имя файла), которая в этом случае примет истинное значение. Признак конца файла может быть сформирован и самим программистом.

Признак конца файла удобен для организации циклов по обработке данных из файла:

i:= 0;

while not (eof (f)) do

begin

read (f, st);

if st. fio = ‘ Иванов ’ then inc (i);

end;

writeln (‘ В данном файле храниться информация о ’, i, ‘ Ивановых ’);

Для работы с файлом записей его необходимо «открыть» на физическом носителе информации, cвязав «логическое» и «физическое» имена файлов между собой (см. процедуру assign).

Теперь файл « открыт» и, следовательно, его можно заполнить некоторой интересующей нас информацией. Это можно сделать двумя способами: либо переписав необходимую информацию из другого, уже существующего файла (возможно текстового); либо заполнив информацией, полученной от пользователя в режиме диалога.

После записи информации в файл его необходимо «закрыть» с помощью оператора CLOSE(F). Теперь файл готов для последующей работы и хранения информации.