首页 > 代码库 > TStringList 常用操作
TStringList 常用操作
TStringList 常用操作
//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;
//读入字符串 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(List[0]); //aaa List.Free; end;
//置换分隔符 var List: TStringList; begin List := TStringList.Create; List.Delimiter := ‘|‘; List.DelimitedText := ‘aaa|bbb|ccc|ddd‘; ShowMessage(IntToStr(List.Count)); //4 ShowMessage(List[0]); //aaa List.Free; end;
//类似的哈希表操作法 var List: TStringList; begin List := TStringList.Create; List.Add(‘aaa=111‘); List.Add(‘bbb=222‘); List.Add(‘ccc=333‘); List.Add(‘ddd=444‘); ShowMessage(List.Names[1]); //bbb ShowMessage(List.ValueFromIndex[1]); //222 ShowMessage(List.Values[‘bbb‘]); //222 //ValueFromIndex 可以赋值: List.ValueFromIndex[1] := ‘2‘; ShowMessage(List[1]); //bbb=2 //可以通过 Values 赋值: List.Values[‘bbb‘] := ‘22‘; ShowMessage(List[1]); //bbb=22 List.Free; end;
//避免重复值 var List: 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(List: TStringList; Index1, Index2: Integer): Integer; begin Result := -AnsiCompareText(List[Index1], List[Index2]); 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 aaa //排序 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 zzz end;
//待续...
分类: 4.其他技术区,2e.Delphi 中的容器类
好文要顶 关注我 收藏该文
万一
关注 - 34
粉丝 - 876
关注 - 34
粉丝 - 876
荣誉:推荐博客
+加关注
4
0
? 上一篇:Delphi 的信息框相关函数
? 下一篇:文件路径相关的字符串操作
? 下一篇:文件路径相关的字符串操作
posted on 2007-12-10 23:17 万一 阅读(28095) 评论(23) 编辑 收藏
FeedBack:
#1楼 2008-04-08 10:27 Liangpei2008
Delphi7以下版本中DelimitedText有Bug,不知道2007改了没有~
它会将空格当做分隔符!
例
List.Delimiter := ‘|‘;
List.DelimitedText := ‘aaa|bb b|ccc|ddd‘;
//bbb若有空格,那么它的Count就是5而不是4
而SplitColumns是IdStrings.pas里的函数,
它修正了TStrings.DelimitedText和TStrings.Delimiter将空格也作为分隔符的问题
SplitColumns
它会将空格当做分隔符!
例
List.Delimiter := ‘|‘;
List.DelimitedText := ‘aaa|bb b|ccc|ddd‘;
//bbb若有空格,那么它的Count就是5而不是4
而SplitColumns是IdStrings.pas里的函数,
它修正了TStrings.DelimitedText和TStrings.Delimiter将空格也作为分隔符的问题
SplitColumns
支持(0)反对(0)
#2楼 2008-04-08 11:45 万一
是这样, 但用 Add 添加的不要紧.
支持(0)反对(0)
#3楼 2008-07-16 14:16 qcl
万老师:
分隔符可以是换行符吗? 我现在的STRING是TXT读进来的 ,是这样的形式
111,222
333,444
是不是换行符都隐式在STRING里了 要怎么把第一行读出来 ,之后我就可以以逗号把每个数据单个读出来了 另外 老师有什么快捷的联系方式吗 我想随时请教:)
分隔符可以是换行符吗? 我现在的STRING是TXT读进来的 ,是这样的形式
111,222
333,444
是不是换行符都隐式在STRING里了 要怎么把第一行读出来 ,之后我就可以以逗号把每个数据单个读出来了 另外 老师有什么快捷的联系方式吗 我想随时请教:)
支持(0)反对(0)
#4楼 2008-07-16 14:20 qcl
刚试了下 用list.text:=str 就可以分行ADD进LIST 很神奇噢
支持(0)反对(0)
#5楼 2008-07-16 17:14 DXH_tt
经常听人说delphi里大循环,或者多线程,是怎么回事呢?timer事件是不是多线程呢博主先生?
支持(0)反对(0)
#6楼[楼主] 2008-07-16 23:01 万一
@qcl: 祝贺你自己已经解决了, 通过 TStringList 分割字串还有一些更巧妙的办法, 如果需要我给你介绍.
@DXH_tt:
关于 Delphi 中的多线程: Delphi 中的多线程是模拟的. 系统运行着许多进程、线程, 但这些线程并不是真正同步运行的, 系统按某个极小的时间单位分别去关照每个线程, 因为时间单位极小, 所以我们感觉程序并没有中断运行. 这也就是系统多线程的理念.
我们在 Delphi 的某个进程中假如也使用了若干多线程, 当系统关注到这个进程的时候会循环执行此进程中的个个线程, 好像系统并没有认为这里有多线程, 只是 Delphi 的内部协调而已. 所以有人说 Delphi 的多线程其实是个大循环.
这仅仅是个人的理解, 仅供参考.
另外, timer 事件不是多线程的, 但如果在其中插入 Application.ProcessMessages; 代码, 也可以模拟多线程.
@DXH_tt:
关于 Delphi 中的多线程: Delphi 中的多线程是模拟的. 系统运行着许多进程、线程, 但这些线程并不是真正同步运行的, 系统按某个极小的时间单位分别去关照每个线程, 因为时间单位极小, 所以我们感觉程序并没有中断运行. 这也就是系统多线程的理念.
我们在 Delphi 的某个进程中假如也使用了若干多线程, 当系统关注到这个进程的时候会循环执行此进程中的个个线程, 好像系统并没有认为这里有多线程, 只是 Delphi 的内部协调而已. 所以有人说 Delphi 的多线程其实是个大循环.
这仅仅是个人的理解, 仅供参考.
另外, timer 事件不是多线程的, 但如果在其中插入 Application.ProcessMessages; 代码, 也可以模拟多线程.
支持(0)反对(0)
#7楼 2008-07-17 09:02 qcl
好啊 我想了解更多:)
支持(0)反对(0)
#8楼 2008-09-16 09:57 外来天客
万一老师,我有个关于改变图片颜色的问题想请教一下,能告诉我你的Email吗?谢谢
支持(0)反对(0)
#9楼[楼主] 2008-09-16 10:40 万一
wy132435@gmail.com
支持(0)反对(0)
#10楼 2008-11-27 11:36 南山古桃
搜TStringList,万一兄文章出现在第一个,哈,飞马过去把此文抢了
支持(0)反对(0)
#11楼[楼主] 2008-11-27 11:44 万一
@南山古桃
欢迎"桃子", 这是很早以前写得, 不全面也不深入.
欢迎"桃子", 这是很早以前写得, 不全面也不深入.
支持(0)反对(0)
#12楼 2008-11-27 14:03 南山古桃
对我很有帮助,已经把TStringList有个大致了解了
感谢!
感谢!
支持(0)反对(0)
#13楼 2008-11-28 16:08 得到
不错呀 能多点这样的文章就好了 我什么时候能达到你1/10的功力就满足了哦
支持(0)反对(0)
#14楼 2009-03-08 15:37 sweidong
万一老师,在你这里学到很多东西,我是业余爱好,现在搞的mdi中子窗口有多个combobox,在子窗口创建时我要对所有的combobox的items赋值(从数据库中遍历,有几条到几百条不等),其中还有几个combobox是一样(如儿童,父亲,母亲各自的国籍、民族、户口地址等等),我也得给它从数据库遍历赋值,用的AddObject方法,有code和name两列,这样就造成该子窗口显示出来速度很慢,有什么办法可以优化一下,谢谢
支持(0)反对(0)
#15楼[楼主] 2009-03-08 16:52 万一
@sweidong
在需要时间的代码前添加这句试试:
Application.ProcessMessages;
在需要时间的代码前添加这句试试:
Application.ProcessMessages;
TStringList 常用操作
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。