Тема 13. Работа с файлами в языке Pascal 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Тема 13. Работа с файлами в языке Pascal



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

Пример 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.

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

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

а) запишет в файл Price список товаров (название и цена);

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

- выведет на экран прайс-лист;

- изменит цену товара с заданным наименованием;

- допишет в файл данные о новом товаре (предварительно проверив, что в файле информации о таком товаре нет).

Программы:

Program A;

Uses Crt;

Type tovar = Record

name: String;

price: Real

End;

Var t: tovar; { переменная t для хранения информации об очередном товаре }

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

k, n: Integer;

Begin

Clrscr;

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

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

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

Readln (n); 

For k:=1 To n Do

Begin

Write (‘Введите наименование ’,k,’-го товара ’);

Readln (t.name); { запросили значение первого поля записи }

Write (‘Введите цену товара ’);

Readln (t.price); { запросили значение второго поля записи }

Writeln (f, t)       { записали в файл запись t }

End;

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

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

Readln

End.

Program B;

Uses Crt;

Type tovar = Record

name: String;

price: Real

End;

Var t: tovar; { переменная t для хранения информации об очередном товаре }

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

k, n: Integer;

nt: String;

new_price: Real;

new_t: tovar;

Begin

Clrscr;

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

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

Reset (f); { открыли файл }

Writeln (‘Прайс – лист: ‘);

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

Begin

Readln (f, t); { прочитали из файла очередную запись в переменную t }

Writeln (t.name:20, t.price:10:2) { вывели на экран значения полей записи – наименование и цену товара }

End;

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

{ изменение цены отдельного товара }

Reset (f); { открыли файл }

Write (‘Введите наименование товара, у которого меняется цена ‘);

Readln (name_t);

Write (‘Введите новую цену ‘);

Readln (new_p);

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

Begin

Readln (f, t); { прочитали из файла очередную запись в переменную t }

If t.name = nt  { если прочитанное из файла наименование товара совпадает с тем, у которого меняется цена, то}

Then Begin

t.price:= new_price; { меняем цену товара в записи t }

Seek (f, FilePos (f) -1); { устанавливаем указатель обратно на ту запись в файле, у которой изменили цену}

Write (f, t) { записываем переменную t с измененным значением поля price в файл }

End

End;

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

{ дописывание в конец файла информации о новом товаре }

Write (‘Введите наименование нового товара ‘);

Readln (new_t.name);

Write (‘Введите цену ‘);

Readln (new_t.price);

Reset (f); { открыли файл }

{ проверим, есть ли данные о таком товаре в файле }

flag:= false; { сначала считаем, что такого товара в файле нет }

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

Begin

Readln (f, t); { прочитали из файла очередную запись в переменную t }

If  t.name = new_t.name { если прочитанное из файла наименование товара совпадает с тем, который хотим дописать в файл}

Then Flag:= True { запоминаем, что данные о таком товаре есть в файле}

End;

If Not flag { если данных о новом товаре в файле не найдено (т.е. значение переменной flag осталось равным false) }

Then Begin

Seek (f, FileSize (f));  { устанавили указатель в конец файла }

Write (f, new_t) { записали в файл данные о новом товаре}

End;

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

Writeln (‘Новые данные дописаны в файл’);

Readln

End.

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

While (Not Eof (f)) And (Not Flag)Do …

 

т.е. «пока не конец файла и товар не найден». Это означает, что просмотр файла будет выполняться либо до конца файла, либо до тех пор, пока в файле не будет найден новый товар.



Поделиться:


Последнее изменение этой страницы: 2021-04-05; просмотров: 51; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.26.176 (0.017 с.)