4

我有一个字符串列表以及它们要替换的值。我正在尝试将它们组合在一个列表中,'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]);

这行得通,但对视觉效果不好,因为我不能' .'像这样(对于 SPACE 字符非常直观)编码之前的字符串(对于 ex ),只能像 ( " .) 这样=分配名称和值的工作在 TStringList 中。

4

1 回答 1

5

默认情况下,NamesValues必须以=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;

这会产生以下输出:

上述代码的示例 ShowMessage 输出

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;

然后,您可以填充编辑/添加/删除替换对所需的任何控件,只需反转读取操作即可将它们写回以保存。

于 2013-06-04T02:36:10.017 回答