{codecitation class="brush: pascal; gutter: false;" width="600px"}

Автор: OAmiry (Borland)

В том случае, когда вы собираетесь использовать содержимое текстового файла таким образом, как будто он имеет поля, вам необходим файл схемы, содержащий описание формата текстового файла и который необходим для осуществления вызовов при работе с полями (Fields / FieldByName / Post / и др.). Ниже приводится код, который вы можете использовать при создании своей программы:

{ Подразумеваем, что Table1 — файл, который мы хотим скопировать

в ASCII-файл. Используем TBatchMove, поскольку быстро работает.

Также это автоматически создаст файл схемы }

procedure TForm1.Button1Click (Sender: TObject);

var

oDest: TTable;

oBMove: TBatchMove;

begin

try

oDest:= nil;

oBMove:= nil;

Table1.Close;

oDest:= TTable.Create (nil);

with oDest do

begin

DatabaseName:= 'c:\delphi\files';

TableName:= 'Test.Txt';

TableType:= ttASCII;

end; {Обратите внимание на то, что нет необходимости вызывать CreateTable}

oBMove:= TBatchMove.Create (nil);

with oBMove do

begin

Source:= Table1;

Destination:= oDest;

Mode:= batCopy;

Execute;

end;

finally

if Assigned (oDest) then

oDest.Free;

if Assigned (oBMove) then

oBMove.Free;

end;

end;

{ Теперь, допустим, файл схемы существует;

сам текстовый файл может как быть, так его может и не быть.

С помощью файла схемы мы уже можем работать с полями }

procedure TForm1.Button2Click (Sender: TObject);

var

oTxt: TTable;

i: Integer;

f: System.Text;

begin

try

oTxt:= nil;

if not FileExists ('c:\delphi\files\Test.Txt') then

begin

AssignFile (f, 'c:\delphi\files\Test.Txt');

Rewrite (f);

CloseFile (f);

end;

oTxt:= TTable.Create (nil);

with oTxt do

begin

DatabaseName:= 'c:\delphi\files';

TableName:= 'Test.Txt';

TableType:= ttASCII;

Open;

end;

with Table1 do

begin

DisableControls;

if not Active then

Open;

First;

while not EOF do

begin

oTxt.Insert;

{ В данном случае файл схемы описывает формат текстового файла; в этом

примере фактически один к одному воспроизводятся поля таблицы

в логическое определение полей в.sch-файле }

for i:= 0 to FieldCount — 1 do

oTxt.Fields[i].AsString:= Fields[i].AsString;

oTxt.Post;

Next;

end;

end;

finally

Table1.EnableControls;

if Assigned (oTxt) then

oTxt.Free;

end;

end;

{/codecitation}