Delphi中 TStringList高级用法Word格式文档下载.docx

上传人:b****3 文档编号:17688506 上传时间:2022-12-08 格式:DOCX 页数:12 大小:19.79KB
下载 相关 举报
Delphi中 TStringList高级用法Word格式文档下载.docx_第1页
第1页 / 共12页
Delphi中 TStringList高级用法Word格式文档下载.docx_第2页
第2页 / 共12页
Delphi中 TStringList高级用法Word格式文档下载.docx_第3页
第3页 / 共12页
Delphi中 TStringList高级用法Word格式文档下载.docx_第4页
第4页 / 共12页
Delphi中 TStringList高级用法Word格式文档下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

Delphi中 TStringList高级用法Word格式文档下载.docx

《Delphi中 TStringList高级用法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Delphi中 TStringList高级用法Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。

Delphi中 TStringList高级用法Word格式文档下载.docx

List.Sort;

{排序}

List.Sorted:

=True;

 

{指定排序}

List.Count;

{总数}

List.Text;

{文本集合}

List.Delete(0);

{删除,0是第一个数据}

List.LoadFromFile('

c:

\tmp.txt'

{打开}

List.SaveToFile('

{保存}

List.Clear;

{清空}

List.Free;

{释放}

end;

//读入字符串

List.CommaText:

='

aaa,bbb,ccc,ddd'

;

//相当于:

List.Text:

aaa'

+#13#10+'

bbb'

+#13#10'

+'

ccc'

#13#10'

ddd'

ShowMessage(IntToStr(List.Count));

//4

ShowMessage(List[0]);

//aaa

List.Free;

相当于

//置换分隔符

List.Delimiter:

|'

List.DelimitedText:

aaa|bbb|ccc|ddd'

//类似的哈希表操作法

List:

List.Add('

aaa=111'

bbb=222'

ccc=333'

ddd=444'

ShowMessage(List.Names[1]);

//bbb

ShowMessage(List.ValueFromIndex[1]);

//222

ShowMessage(List.Values['

]);

//ValueFromIndex可以赋值:

List.ValueFromIndex[1]:

2'

ShowMessage(List[1]);

//bbb=2

//可以通过Values赋值:

List.Values['

]:

22'

//bbb=22

//避免重复值

List.Sorted:

//需要先指定排序

List.Duplicates:

=dupIgnore;

//如有重复值则放弃 

ShowMessage(List.Text);

//Duplicates有3个可选值:

//dupIgnore:

放弃;

//dupAccept:

结束;

//dupError:

提示错误.

//排序与倒排序

{排序函数}

functionDescCompareStrings(List:

Index1,Index2:

Integer):

Result:

=-AnsiCompareText(List[Index1],List[Index2]);

procedureTForm1.Button1Click(Sender:

TObject);

//未排序

ShowMessage(List.Text);

//bbbcccaaa 

//排序

//aaabbbccc

//倒排序

List.CustomSort(DescCompareStrings);

//调用排序函数

//cccbbbaaa

//假如

999'

000'

zzz'

//000999aaabbbccczzz

现在来讨论它的一些高级的用法。

先看第一个:

CommaText。

怎么用呢?

用代码说话:

const

constr:

String='

strs:

TStrings;

i:

Integer;

strs.CommaText:

=constr;

fori:

=0toStrs.Count-1do

ShowMessage(Strs);

执行了这段代码后,可以看到ShowMessage显示出来的分别是:

aaabbbcccddd。

也就是说,strs.CommaText:

=constr这一句的作用,就是把一个字符串以'

'

为分割符,分段添加到TStrings中。

那么如果不是以'

来分割,又该怎么做呢?

现在看第二个例子。

使用Delimiter和DelimitedText。

aaa\bbb\ccc\ddd'

strs.Delimiter:

\'

strs.DelimitedText:

可以看到,显示的效果和第一个例子是一模一样的。

解释一下:

Delimiter为分隔符,默认为:

'

DelimitedText就是按Delimiter为分隔符的一个串,得到赋值后回把这个字符串按Delimiter的字符添加到TStrings中。

说到这里,有想起一个属性,QuoteChar。

其默认值为:

"

(不包括单引号)

有何用呢?

看例子:

aaa"

\"

bbb"

ccc"

ddd"

显示出来的仍然是aaabbbcccddd。

为什么不是:

"

呢?

再来看一个例子:

|aaa|\|bbb|\|ccc|\|ddd|'

strs.QuoteChar:

显示出来的又是aaabbbcccddd。

对比一下,应该不难明白吧?

这个就不多说了,用得也不多。

但是还要多说一句,当Delimiter为:

而QuoteChar为:

时,DelimitedText和CommaText是同等的。

最后要说的三个是:

Names&

ValueFromIndex。

看看下面的代码:

0=aaa,1=bbb,2=ccc,3=ddd'

=0tostrs.Count-1do

ShowMessage(strs.Names);

ShowMessage(strs.Values[strs.Names]);

ShowMessage(strs.ValueFromIndex);

通过这个例子不难看出:

这个时候strs中的内容是:

0=aaa

1=bbb

2=ccc

3=ddd

而Names中则是:

1

2

3

在Values中则是:

aaa

bbb

ccc

ddd

===============================================================================================

TStringList 

和 

TList

在本章中,我们只讨论TStringList,而将TList放在下一章中再详细讨论

第一章、TStringList

在这里我们要讲解TStringList,但同时有一个相关类是不能忽略的,那就是TStrings类

TStringList是由TStrings派生而来,而Tstrings是一个抽象类,他继承于Tpersistent类。

因此,我们将TStrings类和TStringList类一同讲解,并做比较

1、TStrings、TStringList不是可视组件,只是两个通用类,因此他们与可视组件TMemo、TRichEdit没有可比性。

2、TStrings、TStringList都是管理“字符串-附属对象”这样一个列表,前者是抽象类,不能被实例化,只是定义了一些通用的属性、方法,而后者是从TStringList继承而来,可以实例化使用。

如:

var 

  S1,S2:

TStrings;

  S3:

  S1:

=TStrings.Create;

//这样就不可以(因为TStrings是抽象类,不能直接创建对象)

  S3:

//这样是可以的

  S2:

//这样也是可以的(多态的典型使用)

注意:

上面S2的声明是TStrings类型,他是将一个TStringList类创建了对象之后,赋值给声明的TStrings变量。

这是典型的多态的使用。

(什么?

你不知道什么是多态?

乖乖隆咚,这可是大腕啊,这都不认识,赶紧饿补一下再回来找小飞龙~~~~)

我说过TStrings类是TStringList类的父类,多态使用中,子类对象赋值给父类变量后,变量的使用范围(属性、方法)是要注意的,子类没有的属性或方法,变量是不能使用的,而需要类型转换TStringList(S2)之后才能调用。

如下面的代码段

S:

begin 

S:

//TStringList实现了TStrings中的抽象方法。

S.Add('

123456789ABC'

//所以这样调用Add方法,是正确的;

//因为TStrings类中是有Add方法的抽象声明的;

//它实际调用的是子类TStringList实现的Add。

S.Sort 

//而这样调用Sort排序方法就会出错;

//因为TStrings类中没有Sort方法的声明;

//而变量S被声明为TStrings类,所以他看不到子类中继承后新增加的方法和属性。

S.Free;

上面代码中TStringList类中有一个方法,叫做Sort(这是一个排序的方法),但是在TStrings类里面却没有,他是TStringList子类新增加的方法。

那么好了,在上面的程序代码段中,如果这样调用代码S2.Sort,哈哈,马上你就会看到编译器报错,具体为什么,大家可以好好地想一想,或者参考李维大师的著作阅读相关章节。

S1.Add('

//报错了,因为S1中Add是抽象方法,只有声明

我们再来看看上面代码中的S1变量,你可以声明TStrings的对象,但是,如果你像上面那样创建他,那么编译器编译的时候会发出警告信息,列出TStrings类中的抽象方法,提醒你,这是一个抽象类,你不应该直接创建他的对象,当然,如果你不怕死,非要编译运行程序的话,也没问题,编译器对警告信息一般是放过的,所以,你的程序(如上面所示)仍然可以运行!

但是,嘿嘿,看见了吗?

我说但是了,如果你在后面的代码中使用了你所创建的TStrings对象的那些add,delete等方法的话,那你就死定了,因为这些是抽象方法,是不能用的,是Abstract方法。

为什么第二段代码中的S.Add('

)不会有问题,可以很好地执行;

但是第三段代码中的S1.Add('

)就会报错呢?

,他们的S和S1变量不都是TStrings类型吗?

关于这个问题,本小飞龙已经点的很清楚了,这是面向对象程序设计语言中非常重要的一个环节“多态性”,如果读者对这个概念不清楚,那么很多东西都会稀里糊涂,会走很多弯路,所以,赶紧看看相关的资料。

在这里我们就不说了,我只说一句:

这非常重要!

 3、TMemo是我们常见的一个可视化VCL组件,通常用于显示多行的纯文本内容。

Delphi5中其Items属性类型是TStrings(实际上是继承自TStrings的TMemoStrings),因此可以直接从TStrings兼容类型的变量导入数据。

Delphi7中组件有变化,没有了Items属性,取而代之的是Lines属性,类型是TStrings。

 4.TRichEdit是另一个我们常见的一个可视化VCL组件,通常用于显示格式化的文本内容。

Delphi5中其Items属性类型也是TStrings(实际上是继承自TStrings的TRichEditStrings),因此可以直接从TStrings兼容类型的变量导入数据。

5、TStrings的派生类主要用于管理字符串集合和对象集合。

例如Delphi5中TStringList在内部分别为字符串和对象各声明了一个数组来存储数据,而在Delphi7中TStringList在内部是以一个记录类型来实现,因此他们能同时保存字符串和对象(注意:

一般我们用TStringList来处理数组列表,而用下一章将要讲到的TList类来处理对象列表;

但事实上TStringList类也是可以处理对象的,关于这一点,只要读者仔细看看Delpgi7中的TStringList类VCL的源代码就明白了,注意源代码中私有变量是一个记录类型)。

6、一般我们直接使用TStringList类而不是TStrings类,因为TStrings类是一个抽象类,不能直接使用,所以下面我们列出TStringList类的方法,并重点讲解其作用

方法描述 

Add在末尾添加一个字符串TStringList.Add('

123456789ABC'

) 

AddObject在末尾添加一个对象TStringList.AddObject('

btn'

Button1);

Insert在指定位置插入一个字符串TStringList.Insert(0,'

InsertObject在指定位置插入一个字符串,并给他分配一个相应的对象 

举例:

将窗体中的所有组件的组件名称放入ListBox的Item属性中

Item属性是一个TStrings类型procedureTForm1.Button1Click(Sender:

I:

forI:

=0toForm1.ComponentCount-1do

ListBox1.Items.InsertObject(0,Form1.Components[I].Name,Form1.Components[I]asTObject);

Delete在指定位置删除一个字符串,如果字符串配有对象,那么对象也删除TStringList.Delete('

0'

Clear清空列表字符串,如果字符串配有对象,那么对象也被移出,但是对象不会被释放 

Exchange交换两个字符串的位置,如果字符串配有对象,那么对象也被交换TStringList.Exchange(0,1) 

Find查找一个已知字符串在列表中的位置,注意方法声明中的Index的声明是varIndex

TStringList.Find(constS:

string;

varIndex:

Boolean;

IndexOf与Find不同,IndexOf用来查找某一字符串指定的位置

TStringList.IndexOf(constS:

string):

Sort排序,Sorted属性设置为False的时候,调用Sort排序;

Sorted属性

Sorted属性设置为False的时候,调用Sort排序;

Sorted属性设置为True的时候,列表自动排序,这时,就不要使用Insert了,而应使用Add来添加,系统会自动排序的;

CustomSort客户自定义排序,这个我们不作介绍,有兴趣看Delphi帮助 

CaseSensitive设定字符串比较、取位置时,大小写是否敏感,这个我们不作介绍,有兴趣看Delphi帮助 

Duplicates添加字符串的时候,是否允许重复字段Add,这个我们不作介绍,有兴趣看Delphi帮助

//TStringList常用方法与属性:

i:

List:

List.Exchange(0,1);

List.Insert(0,'

List.Sort;

List.Count;

List.Text;

{文本集合}

List.Delete(0);

List.LoadFromFi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1