gpt4 book ai didi

delphi - 带有分隔符的字符串列表?

转载 作者:行者123 更新时间:2023-12-03 18:17:11 27 4
gpt4 key购买 nike

我在存储为字符串的对象中有一个名为 HistoryText 的属性。我想在网格中显示所有行。我应该能够删除和编辑网格中的行。格式为:

16.5.2003-$-12:09-$-anna-$-Organization created
2.6.2005-$-13:03-$-jimmy-$-Organization edited
19.12.2005-$-13:33-$-madeleine-$-Organization edited

所以每行有 4 个字段,日期、时间、用户和消息,分隔符字符串为“-$-”。作为分隔符是字符串而不是字符,它不能分配给 stringlists delimiter 属性。

我有一个将字符串提取到 Stringlist 的例程:

procedure ParseDelimited(const aStringList: TStringList; const aOrgList, aDelimiter: string);
var
vDelimiterPos : integer;
vPartialStr : string;
vRemaingTxt : string;
vDelimiterLength : integer;
begin
vDelimiterLength := Length(aDelimiter);

if (AnsiRightStr(aOrgList, Length(aDelimiter)) = aDelimiter) then
vRemaingTxt := aOrgList
else
vRemaingTxt := aOrgList + aDelimiter;

aStringList.BeginUpdate;
aStringList.Clear;
try
while Length(vRemaingTxt) > 0 do
begin
vDelimiterPos := Pos(aDelimiter, vRemaingTxt);
vPartialStr := Copy(vRemaingTxt,0,vDelimiterPos-1);
aStringList.Add(vPartialStr);
vRemaingTxt := Copy(vRemaingTxt,vDelimiterPos+vDelimiterLength,MaxInt);
end;
finally
aStringList.EndUpdate;
end;
end;

它似乎工作正常。我的问题是将 StringList 中的更改同步回原始 String 属性?这个分隔符有很多历史数据,所以我认为将其更改为 TChar 不是一个现实的选择。

更新:一个澄清。我想我可以设法使用上面的方法将 String 转换为 StringList 。然后在网格中显示它应该不会那么难。当我想将 TStringList 转换回原始的 String 属性时,问题就出现了,以 '-$-' 作为分隔符。例如,我不能做 HistoryText := myStringList.Delimitedtext。

第二次更新:我已经解决了。你们都得到了 +1 的快速答案,并且真的很想提供帮助。总结一下我是怎么做到的。

从历史文本中读取:

MyStringList.Text := Historytext;

现在每行都有 3 个 '-$-' 分隔符,并且每行像往常一样由换行符分隔。

  • 在循环中解析字符串列表并将其显示在网格中。我不再为 MyStringList 烦恼了。
  • 让用户删除和编辑网格中的行。
  • 完成后在网格中逐行逐列循环并构建一个与原始格式相同的新字符串。
  • 将该字符串分配给 HistoryText。

所以将焦点从 StringList 转移到网格上会更容易:)

最佳答案

除了 Delimiter(一个字符)和 DelimitedText,您还可以使用 LineBreak(一个字符串)和 Text:

lst := TStringList.Create;
try
lst.LineBreak := '-$-';
lst.Text := '16.5.2003-$-12:09-$-anna-$-Organization created';
Memo1.Lines := lst; // or whatever you do with it
finally
lst.Free;
end;

Ans 它甚至可以反过来工作。

关于delphi - 带有分隔符的字符串列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3297987/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com