Как изменить часть данных в типизированном файле? - Free Pascal
Формулировка задачи:
У меня есть типизированный файл file.tx, в нем есть данные. Вот так они образуются. Мне нужно в другой процедуре изменить конкретную строчку или удалить.
Какие функции для этого использовать? Или напишите пример.
rocedure Prosmotr;
Begin
clrscr;
y:=0;
Assign(V,'FILE1.tx');
Reset(V);
While not Eof(V) do
begin
y:=y+1;
read(V,N);
writeln('Adres: ',N.Adres);
writeln('Ploshad: ',N.Ploshad:0:1);
writeln('Data: ',N.Data);
writeln('Stoimost: ',N.Stoimost:0:2);
writeln('Summa: ',N.Summa:0:2);
writeln;
if (y=3)
then begin
readln;
clrscr;
end;
end;
close(V);
readln;
End;Решение задачи: «Как изменить часть данных в типизированном файле?»
textual
Листинг программы
program test;
type
TInfo = record
a: integer;
b: string[10];
end;
TFile = file of TInfo;
var
x: TInfo;
f: TFile;
i: integer;
begin
Assign(f, 'test.dat');
rewrite(f);
for i := 0 to 9 do
begin
x.a := i;
Str(Pi + i: 10: 5, x.b);
Write(f, x);
end;
Close(f);
reset(f);
while not EOF(f) do
begin
Read(f, x);
writeln(x.a: 5, x.b: 15);
end;
Close(f);
FileMode := 2;//fmOpenReadWrite; {разрешаем открывать на чтение и запись}
reset(f);
seek(f, 3);
x.a := 400;
x.b := 'replaced';
Write(f, x);
seek(f, FileSize(f));
Close(f);
writeln('-------');
reset(f);
while not EOF(f) do
begin
Read(f, x);
writeln(x.a: 5, x.b: 15);
end;
Close(f);
end.
Объяснение кода листинга программы
- Объявление переменных и типов данных — Тип данных TInfo, который представляет собой запись (record) с полями a: integer и b: string[10] — Тип данных TFile, который представляет собой файл (file) с типом данных TInfo — Переменная x: TInfo — Переменная f: TFile — Переменная i: integer
- Открытие файла 'test.dat' для записи (режим rewrite) с помощью функции Assign
- Цикл от 0 до 9, который выполняет следующие действия: — Присваивает полю a значение i — Форматирует и записывает поле b с помощью функции Str — Записывает объект x в файл с помощью функции Write
- Закрытие файла с помощью функции Close
- Открытие файла 'test.dat' для чтения и записи (режим fmOpenReadWrite) с помощью функции Assign
- Чтение файла до конца с помощью цикла while not EOF — Чтение объекта x из файла с помощью функции Read — Вывод значений полей a и b с помощью функции writeln
- Закрытие файла с помощью функции Close
- Изменение значения поля a объекта x на 400 и поля b на 'replaced'
- Запись измененного объекта x в файл с помощью функции Write
- Переход к последнему байту файла с помощью функции seek
- Закрытие файла с помощью функции Close
- Вывод на экран содержимого файла 'test.dat' с помощью цикла while not EOF — Чтение объекта x из файла с помощью функции Read — Вывод значений полей a и b с помощью функции writeln
- Закрытие файла с помощью функции Close
- Завершение программы Обратите внимание, что этот код может работать некорректно, если файл 'test.dat' существует и содержит данные. Этот код перезапишет существующий файл без предупреждения.