Rol*_*son 2 delphi tstringlist delphi-2007
我在一个存储为字符串的对象中有一个名为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
Run Code Online (Sandbox Code Playgroud)
因此每行有4个字段,日期,时间,用户和消息,分隔符字符串为' - $ - '.由于分隔符是字符串而不是char,因此无法将其分配给stringlists定界符属性.
我有一个例程将字符串提取到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;
Run Code Online (Sandbox Code Playgroud)
它似乎工作正常.我的问题是将StringList中的更改同步回原始的String属性?这个分隔符有很多历史数据,所以我认为将它改为TChar是一个现实的选择.
更新: 澄清.我想我可以设法使用上面的方法将String转换为StringList.然后在网格中显示它应该不那么难.当我想将TStringList转换回原始的String属性wih' - $ - '作为分隔符时,问题就来了.我不能做HistoryText:= myStringList.Delimitedtext例如.
第二次更新: 我已经解决了.你们都获得了+1的快速答案并且真的想要帮助.总结我是如何做到的.
从Historytext中读取:
MyStringList.Text := Historytext;
Run Code Online (Sandbox Code Playgroud)
现在每行有3个' - $ - '分隔符,每行都像往常一样用换行符分隔.
因此将焦点从StringList转移到网格变得更容易:)
您可以使用LineBreak(字符串)和Text:而不是Delimiter(char)和DelimitedText.
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;
Run Code Online (Sandbox Code Playgroud)
Ans它的工作方式甚至相反.