2011-09-01 125 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它在這裏不是有利的,並且性能差 –