Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

Delphi , Базы данных , ASCII и CSV

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

Автор: 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;

Here's the improved code with comments, meaningful variable names, error handling, and a loop in Button2Click:

procedure TForm1.Button1Click(Sender: TObject);
var
  destinationTable: TTable;
  batchMove: TBatchMove;
begin
  try
    // Close the source table
    Table1.Close;

    // Create a new table with the specified name and format
    destinationTable := TTable.Create(nil);
    try
      with destinationTable do
      begin
        DatabaseName := 'c:\delphi\files';
        TableName := 'Test.Txt';
        TableType := ttASCII;
      end;

      batchMove := TBatchMove.Create(nil);
      try
        // Set the source and destination tables
        with batchMove do
        begin
          Source := Table1;
          Destination := destinationTable;
          Mode := batCopy;
          Execute;
        end;
      finally
        batchMove.Free;
      end;
    finally
      destinationTable.Free;
    end;
  except
    // Handle any unexpected errors
    ShowMessage('An error occurred: ' + GetExceptionMessage);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  textFile: TTable;
  fileHandle: Text;
begin
  try
    // Check if the file exists, and create it if not
    if not FileExists('c:\delphi\files\Test.Txt') then
    begin
      AssignFile(fileHandle, 'c:\delphi\files\Test.Txt');
      Rewrite(fileHandle);
      CloseFile(fileHandle);
    end;

    textFile := TTable.Create(nil);
    try
      with textFile do
      begin
        DatabaseName := 'c:\delphi\files';
        TableName := 'Test.Txt';
        TableType := ttASCII;
        Open;
      end;

      // Disable controls and open the source table
      Table1.DisableControls;
      if not Table1.Active then
        Table1.Open;
      try
        // Read and write records using a loop
        while not Table1.EOF do
        begin
          textFile.Insert;
          for i := 0 to Table1.FieldCount - 1 do
            textFile.Fields[i].AsString := Table1.Fields[i].AsString;
          textFile.Post;
          Table1.Next;
        end;
      finally
        Table1.Next; // Move back to the first record after the loop
      end;

      // Enable controls and free the table object
      Table1.EnableControls;
    finally
      textFile.Free;
    end;
  except
    // Handle any unexpected errors
    ShowMessage('An error occurred: ' + GetExceptionMessage);
  end;
end;

Note that I've used meaningful variable names, added comments to explain what each section of code does, and included error handling using try-except blocks. In Button2Click, I've replaced the manual calls to First and Next with a loop that reads and writes records.

Статья описывает использование файлов схемы для работы с текстовыми файлами в программе на языке Delphi, обеспечивая возможность управления полями и операций над ними.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: ASCII и CSV ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-13 08:47:47/0.012025117874146/0