http://hi.baidu.com/ma_wei/blog/item/173b9967d5ed7f29aa184cb4.html
http://hi.baidu.com/hack0573/blog/item/eb3b3aee067086feb2fb95b4.html
http://hi.baidu.com/%D1%FD%D1%DE%B5%C4%B4%FA%C2%EB/blog/item/bff05533b271a315ebc4af02.html
2010-07-08 09:09
//TStringList 常用方法与属性: var List: TStringList; i: Integer; begin List := TStringList.Create; List.Add('Strings1'); {添加} List.Add('Strings2'); List.Exchange(0,1); {置换} List.Insert(0,'Strings3'); {插入} i := List.IndexOf('Strings1'); {第一次出现的位置} List.Sort; {排序} List.Sorted := True; {指定排序} List.Count; {总数} List.Text; {文本集合} List.Delete(0); {删除, 0是第一个数据} List.LoadFromFile('c:/tmp.txt');{打开} List.SaveToFile('c:/tmp.txt'); {保存} List.Clear; {清空} List.Free; {释放} end;
TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的。
常规的用法大家都知道,现在来讨论它的一些高级的用法。
先把要讨论的几个属性列出来:
1、CommaText
2、Delimiter & DelimitedText
3、Names & Values & ValueFromIndex
先看第一个:CommaText。怎么用呢?用代码说话: const constr :String = 'aaa,bbb,ccc,ddd'; var strs :TStrings; i :Integer; begin strs := TStringList.Create; strs.CommaText := constr; for i := 0 to Strs.Count-1 do ShowMessage(Strs[i]); end; 执行了这段代码后,可以看到ShowMessage显示出来的分别是:aaa bbb ccc ddd。 也就是说,strs.CommaText := constr这一句的作用,就是把一个字符串以','为分割符,分段添加到TStrings中。 那么如果不是以','来分割,又该怎么做呢?现在看第二个例子。使用Delimiter和DelimitedText。 const constr :String = 'aaa/bbb/ccc/ddd'; var strs :TStrings; i :Integer; begin strs := TStringList.Create; strs.Delimiter := '/'; strs.DelimitedText := constr; for i := 0 to Strs.Count-1 do ShowMessage(Strs[i]); end; 可以看到, 显示的效果和第一个例子是一模一样的。解释一下: Delimiter为分隔符,默认为:','。DelimitedText就是按Delimiter为分隔符的一个串,得到赋值后回把这个字符串按Delimiter的字符添加到TStrings中。 说到这里,有想起一个属性,QuoteChar。其默认值为:'"'(不包括单引号) 有何用呢?看例子: const constr :String = '"aaa"/"bbb"/"ccc"/"ddd"'; var strs :TStrings; i :Integer; begin strs := TStringList.Create; strs.Delimiter := '/'; strs.DelimitedText := constr; for i := 0 to Strs.Count-1 do ShowMessage(Strs[i]); end; 显示出来的仍然是aaa bbb ccc ddd。为什么不是:"aaa" "bbb" "ccc" "ddd"呢? 再来看一个例子: const constr :String = '|aaa|/|bbb|/|ccc|/|ddd|'; var strs :TStrings; i :Integer; begin strs := TStringList.Create; strs.Delimiter := '/'; strs.QuoteChar := '|'; strs.DelimitedText := constr; for i := 0 to Strs.Count-1 do ShowMessage(Strs[i]); end; 显示出来的又是aaa bbb ccc ddd。对比一下,应该不难明白吧?这个就不多说了,用得也不多。 但是还要多说一句,当Delimiter为:','而QuoteChar为:'"'时,DelimitedText和CommaText是同等的。 最后要说的三个是:Names & Values & ValueFromIndex。 看看下面的代码: const constr :String = '0=aaa,1=bbb,2=ccc,3=ddd'; var strs :TStrings; i :Integer; begin strs := TStringList.Create; strs.CommaText := constr; for i := 0 to strs.Count-1 do begin ShowMessage(strs.Names[i]); ShowMessage(strs.Values[strs.Names[i]]); ShowMessage(strs.ValueFromIndex[i]); end; end; 通过这个例子不难看出: 第一行的结果为: 0 1 2 3 第二行的结果为: aaa bbb ccc ddd
第三行的结果为: aaa bbb ccc ddd
|