TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的。

常规的用法大家都知道,现在来讨论它的一些高级的用法。

先把要讨论的几个属性列出来:

1、CommaText

2、Delimiter & DelimitedText

3、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=aaa

1=bbb

2=ccc

3=ddd

而Names中则是:

0

1

2

3

在Values中则是:

aaa

bbb

ccc

ddd

似乎有点不合适宜,但谁也不能否认,delphi还是蛮好用的,这个是最近两天中碰到的问题的解法

Delphi中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;

本文来自Delphi之窗,原文地址:http://www.52delphi.com

Delphi中TStringList类常用属性方法详解的更多相关文章

  1. 【delphi】TStringList类常用属性方法详解

    TStringList 常用方法与属性 var List: TStringList; i: Integer; begin List := TStringList.Create; List.Add('S ...

  2. Python的Django框架中forms表单类的使用方法详解

    用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...

  3. ES6 类(Class)基本用法和静态属性+方法详解

    原文地址:http://blog.csdn.net/pcaxb/article/details/53759637 ES6 类(Class)基本用法和静态属性+方法详解 JavaScript语言的传统方 ...

  4. Java中的equals和hashCode方法详解

    Java中的equals和hashCode方法详解  转自 https://www.cnblogs.com/crazylqy/category/655181.html 参考:http://blog.c ...

  5. 转:Java中的equals和hashCode方法详解

    转自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这 ...

  6. vc中调用Com组件的方法详解

    vc中调用Com组件的方法详解 转载自:网络,来源未知,如有知晓者请告知我.需求:1.创建myCom.dll,该COM只有一个组件,两个接口:   IGetRes--方法Hello(),   IGet ...

  7. Angular.js中处理页面闪烁的方法详解

    Angular.js中处理页面闪烁的方法详解 前言 大家在使用{{}}绑定数据的时候,页面加载会出现满屏尽是{{xxx}}的情况.数据还没响应,但页面已经渲染了.这是因为浏览器和angularjs渲染 ...

  8. Java AtomicInteger类的使用方法详解_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 首先看两段代码,一段是Integer的,一段是AtomicInteger的,为以下: public class Samp ...

  9. php中读取大文件实现方法详解

    php中读取大文件实现方法详解 来源:   时间:2013-09-05 19:27:01   阅读数:6186 分享到:0 [导读] 本文章来给各位同学介绍php中读取大文件实现方法详解吧,有需要了解 ...

随机推荐

  1. (转)如何检查系统是否支持Zend Optimizer

    原文地址:http://blog.chinaunix.net/uid-25266990-id-2978539.html Zend Optimizer 主要有两个功能: 1.可以加速 PHP 脚本的执行 ...

  2. NSUrl 的常见用法

    NSURL *url = [NSURL URLWithString:@"http://www.baidu.com/s?tn=baiduhome_pg&bs=NSRUL&f=8 ...

  3. 《Code Complete》ch.21 协同构建

    WHAT? 所有的协同构建技术都试图通过这样那样的途径,将展示工作的过程正式化,以便将错误暴露出来 WHY? 提高缺陷检出率,从而缩短开发周期,降低开发成本 发现不明显的错误信息,如不恰当的注释.硬编 ...

  4. 150 Opening ASCII mode data connection. FTP连接的PASV和PORT方式

    FTP连接服务器时出现 150 Opening ASCII mode data connection.一般是客户端设置PORT 主动方式连接造成的.切换成PASV 被动模式后一般能连接上. 一.什么是 ...

  5. Debian的一个命令

    dpkg是一个Debian的一个命令行工具,它可以用来安装.删除.构建和管理Debian的软件包.下面是它的一些命令解释:1)安装软件命令行:dpkg -i <.deb file name> ...

  6. MXNet符号编程

    构成符号: 符号对我们想要进行的计算进行了描述, 下图展示了符号如何对计算进行描述. 下图定义了符号变量A, 符号变量B, 生成了符号变量C, 其中, A, B为参数节点, C为内部节点! mxnet ...

  7. 架构设计--逻辑层 vs 物理层

    如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 Layer 和Tier都是层,但是他们所表现的含义不同,Tier指的是软件系统中物理 ...

  8. Calendar的add()方法介绍

    [java] view plaincopy public static Date addYears(Date date, int amount) { return add(date, 1, amoun ...

  9. 学习总结 java 父子级

    package com.hanqi; //父类 public class Father { // public Father() // { // // } // public Father(Strin ...

  10. 农村的“无为教育” (FW)

    农村的“无为教育” 发布时间:2009年11月5日 11时33分 “以孩子影响孩子”,准确地说,是以偏远乡村贫困家庭的进取孩子,影响城市有相当收入的“问题孩子”.有两点值得注意,一是农村孩子影响城市孩 ...