2012-12-21 32 views

回答

1

如果你只有一到一個鍵值關係(不喜歡的三個關鍵詞「蘋果」和「蘋果」和「McIntoshes」就會變成「麥金託什」) - 然後可能是simpliest方式是使用的TStringList,提供

  1. ü做完全的Key=Value線,不Key,Value
  2. ü您的文件要麼需要區分大小寫或做大寫在文件。

然後u使用http://docwiki.embarcadero.com/Libraries/XE3/en/System.Classes.TStrings.Values

爲了加快速度一點,你可以使用THashedStringList IniFiles單位。 JCLXML單元中的JCL也有類似的地方。

+0

這也是一種非常棒的方法,但我將擁有一個以上的值。感謝您的建議! – user1817376

+2

@ user1817376如果這是'真棒',但沒有回答你的問題,你爲什麼接受它?恕我直言大衛的答案適合完善你的問題,應該被接受。 BTW與TStringList,你可以有許多與TDictionary相同的值的鍵。只有鑰匙必須是唯一的 –

+1

我同意@SirRufo對此。當答案很棒時 - 通過提升它來承認。但是,答案是否正確 - 這是一個單獨的問題。我相信 - 如果回答不符合,你最好做1:通過明確地拼寫要求來解決你的問題,這會讓我的答案不正確; 2:接受真正適用於你的情況的答案。 –

4

從您的評論看來,您似乎想知道如何將一些鍵值對逗號分隔成字典。這裏有一個簡單的例子:

procedure PopulateKeyValueDict(Strings: TStrings; 
    Dict: TDictionary<string, string>); 
var 
    CommaPos: Integer; 
    Line: string; 
    Key, Value: string; 
begin 
    for Line in Strings do 
    begin 
    CommaPos := Pos(',', Line); 
    if CommaPos=0 then 
     raise Exception.CreateFmt(
     'Could find comma separated key/value pair in ''%s''', 
     [Line] 
    ); 
    Key := Copy(Line, 1, CommaPos-1); 
    Value := Copy(Line, CommaPos+1, MaxInt); 
    Dict.Add(Key, Value); 
    end; 
end; 

您可能會想添加更多的錯誤檢查等,但我假設你已經知道該怎麼做。這個例子說明了在第一個逗號分隔一行,以及如何填充字典。

爲了使用它,您需要將您的文件傳輸到TStrings對象。這是例行:

var 
    Strings: TStringList; 
.... 
Strings := TStringList.Create; 
try 
    Strings.LoadFromFile(FileName); 
    PopulateKeyValueDict(Strings, Dict); 
finally 
    Strings.Free; 
end; 
+0

如何將其用於文本替換? – user1817376

+1

它的意思是這裏一次只有一個問題。但是你需要遍歷字典和每對,做你的字符串替換。你可以使用'StringReplace'函數。 –

+0

哦......謝謝!我去了你的網站,我很驚訝! – user1817376