默认情况下,Names
和Values
必须以=
Windows INI 文件的样式用 , 分隔。AFAICT 无法更改该分隔符。正如@SirRufo 在评论中指出的那样(我从未注意到),您可以使用该TStringList.NameValueSeparator
属性进行更改。
这将使您了解 Delphi 在您的 . 中的想法TStringList
,而不是您的想法:
procedure TForm1.FormCreate(Sender: TObject);
var
SL: TStringList;
Temp: string;
i: Integer;
begin
SL := TStringList.Create;
SL.Delimiter := '|';
SL.QuoteChar := '"';
SL.StrictDelimiter := True;
SL.DelimitedText := 'O=0 | ! .!=!.!';
Temp := 'Count: ' + IntToStr(SL.Count) + #13;
for i := 0 to SL.Count - 1 do
Temp := Temp + Format('Name: %s Value: %s'#13,
[SL.Names[i], SL.ValueFromIndex[i]]);
ShowMessage(Temp);
end;
这会产生以下输出:
TStringList
名称/值可能不会满足您的需要。目前尚不清楚您的实际目标是什么,但似乎具有该文件的简单列表text|replacement
和普通解析的简单文本文件可以工作,并且您可以轻松地用于TStringList
从该文件读取/写入,但我没有看到除了自己做之外,任何可以轻松进行解析的方法。您可以在解析它们时使用数组来存储它们:
type
TReplacePair = record
TextValue: string;
ReplaceValue: string;
end;
TReplacePairs = array of TReplacePair;
function GetReplacementPairs: TReplacePairs;
var
ConfigInfo: TStringList;
i, Split: Integer;
begin
ConfigInfo := TStringList.Create;
try
ConfigInfo.LoadFromFile('ReplacementPairs.txt');
SetLength(Result, ConfigInfo.Count);
for i := 0 to ConfigInfo.Count - 1 do
begin
Split := Pos('|`, ConfigInfo[i];
Result[i].TextValue := Copy(ConfigInfo[i], 1, Split - 1);
Result[i].ReplaceValue := Copy(ConfigInfo[i], Split + 1, MaxInt);
end;
finally
ConfigInfo.Free;
end;
end;
然后,您可以填充编辑/添加/删除替换对所需的任何控件,只需反转读取操作即可将它们写回以保存。