Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Высокоуровневые методы информатики и программир...docx
Скачиваний:
25
Добавлен:
12.11.2019
Размер:
6.53 Mб
Скачать

1.8.2.4. Печать текста

Для вывода текстовой информации можно использовать стандарт­ную процедуру AssignPrn (модуль Printers) (п. 1.8.2.3), которая связывает файловую переменную типа TextFile с текущим принтером.

Пример вывода на печать текста “Иванов”:

Procedure TForm1.Button1Click(Sender: TObject); Var Print: TextFile;

Begin AssignPrn(Print); Rewrite(Print); Writeln(Print,'Иванов');

System.CloseFile(Print); End;

1.8.2.5. Нетипизированные файлы

Нетипизированные файлы представляют собой непрерывную после­довательность байтов. Данные записываются и считываются побайтно.

Объявление файловой переменой

Type <имя типа>=File;

Var <идентификатор>:<имя типа>; //ссылка на файловый тип или

Var <идентификатор>: File; //без ссылки на файловый тип

Открытие и закрытие файла производится аналогично типизи­ро­ван­но­му файлу. Но в процедурах Reset и Rewrite (п.1.8.2.1) вторым пара­мет­ром типа можно указать длину записей в байтах (128). Вместо процедур Read и Write используются процедуры:

BlockRead(F;var Buf;N:Integer[;var R:Integer])читает N записей из файла F в переменную B. Истинное количество считанных записей в R.

BlockWrite(F;var Buf;N:Integer[;var R:Integer])выводит N записей из переменной B в файл F. Истинное количество выведенных записей в R.

Seek(F;N:Longint) ‑ устанавливает текущую позицию на байт под номером N (отсчет с нуля).

Пример копирования файла (имена файлов в командной строке):

Var FromF, ToF: File; NumRead, NumWritten: Word;

Buf: Array[1..2048] of Char;

Begin AssignFile(FromF,ParamStr(1));Reset(FromF,1); //открытие файлов

Assign(ToF, ParamStr(2)); Rewrite(ToF,1); //длина записи=1 байт repeat BlockRead(FromF, Buf, SizeOf(Buf), NumRead); //ввод блока

BlockWrite(ToF, Buf, NumRead, NumWritten); //вывод блока

until(NumRead=0)Or(NumWritten<>NumRead); //условие выхода из цикла

CloseFile(FromF);CloseFile(ToF); End.//закрытие файлов и конец процедуры

1.8.3. Объектный подход к файлам

Базовый объект TStream (поток) позволяет абстрагироваться от поня­тия “файл” и его носителя. Файл представляет собой непрерывный поток символов без всякой заранее определенной структуры. Рассмотрим работу объекта TFileStream одного из потомков объекта TStream, предназна­чен­ного для работы с файлами на жестком диске.

Для работы с этим объектом используются следующие методы.

Create(S;M:Word) ‑ создание файла под именем S в режиме M: fmCreate (создание нового файла), fmOpenRead (для чтения), fmOpenWrite (для записи), fmOpenReadWrite (для чтения и записи).

Free ‑ закрытие файла.

Read(Var B;N:LongInt):LongInt‑ чтение в переменную B очередных N бай­­тов, начиная с текущей позиции. Возвращается число прочитанных байтов.

Write(B;N:LongInt):LongInt ‑ запись из переменной B в файл N байтов, на­чи­ная с текущей позиции. Возвращается число выведенных байтов.

Seek(N:LongInt;O:Word):LongInt ‑ установка текущей позиции в файле пу­тем смещения на N байтов (отсчет с нуля) относительно O: soFrom­Be­gin­ning (от начала файла), soFromCurrent (от текущей позиции файла), soFromEnd (от конца файла и N<=0).

SetSize(N:LongInt) ‑ установка нового размера файла, равного N байтам.

CopyFrom(S:TStream;N:LongInt):LongInt ‑ копирование первых N байтов файла ‑ объекта S в текущий файл ‑ объект. Возвращается число фактичес­ки скопированных байтов.

В распоряжении имеются два свойства объекта: Size (размер файла), Position (текущая позиция файла от его начала).

Пример формирования и чтения файла “d:\prim.dat”:

Procedure TForm1.Button1Click(Sender: TObject); //обработка кнопки

Var S:TFileStream; B:Array [1..3] Of Char; //переменные

Begin Try S:=TFileStream.Create('d:\prim.dat',fmCreate); //открытие файла

S.Write('0123456789',10); //вывод в файл текста “0123456789”

S.Free; {закрытие файла} S:=TFileStream.Create('d:\prim.dat',fmOpenRead);

S.Seek(5,soFromBeginning); //установка текущей позиции на пятый байт

S.Read(B,3); Label1.Caption:= Copy(Z,1,3); //вывод из файла цифр 5,6,7

Finally S.Free; {закрытие файла в любом случае} End; End;