加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在字符串中存储和加载键值对列表?

发布时间:2020-12-15 09:18:36 所属栏目:大数据 来源:网络整理
导读:我有一个字符串列表和它们要替换的值.我正在尝试将它们组合在一个列表中,例如’O’=’0′,’.’=’.’,…所以我很容易编辑它并添加更多对替换. 现在我能想到的最好方法是: var ListaLimpeza : TStringList;begin ListaLimpeza := TStringList.Create; Lista
我有一个字符串列表和它们要替换的值.我正在尝试将它们组合在一个列表中,例如’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]);

这是有效的,但它对于视觉效果并不好,因为我无法对前面的字符串(对于ex’.’)进行编码(这对于SPACE字符来说非常直观),只有像(“.)这样才能使=在TStringList中分配名称和值.

解决方法

默认情况下,名称和值必须以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名称/值可能无法满足您的需求.目前尚不清楚你的实际目标是什么,但看起来一个简单的文本文件包含一个简单的文本列表|替换和该文件的普通解析都可以工作,你可以轻松地使用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;

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读