Как сохранить строку в текстовые файлы в Delphi? - PullRequest
11 голосов
/ 16 ноября 2010

Какой самый простой способ создать и сохранить строку в .txt файлах?

Ответы [ 6 ]

17 голосов
/ 16 ноября 2010

Используйте TStringList.

uses
  Classes, Dialogs; // Classes for TStrings, Dialogs for ShowMessage

var
  Lines: TStrings;
  Line: string;
  FileName: string;
begin
  FileName := 'test.txt';
  Lines := TStringList.Create;
  try
    Lines.Add('First line');
    Lines.Add('Second line');
    Lines.SaveToFile(FileName);
    Lines.LoadFromFile(FileName);
    for Line in Lines do
      ShowMessage(Line);
  finally
    Lines.Free;
  end;
end;

Также SaveToFile и LoadFromFile могут использовать дополнительную кодировку в Delphi 2009 и новее для установки кодировки текста (Ansi, UTF-8, UTF-16, UTF-16 big endian).

5 голосов
/ 24 августа 2011

Модуль IOUtils, представленный в Delphi 2010, предоставляет несколько очень удобных функций для записи / чтения текстовых файлов:

//add the text 'Some text' to the file 'C:\users\documents\test.txt':
TFile.AppendAllText('C:\users\documents\text.txt', 'Some text', TEncoding.ASCII);
5 голосов
/ 16 ноября 2010

На самом деле, я предпочитаю это:

var
  Txt: TextFile;
  SomeFloatNumber: Double;
  SomeStringVariable: string;
  Buffer: Array[1..4096] of byte;
begin
  SomeStringVariable := 'Text';
  AssignFile(Txt, 'Some.txt');
  Rewrite(Txt);
  SetTextBuf(Txt, Buffer, SizeOf(Buffer));
  try
    WriteLn(Txt, 'Hello, World.');
    WriteLn(Txt, SomeStringVariable);
    SomeFloatNumber := 3.1415;
    WriteLn(Txt, SomeFloatNumber:0:2); // Will save 3.14
  finally CloseFile(Txt);
  end;
end;

Я считаю, что это самый простой способ, так как вам не нужны классы или другие модули для этого кода. И это работает для всех версий Delphi, в том числе, если я не ошибаюсь, для всех версий Delphi .NET ...


В этот пример я добавил вызов SetTextBuf (), что является хорошим приемом для значительного ускорения работы с текстовыми файлами в Delphi. Обычно текстовые файлы имеют буфер всего 128 байтов. Я склонен увеличивать этот буфер до кратных 4096 байт. В некоторых случаях я также реализовал свои собственные типы TextFile, что позволило мне использовать эти «консольные» функции для записи текста в заметки или даже в другое внешнее приложение! В это расположение - это некоторый пример кода (ZIP), который я написал в 2000 году и просто изменил, чтобы убедиться, что он компилируется с Delphi 2007. Хотя не уверен насчет новых версий Delphi. Опять же, этому коду уже 10 лет.
Эти консольные функции были стандартом языка Pascal с самого начала, поэтому я не ожидаю, что они исчезнут в ближайшее время. Однако тип TtextRec может быть изменен в будущем, поэтому я не могу предсказать, будет ли этот код работать в будущем ... Некоторые пояснения:

  • WA_TextCustomEdit.AssignCustomEdit позволяет записывать текст в объекты на основе CustomEdit, такие как TMemo.
  • WA_TextDevice.TWATextDevice - это класс, который можно отбрасывать в форме, который содержит события, в которых вы можете что-то сделать с записанными данными.
  • WA_TextLog.AssignLog используется мной для добавления меток времени к каждой строке текста.
  • WA_TextNull.AssignNull - это в основном фиктивное текстовое устройство. Он просто отбрасывает все, что вы ему пишете.
  • WA_TextStream.AssignStream записывает текст в любой объект TStream, включая потоки памяти, потоки файлов, потоки TCP / IP и все, что у вас есть.

Код в ссылке настоящим лицензируется как CC-BY alt text


О, сервер с ZIP-файлом не очень мощный, поэтому он обычно отключается несколько раз каждый день. Извините за это.

4 голосов
/ 16 ноября 2010

Или, если вы используете более старую версию Delphi (в которой нет метода for line in lines итерации списка строк):

var i : integer;
begin

...
try
    Lines.Add('First line');
    Lines.Add('Second line');
    Lines.SaveToFile(FileName);
    Lines.LoadFromFile(FileName);
    for i := 0 to Lines.Count -1 do
      ShowMessage(Lines[i]);
  finally
    Lines.Free;
  end;
1 голос
/ 04 сентября 2011
procedure String2File;
var s:ansiString;
begin
    s:='My String';
    with TFileStream.create('c:\myfile.txt',fmCreate) do
    try
      writeBuffer(s[1],length(s));
    finally
      free;
    end;
end;

Необходима осторожность при использовании Unicode-строк ....

1 голос
/ 16 ноября 2010

Если вы используете версию Delphi> = 2009, взгляните на класс TStreamWriter.

Он также позаботится о кодировках текстовых файлов и символах новой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...