如何在TStringList中获取最后一个字符串

时间:2014-09-23 20:00:19

标签: string delphi tstringlist

我一直在寻找如何做到这一点的日子,没有什么是我需要做的(或者我不理解如何实施解决方案)。

我需要做的是将一个字符串(街道地址)解析为TStringList,然后将这些字符串从列表中设置为变量,然后传递给程序的其余部分。我已经将列表运行正常了:

var
AddressList : TStringList;
i : integer;

begin
AddressList := TStringList.Create;
AddressList.Delimiter := ' ';
AddressList.DelimitedText := RawAddressStr; //RawAddressStr is parsed from another file and the string result is something like '1234 Dark Souls Lane Wyoming, MI 48419'

for i := 0 to AddressList.Count-1 do
   AddressList.Strings[i]; //Not sure what to do here

问题是地址长度不一样。这个地址有时候会像1234 Dark Souls Two Lane Wyoming ......'或者' 1234 Dark Lane Wyoming ......'

所以我需要能够使用这个TStringList将Zip,State和City设置为变量供以后使用。我会使用TStringList.Find,但邮政编码并不总是相同。有没有办法获得最后一个字符串,然后从那里后退? (向后移动,因为一旦我获得City,状态ZIP我可以从RawAddressStr中删除它,然后将其余部分设置为地址字符串。)

感谢。

编辑,这是我需要的代码(感谢以下评论):     AddressList:= TStringList.Create;

AddressList.Delimiter := ' ';
AddressList.DelimitedText := RawAddressStr;

for i := 0 to AddressList.Count-1 do
  LastIndex := AddressList.Count - 1;
  ZipStr := AddressList[LastIndex];
  StateStr := AddressList[LastIndex - 1];
  CityStr := AddressList[LastIndex - 2];

现在我可以使用StringReplace从完整地址字符串中取出City,State Zip,并将其设置为要使用的地址字符串。

1 个答案:

答案 0 :(得分:11)

我有点不确定你问的确切是什么 如何获取StringList的最后一个字符串, 然后在你问的问题的最后

  

有没有办法获取最后一个字符串,然后从后退   有?

如果要获取StringList的最后一个字符串,可以使用

  var AddressList : TStringList;
      MyString: string;
begin
  MyString := AddressList.Last; //this...
  MyString := AddressList.Strings[AddressList.Count-1]; //...and this is essentially the same thing
end;

如果你想反向或反向循环,你应该写:

for i := AddressList.Count-1 downto 0 do
  AddressList.Strings[i]; //Not sure what to do here

请注意,它表示“DOWNTO”而不是“TO”。

现在,如果你想停在一个特定的字符串,让我们说邮政编码, 你需要让你的软件理解它正在读什么。

哪个分隔字符串是城市? 哪一个是地址? 对于软件,字符串是一个字符串,它不知道,甚至不关心它正在读什么。

所以我想建议您有一个可以比较字符串的城市数据库 地址列表t,o,并查看是否匹配。

您还可以在算法中实现一些逻辑。 如果您知道分隔的AdressList字符串的最后一个字符串始终是City-name, 然后你就知道你有城市名称,你可以使用它。

如果您知道邮政编码和城市名称之间的所有内容都是街道地址, 然后只需复制ZIP和City-name之间的所有内容,并将其用作街道名称信息。