Модуль 17.4 (Работа с текстовыми файлами. Часть 2) курса «Поколение Python: курс для продвинутых» курс расскажет о:
- Запись данных в файл
- Файловые методы write() и writelines()
Публикуем решения на урок 17.4 Работа с текстовыми файлами. Часть 2
Текстовый файл words.txt содержит следующие строки:
Begin
End;
- Пример программы, которая сортирует строчки исходного текстового файла в обратном порядке и записывает их в новый файл под именем namesort.txt.
Nam:String;
SA:Array [0..100] of String[100];
I,N:Integer;
Begin
N:=0;
Write(‘введите имя файла для сортировки строк ’);
ReadLn(Nam);
Assign(Fil,Nam);
Reset(Fil);
While Not EOF(Fil) Do
Begin
ReadLn(Fil,SA[N]);
N:=N+1
End;
For I:=1 To N Do
WriteLn(SA[I-1]);
Close(Fil);
Assign(Fil,’namesort.txt’);
Rewrite(Fil);
For I:=N Downto 1 Do
17.4 Лог файл ️. «Поколение Python»: курс для продвинутых. Курс Stepik
WriteLn(Fil,SA[I-1]);
Close(Fil);
Работа с типизированными файлами
- Перепишем программу из примера №4, так что файлы будут копироваться побайтно.
var
f1, f2 : typefile;
c : byte;
begin
assign (f1, ‘C:boot2.ini’);
reset (f1);
assign (f2, ‘C:boot2.txt’);
rewrite (f2);
while not EOF (f1) do
begin
read (f1, c); write (f2, c)
end;
close (f1); close (f2)
- Написать программу, которая заносит в файл FILE123 вещественные числа (случайные), выводит файл на экран, определяет размер файла и выводит содержимое случайно выбранного элемента
В программе использованы новые функции и процедуры для прямого доступа при работе с типизированными файлами:
FileSize(VAR f): Longint — возвращает текущий размер файла в записях, т.е. размер файла в байтах можно получить, умножив эту величину на размер одной записи.
FilePos(VAR f): Longint — возвращает текущее значение файлового указателя. Файловый указатель хранит текущий адрес в файле, начиная с которого будет выполняться очередная операция ввода или вывода. При каждой операции ввода-вывода файловый указатель автоматически смещается на количество введенных или выведенных записей.
i,n : Byte;
r,x : Real;
BEGIN
Assign(f,’FILE123′);
Rewrite(f);
Randomize;
FOR i:=1 TO n DO
BEGIN
r:=Sqrt(i);
WRITE(f,r);
END;
Writeln;
Close(f);
Reset(f)
While not eof(f) do
Begin
Read(f,x);
Write(x:0:3, ‘ ‘);
…Writeln;
WRITELN(‘Размер файла=’,
FileSize(f));
i:=Random(n);
Seek(f,i);
READ(f,r);
WRITELN(‘Запись номер ‘,
FilePos(f), ‘ содержит ‘,r:0:3);
Close(f);
Работа с бинарными (нетипизированными) файлами
(покажем варианты двух предыдущих программ, но с использованием бинарных типов файлов)
ChatGPT создаст любое приложение за считанные секунды
- Вариант решения программы из примера №8 (укороченный)
В программе использованы новые специальные процедуры для открытия и чтения-записи при работе с бинарными файлами, т.к. чтение/запись выполняется блоками определенного размера:
Reset(VAR f : FILE; RecSize: Word);.
Rewrite(VAR f : FILE; RecSize: Word);.
Параметр RecSize — это длина записи в байтах. Ввод-вывод в бинарный файл можно осуществлять порциями, кратными длине записи. Если при открытии файла задать длину записи в 1 байт, то такой файл сможет содержать любые данные.
BlockRead(VAR f:FILE; VAR Buf; Count:Word);.
BlockWrite(VAR f:FILE; VAR Buf; Count:Word);
Здесь Buf — любая переменная, Count — количество вводимых или выводимых записей
i,n : Byte;
r : Real;
BEGIN
Assign(f,’FILE123′);
Rewrite(f, sizeof(real));
Randomize;
FOR i:=1 TO n DO
BEGIN
r:=Sqrt(i);
BlockWRITE(f,r);
END;
WRITELN(‘Размер файла=’,
FileSize(f));
i:=Random(n);
Seek(f,i);
BlockREAD(f,r);
WRITELN(‘Запись номер ‘,FilePos(f), ‘ содержит ‘,r:0:3);
Close(f);
f1, f2 : file;
X : array[1..64000] of byte;
r : word;
begin
assign (f1, ‘C:boot2.ini’);
reset (f1,1);
assign (f2, ‘C:boot2.bin’);
rewrite (f2,1);
repeat
blockread (f1,X,sizeof(X),r);
blockwrite (f2,X,r);
close (f1); close (f2)
Источник: egeikt.wordpress.com