Delphi - база знаний

         

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


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
      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

Взято из

Советов по Delphi от


Сборник Kuliba






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