几天来,我一直在寻找如何做到这一点,没有什么是我需要做的(或者我只是不知道如何实现这个解决方案)。
我需要做的是将一个字符串(这是一个街道地址)解析到一个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黑暗灵魂二里怀俄明州.‘或者“1234号怀俄明州黑暗巷”
因此,我需要能够使用这个TStringList将Zip、State和City设置为变量,供以后使用。我会使用TStringList.Find,但邮政编码并不总是相同的。有什么方法可以得到最后一根线然后从那里向后走吗?(向后退,因为一旦获得城市,状态ZIP,我就可以从RawAddressStr中删除它,然后将其余部分设置为address字符串。)
谢谢。
编辑,这是我需要的代码(感谢下面的评论):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,并将其设置为要使用的地址字符串。
发布于 2014-09-23 20:18:50
我有点不确定你到底在找什么,因为你问的是如何得到你的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-循环,则应编写:
for i := AddressList.Count-1 downto 0 do
AddressList.Strings[i]; //Not sure what to do here注意,它写的是"DOWNTO“而不是"TO”。
现在,如果您想停在一个特定的字符串上,比如ZIP代码,您需要让您的软件理解它正在读取的内容。
哪个分隔字符串是City?地址是哪一个?对于软件来说,字符串就是一个字符串,它不知道,甚至不关心它正在读什么。
因此,我想建议您有一个城市数据库,它可以比较AddressList t的字符串,o,看看是否匹配。
您还可以在算法中实现一些逻辑。如果您知道分隔的AdressList字符串的最后一个字符串始终是city名称,那么您就知道可以使用这个城市名称了。
如果您知道邮政编码和城市名称之间的所有内容都是街道地址,那么只需复制ZIP和城市名称之间的所有内容,并将其用作街道名称信息。
https://stackoverflow.com/questions/26003734
复制相似问题