ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:19.79KB ,
资源ID:4747809      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4747809.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Delphi中 TStringList高级用法.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Delphi中 TStringList高级用法.docx

1、Delphi中 TStringList高级用法Delphi中 TStringList 的详细用法TStringList 类是在Delphi使用最厂的一个对像,我们这里一起来看看 TStringList 的详细用法.先把要讨论的几个属性列出来:1、CommaText2、Delimiter & DelimitedText3、Names & Values & ValueFromIndexTStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的。TStringList 常用方法与属性:var List: TStringList; i: Integer;begin List := TS

2、tringList.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:t

3、mp.txt); 保存 List.Clear; 清空 List.Free; 释放end; /读入字符串var List: TStringList;begin List := TStringList.Create; List.CommaText := aaa,bbb,ccc,ddd; /相当于: List.Text := aaa + #13#10 + bbb + #13#10 + ccc + #13#10 + ddd; ShowMessage(IntToStr(List.Count); /4 ShowMessage(List0); /aaaList.Free;end;相当于 /置换分隔符var

4、List: TStringList;begin List := TStringList.Create; List.Delimiter := |; List.DelimitedText := aaa|bbb|ccc|ddd; ShowMessage(IntToStr(List.Count); /4 ShowMessage(List0); /aaa List.Free;end; /类似的哈希表操作法varList: TStringList;begin List := TStringList.Create;List.Add(aaa=111); List.Add(bbb=222); List.Add(

5、ccc=333); List.Add(ddd=444);ShowMessage(List.Names1); /bbb ShowMessage(List.ValueFromIndex1); /222 ShowMessage(List.Valuesbbb); /222 /ValueFromIndex 可以赋值: List.ValueFromIndex1 := 2; ShowMessage(List1); /bbb=2/可以通过 Values 赋值: List.Valuesbbb := 22; ShowMessage(List1); /bbb=22List.Free;end; /避免重复值var L

6、ist: TStringList;begin List := TStringList.Create; List.Add(aaa);List.Sorted := True; /需要先指定排序 List.Duplicates := dupIgnore; /如有重复值则放弃 List.Add(aaa);ShowMessage(List.Text); /aaa/Duplicates 有3个可选值: /dupIgnore: 放弃; /dupAccept: 结束; /dupError: 提示错误. List.Free;end;/排序与倒排序排序函数function DescCompareStrings(L

7、ist: TStringList; Index1, Index2: Integer): Integer;begin Result := -AnsiCompareText(ListIndex1, ListIndex2);end;procedure TForm1.Button1Click(Sender: TObject);var List: TStringList;begin List := TStringList.Create; List.Add(bbb); List.Add(ccc); List.Add(aaa); /未排序 ShowMessage(List.Text); /bbb ccc a

8、aa /排序 List.Sort; ShowMessage(List.Text); /aaa bbb ccc /倒排序 List.CustomSort(DescCompareStrings); /调用排序函数 ShowMessage(List.Text); /ccc bbb aaa/假如 List.Sorted := True; List.Add(999); List.Add(000); List.Add(zzz); ShowMessage(List.Text); /000 999 aaa bbb ccc zzzend;现在来讨论它的一些高级的用法。先把要讨论的几个属性列出来:1、CommaT

9、ext2、Delimiter & DelimitedText3、Names & Values & ValueFromIndex先看第一个:CommaText。怎么用呢?用代码说话:constconstr :String = aaa,bbb,ccc,ddd;varstrs :TStrings;i :Integer;beginstrs := TStringList.Create;strs.CommaText := constr;for i := 0 to Strs.Count-1 do ShowMessage(Strs);end;执行了这段代码后,可以看到ShowMessage显示出来的分别是:a

10、aa bbb ccc ddd。也就是说,strs.CommaText := constr这一句的作用,就是把一个字符串以,为分割符,分段添加到TStrings中。那么如果不是以,来分割,又该怎么做呢?现在看第二个例子。使用Delimiter和DelimitedText。constconstr :String = aaabbbcccddd;varstrs :TStrings;i :Integer;beginstrs := TStringList.Create;strs.Delimiter := ;strs.DelimitedText := constr;for i := 0 to Strs.Co

11、unt-1 do ShowMessage(Strs);end;可以看到, 显示的效果和第一个例子是一模一样的。解释一下:Delimiter为分隔符,默认为:,。DelimitedText就是按Delimiter为分隔符的一个串,得到赋值后回把这个字符串按Delimiter的字符添加到TStrings中。说到这里,有想起一个属性,QuoteChar。其默认值为:(不包括单引号)有何用呢?看例子:constconstr :String = aaabbbcccddd;varstrs :TStrings;i :Integer;beginstrs := TStringList.Create;strs.D

12、elimiter := ;strs.DelimitedText := constr;for i := 0 to Strs.Count-1 do ShowMessage(Strs);end;显示出来的仍然是aaa bbb ccc ddd。为什么不是:aaa bbb ccc ddd呢?再来看一个例子:constconstr :String = |aaa|bbb|ccc|ddd|;varstrs :TStrings;i :Integer;beginstrs := TStringList.Create;strs.Delimiter := ;strs.QuoteChar := |;strs.Delimi

13、tedText := constr;for i := 0 to Strs.Count-1 do ShowMessage(Strs);end;显示出来的又是aaa bbb ccc ddd。对比一下,应该不难明白吧?这个就不多说了,用得也不多。但是还要多说一句,当Delimiter为:,而QuoteChar为:时,DelimitedText和CommaText是同等的。最后要说的三个是:Names & Values & ValueFromIndex。看看下面的代码:constconstr :String = 0=aaa,1=bbb,2=ccc,3=ddd;varstrs :TStrings;i :

14、Integer;beginstrs := TStringList.Create;strs.CommaText := constr;for i := 0 to strs.Count-1 dobegin ShowMessage(strs.Names); ShowMessage(strs.Valuesstrs.Names); ShowMessage(strs.ValueFromIndex);end;end;通过这个例子不难看出:这个时候strs中的内容是:0=aaa1=bbb2=ccc3=ddd而Names中则是:0123在Values中则是:aaabbbcccddd= TStringList 和

15、TList在本章中,我们只讨论TStringList,而将TList放在下一章中再详细讨论 第一章、TStringList 在这里我们要讲解TStringList,但同时有一个相关类是不能忽略的,那就是TStrings类 TStringList是由TStrings派生而来,而Tstrings是一个抽象类,他继承于Tpersistent类。 因此,我们将TStrings类 和 TStringList类 一同讲解,并做比较 1、TStrings、TStringList不是可视组件,只是两个通用类,因此他们与可视组件TMemo、TRichEdit没有可比性。 2、TStrings、TStringLi

16、st都是管理“字符串-附属对象”这样一个列表,前者是抽象类,不能被实例化,只是定义了一些通用的属性、方法,而后者是从TStringList继承而来,可以实例化使用。如:varS1, S2: TStrings;S3: TStringList;beginS1 := TStrings.Create; /这样就不可以(因为TStrings是抽象类,不能直接创建对象)S3 := TStringList.Create; /这样是可以的S2 := TStringList.Create; /这样也是可以的(多态的典型使用)end; 注意: 上面S2的声明是TStrings类型,他是将一个TStringList

17、类创建了对象之后,赋值给声明的TStrings变量。这是典型的多态的使用。(什么?你不知道什么是多态?乖乖隆咚,这可是大腕啊,这都不认识,赶紧饿补一下再回来找小飞龙) 我说过TStrings类是TStringList类的父类,多态使用中,子类对象赋值给父类变量后,变量的使用范围(属性、方法)是要注意的,子类没有的属性或方法,变量是不能使用的,而需要类型转换TStringList(S2)之后才能调用。如下面的代码段var S:TStrings;begin S := TStringList.Create;/TStringList实现了TStrings中的抽象方法。 S.Add(123456789A

18、BC); /所以这样调用Add方法,是正确的; /因为TStrings类中是有Add方法的抽象声明的; /它实际调用的是子类TStringList实现的Add。 S.Sort /而这样调用Sort排序方法就会出错; /因为TStrings类中没有Sort方法的声明; /而变量S被声明为TStrings类,所以他看不到子类中继承后新增加的方法和属性。 S.Free;end; 上面代码中TStringList类中有一个方法,叫做Sort(这是一个排序的方法),但是在TStrings类里面却没有,他是TStringList子类新增加的方法。那么好了,在上面的程序代码段中,如果这样调用代码S2.Sor

19、t,哈哈,马上你就会看到编译器报错,具体为什么,大家可以好好地想一想,或者参考李维大师的著作阅读相关章节。varS1, S2: TStrings;S3: TStringList;beginS1 := TStrings.Create; /这样就不可以(因为TStrings是抽象类,不能直接创建对象)S3 := TStringList.Create; /这样是可以的S2 := TStringList.Create; /这样也是可以的(多态的典型使用) S1.Add(123456789ABC); /报错了,因为S1中Add是抽象方法,只有声明 S.Free;end; 我们再来看看上面代码中的S1变量

20、,你可以声明TStrings的对象,但是,如果你像上面那样创建他,那么编译器编译的时候会发出警告信息,列出TStrings类中的抽象方法,提醒你,这是一个抽象类,你不应该直接创建他的对象,当然,如果你不怕死,非要编译运行程序的话,也没问题,编译器对警告信息一般是放过的,所以,你的程序(如上面所示)仍然可以运行! 但是,嘿嘿,看见了吗?我说但是了,如果你在后面的代码中使用了你所创建的TStrings对象的那些 add,delete等方法的话,那你就死定了,因为这些是抽象方法,是不能用的,是Abstract方法。 为什么第二段代码中的S.Add(123456789ABC)不会有问题,可以很好地执行

21、;但是第三段代码中的S1.Add(123456789ABC)就会报错呢?,他们的S和S1变量不都是TStrings类型吗? 关于这个问题,本小飞龙已经点的很清楚了,这是面向对象程序设计语言中非常重要的一个环节“多态性”,如果读者对这个概念不清楚,那么很多东西都会稀里糊涂,会走很多弯路,所以,赶紧看看相关的资料。在这里我们就不说了,我只说一句:这非常重要! 3、TMemo是我们常见的一个可视化VCL组件,通常用于显示多行的纯文本内容。 Delphi 5中其Items属性类型是TStrings(实际上是继承自TStrings的TMemoStrings),因此可以直接从TStrings兼容类型的变量

22、导入数据。 Delphi 7中组件有变化,没有了Items属性,取而代之的是Lines属性,类型是TStrings。 4.TRichEdit是另一个我们常见的一个可视化VCL组件,通常用于显示格式化的文本内容。 Delphi 5中其Items属性类型也是TStrings(实际上是继承自TStrings的TRichEditStrings),因此可以直接从TStrings兼容类型的变量导入数据。 Delphi 7中组件有变化,没有了Items属性,取而代之的是Lines属性,类型是TStrings。 5、TStrings的派生类主要用于管理字符串集合和对象集合。例如Delphi5中TStringL

23、ist在内部分别为字符串和对象各声明了一个数组来存储数据,而在Delphi7中TStringList在内部是以一个记录类型来实现,因此他们能同时保存字符串和对象(注意:一般我们用TStringList来处理数组列表,而用下一章将要讲到的TList类来处理对象列表;但事实上TStringList类也是可以处理对象的,关于这一点,只要读者仔细看看Delpgi7中的TStringList类VCL的源代码就明白了,注意源代码中私有变量是一个记录类型)。 6、一般我们直接使用TStringList类而不是TStrings类,因为TStrings类是一个抽象类,不能直接使用,所以下面我们列出TString

24、List类的方法,并重点讲解其作用方法 描述Add 在末尾添加一个字符串 TStringList.Add(123456789ABC )AddObject 在末尾添加一个对象 TStringList.AddObject(btn, Button1);Insert 在指定位置插入一个字符串 TStringList.Insert(0, 123456789ABC )InsertObject 在指定位置插入一个字符串,并给他分配一个相应的对象举例:将窗体中的所有组件的组件名称放入ListBox的Item属性中Item属性是一个TStrings类型 procedure TForm1.Button1Click

25、(Sender: TObject);var I: Integer;begin for I := 0 to Form1.ComponentCount-1 do ListBox1.Items.InsertObject(0, Form1.ComponentsI.Name,Form1.ComponentsI as TObject);end;Delete 在指定位置删除一个字符串,如果字符串配有对象,那么对象也删除 TStringList.Delete(0)Clear 清空列表字符串,如果字符串配有对象,那么对象也被移出,但是对象不会被释放Exchange 交换两个字符串的位置,如果字符串配有对象,那么

26、对象也被交换 TStringList.Exchange(0,1)Find 查找一个已知字符串在列表中的位置,注意方法声明中的Index的声明是 var IndexTStringList.Find(const S: string; var Index: Integer): Boolean;IndexOf 与Find不同,IndexOf用来查找某一字符串指定的位置TStringList.IndexOf(const S: string): Integer;Sort 排序,Sorted属性设置为False的时候,调用Sort排序;Sorted属性Sorted属性设置为False的时候,调用Sort排序

27、;Sorted属性设置为True的时候,列表自动排序,这时,就不要使用Insert了,而应使用Add来添加,系统会自动排序的;CustomSort 客户自定义排序,这个我们不作介绍,有兴趣看Delphi帮助CaseSensitive 设定字符串比较、取位置时,大小写是否敏感,这个我们不作介绍,有兴趣看Delphi帮助Duplicates 添加字符串的时候,是否允许重复字段Add,这个我们不作介绍,有兴趣看Delphi帮助/TStringList 常用方法与属性:varList: TStringList;i: Integer;beginList := 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.LoadFromFi

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

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