Советы по Delphi

       

ASCII-файл с использованием полей


В том случае, когда вы собираетесь использовать содержимое текстового файла таким образом, как будто он имеет поля, вам необходим файл схемы, содержащий описание формата текстового файла и который необходим для осуществления вызовов при работе с полями (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 beginDatabaseName := 'c:\delphi\files' ;TableName := 'Test.Txt' ;TableType := ttASCII ;end ; {Обратите внимание на то, что нет необходимости вызывать CreateTable}
oBMove := TBatchMove.Create(nil) ;with oBMove do beginSource := Table1 ;Destination := oDest ;Mode := batCopy ;Execute ;end ;finallyif 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 beginAssignFile(f, 'c:\delphi\files\Test.Txt' ) ;Rewrite(f) ;CloseFile(f) ;end ;
oTxt := TTable.Create(nil) ;with oTxt do beginDatabaseName := 'c:\delphi\files' ;TableName := 'Test.Txt' ;TableType := ttASCII ;Open ;end ;
with Table1 do beginDisableControls ;if not Active then Open ;First ;while not EOF do beginoTxt.Insert ;{ В данном случае файл схемы описывает формат текстового файла; в этомпримере фактически один к одному воспроизводятся поля таблицыв логическое определение полей в .sch-файле }for i := 0 to FieldCount - 1 dooTxt.Fields[i].AsString := Fields[i].AsString ;oTxt.Post ;Next ;end ;end ;finallyTable1.EnableControls ;if Assigned(oTxt) then oTxt.Free ;end ;
end;

OAmiry/Borland [000551]



Содержание раздела