Примеры решаемых задач

Пример 1. Составить программу, которая:

а) запишет в файл Message. txt текстовое сообщение;

б) прочитает из файла Message. txt текстовое сообщение и выведет его на экран.

Пояснение. Для решения этой и подобной задач лучше составлять две отдельные программы: первая программа формирует файл, вторая – его обрабатывает.

Программы:

Program A;

Uses Crt;

Var s: string; { переменная s для хранения текстового сообщения }

f: text; { f – файловая переменная }

Begin

Clrscr;

Assign (f, ’Message. txt’); { связывание файловой переменной f с файлом ’Message. txt’, который будет создан в текущей папке }

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

Write (‘Введите текст сообщения ‘);

Readln (s); { ввели в переменную s текст сообщения }

Writeln (f, s);{ записали в файл содержимое переменной s }

Close (f); { закрыли файл }

Writeln (‘Файл создан’);{ вывели на экран поясняющее сообщение }

Readln

End.

Program B;

Uses Crt;

Var m: string; { переменная m для хранения текстового сообщения }

t: text; { t – файловая переменная }

Begin

Clrscr;

Assign (t, ’Message. txt’); { связывание файловой переменной f с файлом ’Message. txt’, который существует в текущей папке }

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

Readln (t, m); { считали из файла t в переменную s текст сообщения}

Writeln (‘Сообщение:', m); { вывели на экран текст сообщения }

Close (t); { закрыли файл }

Readln

End.

Пример 2. Составить программу, которая:

а) запишет в файл Students.txt список студентов группы (фамилия и год рождения);

б) обработает файл Students.txt следующим образом:

- выведет на экран список студентов группы;

- выведет список студентов заданного года рождения;

- допишет в файл информацию о новом студенте.

Программы:

Program A;

Uses Crt;

Var fam: string; { переменная fam для хранения фамилии студента }

year, n, k: integer; { переменная year для хранения года рождения}

f: text; { f – файловая переменная }

Begin

Clrscr;

Assign (f, ’Students. txt’); { связывание файловой переменной f с файлом ’Students. txt’, который будет создан в текущей папке }

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

Write (‘Введите количество студентов в группе ‘);

Readln (n);

For k:=1 To n Do

Begin

Write(‘Введите фамилию ’,k,’-го студента ’);

Readln (fam); { Ввели в переменную fam фамилию }

Writeln (f, fam); { записали в файл фамилию студента и символ Eoln }

Write(‘Введите год его рождения ’);

Readln (year); { Ввели в переменную year год рождения }

Writeln (f, year) { записали в файл год рождения студента и символ Eoln }

End;

Close (f); { закрыли файл }

Writeln (‘Файл создан’); { вывели на экран поясняющее сообщение}

Readln

End.

Program B;

Uses Crt;

Var fam: string; { переменная fam для хранения фамилии студента }

year, n,: integer; { переменная year для хранения года рождения }

f: text; { f – файловая переменная }

Begin

Clrscr;

Assign (f, ’Students. txt’); { связываем файловую переменную f с файлом ’Students. txt’, который будет создан в текущей папке }

{ а) вывод на экран содержимого файла ’Students. txt’ }

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

Writeln (‘Список группы ‘);

While Not Eof (f) Do { пока не достигнут конец файла }

Begin

Readln (f, fam); { читаем из файла фамилию и символ Eoln }

Readln (f, year);{ читаем из файла год рождения и символ Eoln}

Writeln (fam:20, year: 5) { печатаем фамилию и год рождения }

End;

Close (f); { закрываем файл }

{ б) поиск в файле студентов заданного года рождения }

Write (‘Задайте нужный год рождения ’);

Readln (x); { вводим год для поиска }

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

While Not Eof (f) Do { пока не достигнут конец файла }

Begin

Readln (f, fam); { читаем из файла фамилию и символ Eoln }

Readln (f, year);{ читаем из файла год рождения и символ Eoln}

If year = x then { если год рождения очередного студента равен требуемому }

Writeln (fam) { выводим фамилию на экран }

End;

Close (f); { закрываем файл }

{ в) дополнение файла данными о новом студенте }

Write (‘Введите фамилию нового студента ’);

Readln (fam);

Write (‘Введите год его рождения ’);

Readln (year);

Append (f); { открываем файл для дополнения }

Writeln (f, fam); { дописываем в файл новую фамилию (и Eoln) }

Writeln (f, year); { дописываем в файл год рождения (и Eoln) }

Close (f); { закрываем файл }

Readln

End.

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

Типизированные файлы

Записи типизированного (структурированного) файла имеют одинаковый тип (а значит, имеют одинаковый размер – именно поэтому к ним и возможен прямой доступ). Структуру типизированного файла представлена на Рис. 7.

  Запись 0  
  Запись 1  
  Запись 2  
  Запись 3  
  Eof  
Рис. 7.Структура типизированного файла
       

Записи файла пронумерованы. Нумерация начинается с нуля. В конце файла записан специальный неотображаемый символ Eof («End of file» - конец файла).

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

1. Описание файловой переменной:

Var f: File Of <тип записи файла>;

где f – имя файловой переменной.

Файловая переменная – это переменная-указатель, посредством которой идет взаимодействие программы (чтение/запись данных) с внешним файлом.

Записи файла могут иметь любой из рассмотренных выше типов (как стандартный, так и сконструированный в блоке Type).

Например:

Type Stud = Record

Name: String;

Group: Integer;

Rating: Real

End;

Var f1: File of Stud; { записями файла f1 являются записи (Record) из трех полей }

f2: File Of Integer; { записи файла f2 – целые числа }

2. Связывание файловой переменной с конкретным именем внешнего файла:

Assign (f, <имя файла>);

где f – имя файловой переменной, <имя файла> - строковая константа или переменная. Например, выполнение команды Assign (f, ’c:\tp70\data’) свяжет файловую переменную f с файлом «data», который расположен на диске C: в папке с именем «tp70». После записи такой команды в тексте программы нигде далее не будет указываться имя файла, с которым работает программа.

3. Открытие файла для записи данных:

Rewrite (f);

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

4. Открытие файла для чтения данных:

Reset (f);

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

5. Запись данных в файл:

Write (f, <имя переменной>);

Тип переменной должен совпадать с типом записей файла.

6. Чтение данных из файла:

Read (f, <имя переменной>);

7. Закрытие файла:

Close (f);

8. Функция FileSize(f) возвращает количество записей в файле.

9. Функция FilePos (f) возвращает номер текущей записи, т.е. той записи файла, на которую указывает указатель.

10. Команда Seek (f, n) устанавливает указатель на запись файла с номером n. Например, команда Seek (f, FileSize(f)) установит указатель после последней записи файла. Это позволяет, в частности, дописывать данные в конец типизированного файла.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: