Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MET1.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.14 Mб
Скачать

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

    1. Read (F, <список ввода>); - считывание информации из файла, где <список ввода> - список переменных того же типа, что и компоненты файла. Считывание начинается с позиции указателя текущей компоненты.

    2. Write (F, <список вывода>); - запись информации в файл, где <список вывода> - список выражений того же типа, что и компоненты файла. Запись начинается с позиции указателя текущей компоненты.

    3. Seek (F, Num); - установка указателя текущей компоненты на компоненту с номером Num.

    4. FilePos (F) : Longint – функция определения номера текущей компоненты.

    5. FileSize (F) : Longint – функция определения текущего размера файла.

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

        1. Append (F); – открытие файла для записи информации в конец файла.

        2. Read (F, <список ввода>); – считывание информации из файла, где <список ввода> - список переменных целого, действительного, символьного или строкового типа.

        3. Readln (F, <список ввода>); – аналогична процедуре Read, но, в отличие от нее, после считывания данных все оставшиеся символы до конца строки пропускаются, т.е. следующее считывание будет осуществляться со следующей строки.

        4. Write (F, <список вывода>); – запись информации в файл, где <список вывода> - список выражений целого, действительного, логического, символьного или строкового типа.

        5. Writeln (F, <список вывода>); – аналогична процедуре Write, но, в отличие от нее, после записи информации происходит переход на новую строку, т.е. следующая запись будет осуществляться со следующей строки.

        6. Eoln (F) : Boolean – функция определения конца строки файла. (Eoln(F)=true, если достигнут конец строки файла).

        7. SeekEoln (F) : Boolean – аналогична функции Eoln, но SeekEoln(F)=true, если до конца строки остались только незначащие символы (пробелы и знаки табуляции).

        8. SeekEof (F) : Boolean – аналогична функции Eof, но SeekEof(F)=true, если до конца файла остались только незначащие символы.

Пример 15. Имеется файл “PERSONAL.DAT”, содержащий сведения о сотрудниках учреждения с указанием фамилии и инициалов, должности, стажа работы (полных лет) и оклада. Сотрудникам выдали премию согласно следующему распоряжению: имеющим стаж работы 20 и более лет – 50% от оклада, от 10 до 19 лет – 35%, от 5 до 9 лет - 20 % от оклада. Напечатать список премируемых сотрудников, выдав фамилию с инициалами, должность и размер премии для каждого.

Составим две программы – создания и обработки файла “PERSONAL.DAT”.

Program Example_15a;

{Программа создания файла “PERSONAL.DAT”}

Type

Persona = Record {описание типа компонент файла}

FIO, Dol : String[25];

St : Byte;

Okl : Word

End;

Var F: File of Persona; {описание файловой переменной}

Sotr: Persona; i, Kol: Byte;

Begin

Assign(F, ‘PERSONAL.DAT’); {связь файловой переменной с файлом на диске}

Rewrite(F); {открытие файла для записи}

Write(‘Введите количество сотрудников’); Readln(Kol);

For i:=1 to Kol do {цикл для ввода компонент файла}

Begin

Writeln(‘Введи данные о ’, i , ‘ сотруднике’);

With Sotr do {ввод записи - одной компоненты файла}

Begin

Write(‘Фамилия и инициалы: ’); Readln(FIO);

Write(‘Должность: ’); Readln(Dol);

Write(‘Стаж: ’); Readln(St);

Write(‘Оклад: ’); Readln(Okl)

End;

Write(F, Sotr) {запись компоненты в файл}

End;

Close(F) {закрытие файла}

End.

Program Example_15b;

{Программа обработки файла “PERSONAL.DAT”}

Type

Persona = Record

FIO, Dol : String[25];

St : Byte;

Okl : Word

End;

Var F: File of Persona;

Sotr: Persona; i: Byte; Prem:Real;

Begin

Assign(F, ‘PERSONAL.DAT’);

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

i:=0; {инициализация переменной для нумерации сотрудников в списке}

Writeln(‘Список премируемых сотрудников:’);

Writeln(‘№’:2,’ ‘,’Фамилия и инициалы’:25,’ ‘,’Должность’:25,’ ‘,’Премия’:8);

Writeln(‘-----------------------------------------------------------------------------------------’);

While Not Eof(F) do

Begin

Read(F, Sotr); {считывание компоненты файла}

With Sotr do

If St>=5 Then {проверка: положена ли сотруднику премия}

Begin

Inc(i);

{расчет премии сотруднику в зависимости от стажа}

If St>=20 Then

Prem:=0.5*Okl

Else

If St>=10 Then

Prem:=0.35*Okl

Else

Prem:=0.2*Okl;

Writeln(i:2,’ ‘,FIO:25,’ ‘,Dol:25,’ ‘,Prem:8:2) {вывод на экран}

End

End

End.

Пример 16. Пусть в каждом из файлов “F1.DAT” и “F2.DAT”, состоящих из целых чисел, элементы упорядочены по возрастанию. Требуется объединить эти файлы в один (с именем “F3.RES”), также упорядоченный по возрастанию.

Считаем, что файлы ‘F1.DAT’ и ’F2.DAT’ созданы.

Program Example_16;

Type F_int = File of Integer;

Var F1, F2, F3 : F_int; a, b: Integer;

{***процедура распечатки файла с заданным номером***}

Procedure Print( n: Byte; Var F: F_int);

Begin

Write(‘Файл F’,n,’: ’); Reset(F);

While Not Eof(F) do

Begin

Read(F,a);Write(a,’ ‘)

End;

Writeln

End; {конец процедуры Print}

{***процедура записи оставшихся компонент файлов F1 и F2 в файл F3***}

Procedure Ost (Var F: F_int; i, j: Integer);

{F – файл, который не закончился; i – первая компонента из оставшейся части F}

{j –последняя компонента другого файла, не записанная в файл F3}

Begin

While (i>j) and Not Eof(F) do {запись компонентов файла F в файл F3}

Begin

Write(F3, j); Read(F, j)

End;

If Eof(F) Then {запись оставшихся единственных компонент файлов F1 и F2 в F3}

If i<j Then

Write(F3, i, j)

Else

Write(F3, j, i)

Else

Begin

Write(F3, i, j); {запись 1-й компоненты из F и последней – из другого файла}

While Not Eof(F) do {запись оставшихся компонент файла F в файл F3}

Begin

Read(F, j); Write(F3,j)

End

End

End;{конец процедуры Ost}

Begin {начало программы}

Assign(F1, ‘F1.DAT’); Assign(F2, ‘F2.DAT’); Assign(F3, ‘F3.RES’);

Reset(F1); Reset(F2); Rewrite(F3); {открытие всех файлов}

Read(F1,a); Read(F2,b); {считывание первых компонент файлов}

While (Not Eof(F1)) and (Not Eof(F2)) do {цикл, пока не закончится один из файлов}

If a<b Then {записываем меньшую компоненту из F1 и считываем следующую}

Begin Write(F3, a); Read(F1, a) End

Else {записываем меньшую компоненту из F2 и считываем следующую}

Begin Write(F3, b); Read(F2, b) End;

If Eof(F1) Then {F1 закончился, но осталась одна необработанная компонента}

Ost(F2, a, b)

Else Ost(F1,b,a); {в файле F2 осталась 1 компонента}

Close(F3); {закрытие файла F3}

Print(1, F1); Print(2, F2); Print(3, F3) {печать файлов}

End.

Пример 17. В текстовом файле INPUT.TXT находится следующая информация: в первой строке находятся буква и натуральное число, разделенные пробелами; во второй строке – различные слова, разделенные пробелами. Получить файл OUTPUT.TXT, записав в него все слова исходного файла, длина которых равна заданному числу и которые содержат заданную букву.

Program Example_17;

Var A, B: Text; S: string; c, Symbol: char; Number: byte;

Begin

Assign(A, 'Input.txt'); Assign(B, 'Output.txt');

Reset(A); Rewrite(B);

Readln(A, Symbol, Number); {считывание из 'Input.txt' элементов первой строки}

While Not Eof(A) do

Begin

Repeat {цикл для пропуска пробелов до, между и после слов во второй строке}

Read(A, c)

Until (c<>' ') Or Eof(A); {выход из цикла: если встретится не пробел или закончится файл}

S:='';

While (c<>' ') And Not Eof(A) do {цикл для выделения слова из строки}

Begin

S:=S+c; Read(A, c)

End;

If Eof(A) And (c<>' ') Then S:=S+c; {проверка для случая, когда наступил конец файла, но последняя буква последнего слова не попала в S}

If (Length (S) = Number) And (Pos (Symbol, S) > 0) Then {проверка на запись выделенного из строки слова в результирующий файл}

Write(B, S, ' ')

End;

Close(B)

End.

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