Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв ВУМИП 2012-07-06.doc
Скачиваний:
67
Добавлен:
13.05.2015
Размер:
9.35 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

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