TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的。
常规的用法大家都知道,现在来讨论它的一些高级的用法。先把要讨论的几个属性列出来:1、CommaText2、Delimiter & DelimitedText3、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;通过这个例子不难看出:这个时候strs中的内容是:0=aaa1=bbb2=ccc3=ddd而Names中则是:0123在Values中则是:aaabbbcccddd这几个属性用来处理ini文件是非常好用的。 分类: