Работа с файлами - Free Pascal (186)
Формулировка задачи:
Есть один созданный файл с именами клиентов. Необходимо создать второй файл с 3-мя записями, при этом, чтобы в записи "Номер клиента" было число, соответствующее порядковому номеру имени клиента из 1-го файла, т.е. предусматривалась проверка, что такой клиент вообще существует в файле 1. Как это организовать?
Решение задачи: «Работа с файлами»
textual
Листинг программы
type
TNameStr = String[31];
TDate = String[8];
TClient = record
Name: TNameStr;
{...}
end;
TPurchess = record
Date: TDate;
Value: Real;
Client: Integer;
end;
var
fc: file of TClient;
fp: file of TPurchess;
Clients: array [1..10] of TClient;
ClientCnt: Integer;
p: TPurchess;
begin
Assign(fc,'file1.bin'); Reset(fc);
while not EoF(fc) and (ClientCnt<High(Clients)) do begin
Inc(ClientCnt); Read(fc,Clients[ClientCnt]);
end;
Close(fc); {$I-}
Assign(fp,'file2.bin'); Reset(fp);
if IOResult<>0 then Rewrite(fp);
Seek(fp,FileSize(fp));
with p do
repeat
Write('Дата: '); ReadLn(Date);
if Date='' then Break;
Write('Сумма: '); ReadLn(Value);
repeat
Write('Номер клиента: '); ReadLn(Client);
if (Client>=Low(Clients)) and (Client<=ClientCnt) then begin
WriteLn('Клиент: ',Clients[Client].Name);
Break;
end else WriteLn('*** Ошибочный номер клиента');
until False;
if not (Date='') then Write(fp,p);
until Date='';
Close(fp);
end.
Объяснение кода листинга программы
- Объявление типов данных: TNameStr (строка 31 символа), TDate (строка 8 символов), TClient (запись с полями Name типа TNameStr), TPurchess (запись с полями Date типа TDate, Value типа Real и Client типа Integer)
- Создание файлов fc и fp для работы с данными типов TClient и TPurchess соответственно
- Объявление массива Clients типа TClient на 10 элементов и переменной ClientCnt типа Integer
- Чтение данных из файла fc в массив Clients до тех пор, пока не закончится файл или не заполнится 10 элементов массива Clients
- Закрытие файла fc
- Открытие файла fp для записи
- Если файл fp не может быть открыт, то его создание и перезапись
- Перемещение позиции чтения файла fp в конец файла
- Ввод данных о дате, сумме и номере клиента с помощью функций ReadLn
- Проверка корректности номера клиента путем сравнения со значениями Low и ClientCnt
- Запись данных в файл fp
- Закрытие файла fp