2011-09-01 228 views
3

我该如何解读从磁盘上的文件读取文本文件到内存中的数组?将文本文件读入数组

而且,我发现使用ReadLn只显示第一行(似乎有点明显,因为它是ReadLn,但我怎么会去读取整个文本文件?)

+0

编辑是因为使用“写入”令人困惑,当用户的意思是“读取”时。 –

+0

coder101;请注意,接受的答案是使用名为List的东西,并且这是正确的方法。但是由于你特别使用了“数组”这个词,请注意,数组和列表在Delphi中是不同的(但相似)。 –

+0

可能重复的http://stackoverflow.com/questions/4193483/how-to-save-string-into-text-files-in-delphi(基于接受的答案) –

回答

7
function ReadFile(const FileName: string): string; 
var 
    Strings: TStringList;  
begin 
    Strings := TStringList.Create; 
    try 
    Strings.LoadFromFile(FileName); 
    Result := Strings.Text; 
    finally 
    Strings.Free; 
    end; 
end; 

返回该文件的一个字符串中的内容可以被索引,因此可以被认为是一个数组。

或许你想要一个字符串数组,而不是字符数组,在这种情况下,最简单的方法只是直接使用字符串列表:

var 
    Strings: TStringList;  
... 
    Strings := TStringList.Create; 
    try 
    Strings.LoadFromFile(FileName); 
    //can now access Strings[0], Strings[1], ..., Strings[Strings.Count-1] 
    finally 
    Strings.Free; 
    end; 
+0

谢谢万元:) – coder101

+3

文件不是不过,这真是一个好名字,因为这是Delphi中的一个保留字。

+0

@Rudy呃谢谢,程序也没有返回值! –

7

德尔福 XE开始 2010,您可以使用IOUtils.TFile.ReadAllLines函数用于读取单行代码中的文本文件的内容。

class function ReadAllLines(const Path: string): TStringDynArray; 
class function ReadAllLines(const Path: string; const Encoding: TEncoding): TStringDynArray; overload; static; 
+3

这也出现在D2010中。令人震惊的是,它将文本加载到字符串列表中,但随后使用SetLength(Result,Length(Result + 1))将循环中的动态数组填充! –

+0

@David,听起来类似于.Net中的动态数组。制作一个列表然后转换为数组!我不知道这种方法有什么优势... – Sam

+1

@sam它在这里不是有利的,并且性能差 –