Порядок замены содержимого записи

Вопрос № 25

Работы с типизированными файлами на языке Turbo Pascal: Описание и пример чтения/записи.

Типизированный файл – это файл, в котором содержатся однотипные данные. Типизированный файл задается с помощью 2-х ключевых слов «file of». После слова «of» указывается тип файла, например integer, real, char, string и т.д. Тип файла может быть любым за исключением файлового типа (не может быть файла файлов) и комбинированного типа, один из компонентов которого имеет файловый тип.

Формат описания:

Первый способ:

Type

имя_файлового_типа=File of тип_компонент;

Var

файловая_переменная: имя_файлового_типа;

Второй способ:

Var

файловая_переменная : File of тип_компонент;

Пример.

Если компонентами файла являются записи, то он описывается следующим образом:

Type

Sved=record

Fio:String;

Nom:String[10];

b1,b2,b3:Byte;

end;

Var

Fv:File of Sved; {переменная доступа к файлу}

Rv:Sved; {переменная доступа к записи}

Если компонентами файла являются целые числа, то он описывается так:

Var

F:File of Integer;

Доступ к компонентам файла осуществляется через указатель файла (файловую переменную). В ней хранится текущий номер компоненты файла.

Существует 2 способа доступа к компонентам файла:

1. последовательный

2. произвольный

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

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

Процедуры для работы с типизированными файлами

Rewrite (файловая_переменная) – открыть новый файл для записи.

Reset (файловая_переменная) – открыть существующий файл для чтения. Разрешается обращаться к типизированным файлам, открытым процедурой Reset, с помощью процедуры Write для записи информации в файл.

Read (файловая_переменная, переменная_доступа_к_компонентам) – считывает компонент из файла.

Write (файловая_переменная, переменная_доступа_к_компонентам) – записывает компонент в файл.

Seek (файловая_переменная, номер_компоненты) – смещает указатель файла к требуемому компоненту. Первый компонент файла имеет номер ноль.

Функции для работы с типизированными файлами

FileSize (файловая_переменная) – возвращает значение типа

Longint, которое содержит количество компонент файла.

FilePos (файловая_переменная) возвращает значение типа

Longint, которое содержит порядковый номер компонента файла, ко-

торый будет обрабатываться следующей операцией ввода-вывода.

Порядок создания файла

1. Связать файловую переменную с именем файла (Assign).

2. Открыть новый файл (Rewrite)

3. Записать компонент в файл (Write)

4. Закрыть файл (Close).

Порядок использования файла

1. Связать файловую переменную с именем файла (Assign).

2. Открыть существующий файл (Reset)

3. Прочитать компонент из файла (Read)

4. Закрыть файл (Close).

Если компонентами файла являются записи, то применяются следующие виды корректировок файла:

1. Расширение файла за счет внесения новых компонент.

2. Полная замена содержимого записи.

3. Корректировка значений полей отдельных записей.

4. Удаление компонент из файла.

Порядок расширения файла за счет внесения новых компонент

1. Связать файловую переменную с именем файла (Assign).

2. Открыть существующий файл (Reset)

3. Установить указатель файла за последним компонентом файла Seek(файловая_переменная,FileSize(файловая_переменная))

4. Записать компонент в файл (Write)

5. Закрыть файл (Close).

Порядок замены содержимого записи

1. Связать файловую переменную с именем файла (Assign).

2. Открыть существующий файл (Reset)

3. Установить указатель файла перед компонентом с нужным номером Seek(файловая_переменная,номер_компоненты)

4. Прочитать компоненту из файла (Read)

5. Установить указатель файла перед компонентом с нужным номером Seek(файловая_переменная,номер_компоненты)

6. Записать компонент в файл (Write)

7. Закрыть файл (Close).

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

Создать файл X компонентами которого являются элемента массива M. Переписать из файла X в файл Y все компоненты, которые стоят на четных местах. Прочитать файл Y.

M = (0,1; 5,6; 0.8; 2,4; 7,3; 6,8; 0,5; 2,3;)

Описание переменных:

M - массив-константа;

x, y - переменные, связанные с типизированными файлами;

n - считанное из файла очередное число;

i - счетчик.

Алгоритм решения задачи:

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

Связать файловые переменные с соответствующими файлами.

Открыть файл X на запись. Записать в него все элементы массива. Закрыть файл.

Открыть файл X на чтение, а файл Y на запись. Присвоить счетчику значение 1. Пока не будет достигнут конец файла X, считывать из него очередное число. Если при этом счетчик имеет четное значение, то записывать число в файл Y. После считывания и проверки на четность номера очередного числа, увеличивать счетчик на 1. После того как файл X будет прочитан, закрыть оба файла.

Открыть файл Y на чтение. Пока не будет достигнут его конец, считывать из него очередное число и выводить его на экран. После завершения цикла закрыть файл.

const M: array[1..8] of real = (0.1, 5.6, 0.8, 2.4, 7.3, 6.8, 0.5, 2.3);

var

x,y : file of real;

n: real;

i: byte;

begin

assign(x,'x.dat');

assign(y,'y.dat');

rewrite(x);

for i:=1 to 8 do

write(x, M[i]);

close(x);

reset(x);

rewrite(y);

i := 1;

while not EOF(x) do begin

read(x, n);

if not odd(i) then

write(y, n);

i := i + 1;

end;

close(x);

close(y);

reset(y);

while not EOF(y) do begin

read(y, n);

write(n:5:1);

end;

writeln;

close(y);

end.

Результат выполнения программы: 5.6 2.4 6.8 2.3

Наши рекомендации