Каков самый простой способ создать и сохранить строку в файлах .txt
?
Как сохранить строку в текстовых файлах в Delphi?
Ответ 1
Используйте 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).
Ответ 2
Собственно, я предпочитаю это:
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, в том числе - если я не ошибаюсь - все версии .NET Delphi...
Я добавил вызов SetTextBuf() в этот пример, что является хорошим трюком для ускорения текстовых файлов в Delphi. Обычно текстовые файлы имеют буфер всего 128 байт. Я стараюсь увеличить этот буфер до кратного 4096 байт. В нескольких случаях я также реализовал свои собственные типы TextFile, позволяя мне использовать эти "консольные" функции для ввода текста в поля memo или даже в другое внешнее приложение! На это место - это пример кода (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
О, сервер с ZIP файлом не очень мощный, поэтому он имеет тенденцию к снижению несколько раз в день. Извините.
Ответ 3
Или, если вы используете более старую версию 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;
Ответ 4
Модуль 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
Если вы используете версию Delphi >= 2009, взгляните на класс TStreamWriter
.
Он также будет следить за кодированием текстовых файлов и символами новой строки.
Ответ 6
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;
Уход, необходимый при использовании строк в Юникоде....