zoukankan      html  css  js  c++  java
  • Delphi中TStringList类常用属性方法详解

    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

  • 相关阅读:
    topcoder srm 445 div1
    topcoder srm 440 div1
    topcoder srm 435 div1
    topcoder srm 430 div1
    topcoder srm 400 div1
    topcoder srm 380 div1
    topcoder srm 370 div1
    topcoder srm 425 div1
    WKWebView强大的新特性
    Runtime那些事
  • 原文地址:https://www.cnblogs.com/smartlittleant/p/4080449.html
Copyright © 2011-2022 走看看