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

荣誉:推荐博客

+加关注

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

支持(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里了 要怎么把第一行读出来 ,之后我就可以以逗号把每个数据单个读出来了 另外 老师有什么快捷的联系方式吗 我想随时请教:)

支持(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; 代码, 也可以模拟多线程.

支持(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 万一

[email protected]

支持(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;

时间: 2024-11-07 02:03:39

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'); {第一次出

Python 字典的特点和常用操作

一.字典帮助文档 >>> dir(dict) ['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt

postgresql的ALTER常用操作

postgresql版本:psql (9.3.4) 1.增加一列ALTER TABLE table_name ADD column_name datatype; 2.删除一列 ALTER TABLE table_name DROP column_name; 3.更改列的数据类型 ALTER TABLE table_name ALTER column_name TYPE datatype; 4.表的重命名 ALTER TABLE table_name RENAME TO new_name; 5.更

Mysql数据库常用操作

1.备份数据库 [[email protected] ~]# mysqldump -h 192.168.0.8 -uroot  -p'123456'  user >user.sql 2.查看mysql数据库字符集设置 mysql> show variables like 'character_set_%';+--------------------------+----------------------------+| Variable_name            | Value    

多路径软件常用操作(MPIO)

一:查看存储盘的路径 1. 查看MPIO的存储盘的路径 # lspath (适用于所有存储的MPIO路径查询) # mpio_get_config -Av (适用于DS3K/DS4K的MPIO路径查询) 2. 查看RDAC存储盘的路径 # fget_config -Av (适用于DS3K/DS4K的RDAC路径查询) 3.查看SDDPCM存储盘的路径 # pcmpath query device (适用于DS6K/DS8K和v7000的SDDPCM路径查询) 4. 查看当前操作系统自带的支持IB

Python学习笔记五:字符串常用操作,字典,三级菜单实例

字符串常用操作 7月19日,7月20日 ,7月22日,7月29日,8月29日,2月29日 首字母大写:a_str.capitalize() 统计字符串个数:a_str.count("x") 输出字符,不够的使用指定的字符补上,字符居中:a_str.center(50,"-") 判断字符串以什么结尾:a_str.endwith("xx") 将字符串中的tab转换为指定数目的空格:a_str.expandtabs(tabsize=30) 查找指定字符

jQuery的常用操作

梳理一下jQuery的常用操作 jQuery隐藏显示对象 id为test的元素的display修改成了"none",即隐藏了id为test的元素:$('#test').css('display','none') 或 $('#test').style.display="none" 我们经常用到的是切换一个元素的隐藏与现实,下面给出代码: var show = $('#test').css('display');//获取id为test的元素的display的值$('#t

MongoDB常用操作

1.MongoDB常用操作 1.1数据库的操作命令 1.创建数据库,使用命令 use 数据库名称 ,如 use sxf. *注意: 1.use 命令后跟的数据库名,如果存在就进入此数据库,如果不存在就创建,所以这种创建方式又叫隐式创建 2.使用命令use sxf创建数据库后,并没有真正生成对应的数据文件,如果此时退出,此数据库将被删除,只有在此数据库中创建集合后,才会真正生成数据文件 2. 删除当前数据库,使用命令 db.dropDatabase() 3.查看所有数据库,使用命令 show db

git bash 常用操作文件命令

git bash常用操作文件命令 在Windows下使用Git Bash,用的是Linux命令,常用几个文件操作命令如下: Windows命令 Linux 命令 意义 Windows命令 Linux 命令 意义 cd e:\xxx cd /e/xxx 切换到xxx目录 cd pwd 显示当前目录路径 dir ls 列出当前目录内容 copy nul xxx.txt touch xxx.txt 生成名为xxx.txt的空文件 del xxx.txt rm xxx.txt 删除xxx.txt文件 m