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

Previous  Top  Next

    
 

 

 

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

Code:

{ Подразумеваем, что 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;

 

 

 

 

OAmiry/Borland

©Drkb::02964

Взято из Советов по Delphi от Валентина Озерова

Сборник Kuliba