S F*_*S F 4 delphi string tstringlist
我有一个字符串列表和它们要替换的值.我正在尝试将它们组合在一个列表中,'O'='0',' .'='.', ...因此我很容易编辑它并添加更多对替换.
现在我能想到的最好方法是:
var
ListaLimpeza : TStringList;
begin
ListaLimpeza := TStringList.Create;
ListaLimpeza.Delimiter := '|';
ListaLimpeza.QuoteChar := '"';
ListaLimpeza.DelimitedText := 'O=0 | " .=."';
ShowMessage('1o Valor = '+ListaLimpeza.Names[1]+' e 2o Valor = '+ListaLimpeza.ValueFromIndex[1]);
Run Code Online (Sandbox Code Playgroud)
这是有效的,但它对于视觉效果并不好,因为我不能像之前的那样对字符串(对于ex ' .')进行编码(对于SPACE字符来说是非常直观的),只有像(" .)这样=才能分配名称和值在TStringList中.
该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;
Run Code Online (Sandbox Code Playgroud)
这会产生以下输出:

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;
Run Code Online (Sandbox Code Playgroud)
然后,您可以填充编辑/添加/删除替换对所需的任何控件,然后反转读取操作以将其写回以进行保存.