在.txt
文件中创建和保存字符串的最简单方法是什么?
答案 0 :(得分:17)
使用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大端)。
答案 1 :(得分:5)
实际上,我更喜欢这个:
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字节的倍数。在某些情况下,I'va还实现了我自己的TextFile类型,允许我使用这些“控制台”功能将文本写入备忘录字段,甚至是另一个外部应用程序!在this location是我在2000年编写的一些示例代码(ZIP),并且只是进行了修改以确保它与Delphi 2007一起编译。但是不确定是否有更新的Delphi版本。再说一遍,这段代码已经有10年的历史了。
这些控制台功能一直是Pascal语言的标准,因为它开始了所以我不希望它们很快消失。但是,TtextRec类型将来可能会被修改,因此我无法预测此代码将来是否会起作用...有些解释:
链接中的代码特此授权为CC-BY
哦,带有ZIP文件的服务器功能不是很强大,所以每天往往会丢失几次。对不起。
答案 2 :(得分:5)
Delphi 2010中引入的IOUtils单元为写入/读取文本文件提供了一些非常方便的功能:
//add the text 'Some text' to the file 'C:\users\documents\test.txt':
TFile.AppendAllText('C:\users\documents\text.txt', 'Some text', TEncoding.ASCII);
答案 3 :(得分:4)
或者,如果您使用的是较旧版本的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 :(得分:1)
如果您使用的是Delphi版本> = 2009,请查看TStreamWriter
课程。
它还会处理文本文件编码和换行符。
答案 5 :(得分:1)
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字符串时需要小心....