从StringList中的值获取id

时间:2018-05-23 06:32:59

标签: delphi

我有一个包含2行的StringList

aOldPriceTerms[0] = 'FuelAddition=336643160'
aOldPriceTerms[1] = 'Freight=336643155'

所以它可以正常使用

aOldPriceTerms.Values ['运费'] - > ' 336643155'

我想从列表中找到ID列表。

如此简单

'FuelAddition','Freight'

目前我使用此代码,其中aOldPriceTerms是实际的StringList。

function GetList(aOldPriceTerms: TStringList): String;
var
  vOldTerm : string;
  vOldTermsList : TStringList;
begin
  vOldTermsList := TStringList.Create;
  try
    for i := aOldPriceTerms.Count - 1 downto 0 do
    begin
      vOldTerm := Copy(aOldPriceTerms[i], 1, (Pos('=', aOldPriceTerms[i])-1));
      vOldTermsList.Add(vOldTerm);
    end;

    Result := vOldTermsList.CommaText;
  finally
    FreeAndNil(vOldTermsList);
  end;
end;

我的问题是有更清洁的方法来获取ID吗?

3 个答案:

答案 0 :(得分:7)

示例来自Delphi Basics,但Delphi documentation

中也描述了TStringList.Names
  // Now display all name and age pair values
  for i := 0 to names.Count-1 do
  begin
    ShowMessage(names.Names[i]+' is '+names.ValueFromIndex[i]);
  end;

答案 1 :(得分:1)

您可以使用来自alcinoe(https://github.com/Zeus64/alcinoe)的TALNVStringList(NV为nameValue)来处理名称和值,而无需一直分割字符串

TALNVStringListTStringList完全相同(除了TstringList替换TALNVStringList之外,代码中没有任何更改),除了它在速度方面效率更高因为它将名称存储在一个专用字段中,而值存储在另一个专用字段中(无需一直执行pos('=')copy()来检索名称和行的值)

  for i := 0 to aOldPriceTerms.Count-1 do
  begin
    ShowMessage(aOldPriceTerms.Names[i]+' is '+aOldPriceTerms.ValueFromIndex[i]);
  end;

Exe演示显示经典TstringList的速度惩罚:https://svn.code.sf.net/p/alcinoe/code/demos/ALSortedListBenchmark/win32/ALSortedListBenchmark.exe

答案 2 :(得分:-2)

获取所有ID

for name in names.Names do
begin
  i := names.IndexOf[name];
end;

获取所有值

for name in vOldTermsList.Names do
begin
   Value := vOldTermsList.Value[name];
end;