Delphi总结使用TStrings的一些技巧

时间:2021-11-29 19:28:23
  1. 先把要讨论的几个属性列出来:
  2. 1、CommaText
  3. 2、Delimiter & DelimitedText
  4. 3、Names & Values & ValueFromIndex
  5. 先看第一个:CommaText。怎么用呢?用代码说话:
  6. const
  7. constr :String = 'aaa,bbb,ccc,ddd';
  8. var
  9. strs :TStrings;
  10. i :Integer;
  11. begin
  12. strs := TStringList.Create;
  13. strs.CommaText := constr;
  14. for i := 0 to Strs.Count-1 do
  15. ShowMessage(Strs[i]);
  16. end;
  17. 执行了这段代码后,可以看到ShowMessage显示出来的分别是:aaa bbb ccc ddd。
  18. 也就是说,strs.CommaText := constr这一句的作用,就是把一个字符串以'',''为分割符,分段添加到TStrings中。
  19. 那么如果不是以'',''来分割,又该怎么做呢?现在看第二个例子。使用Delimiter和DelimitedText。
  20. const
  21. constr :String = 'aaa\bbb\ccc\ddd';
  22. var
  23. strs :TStrings;
  24. i :Integer;
  25. begin
  26. strs := TStringList.Create;
  27. strs.Delimiter := '\';
  28. strs.DelimitedText := constr;
  29. for i := 0 to Strs.Count-1 do
  30. ShowMessage(Strs[i]);
  31. end;
  32. 可以看到, 显示的效果和第一个例子是一模一样的。解释一下:
  33. Delimiter为分隔符,默认为:'',''。DelimitedText就是按Delimiter为分隔符的一个串,得到赋值后会把这个字符串按Delimiter的字符添加到TStrings中。
  34. 说到这里,有想起一个属性,QuoteChar。其默认值为:''"''(不包括单引号)
  35. 有何用呢?看例子:
  36. const
  37. constr :String = '"aaa"\"bbb"\"ccc"\"ddd"';
  38. var
  39. strs :TStrings;
  40. i :Integer;
  41. begin
  42. strs := TStringList.Create;
  43. strs.Delimiter := '\';
  44. strs.DelimitedText := constr;
  45. for i := 0 to Strs.Count-1 do
  46. ShowMessage(Strs[i]);
  47. end;
  48. 显示出来的仍然是aaa bbb ccc ddd。为什么不是:"aaa" "bbb" "ccc" "ddd"呢?
  49. 再来看一个例子:
  50. const
  51. constr :String = '|aaa|\|bbb|\|ccc|\|ddd|';
  52. var
  53. strs :TStrings;
  54. i :Integer;
  55. begin
  56. strs := TStringList.Create;
  57. strs.Delimiter := '\';
  58. strs.QuoteChar := '|';
  59. strs.DelimitedText := constr;
  60. for i := 0 to Strs.Count-1 do
  61. ShowMessage(Strs[i]);
  62. end;
  63. 显示出来的又是aaa bbb ccc ddd。对比一下,应该不难明白吧?这个就不多说了,用得也不多。
  64. 但是还要多说一句,当Delimiter为:'',''而QuoteChar为:''"''时,DelimitedText和CommaText是同等的。
  65. 最后要说的三个是:Names & Values & ValueFromIndex。
  66. 看看下面的代码:
  67. const
  68. constr :String = '0=aaa,1=bbb,2=ccc,3=ddd';
  69. var
  70. strs :TStrings;
  71. i :Integer;
  72. begin
  73. strs := TStringList.Create;
  74. strs.CommaText := constr;
  75. for i := 0 to strs.Count-1 do
  76. begin
  77. ShowMessage(strs.Names[i]);
  78. ShowMessage(strs.Values[strs.Names[i]]);
  79. ShowMessage(strs.ValueFromIndex[i]);
  80. end;
  81. end;
  82. 通过这个例子不难看出:
  83. 这个时候strs中的内容是:
  84. 0=aaa
  85. 1=bbb
  86. 2=ccc
  87. 3=ddd
  88. 而Names中则是:
  89. 0
  90. 1
  91. 2
  92. 3
  93. 在Values中则是:
  94. aaa
  95. bbb
  96. ccc
  97. ddd
  98. 这几个属性用来处理ini文件是非常好用的。
  99. 另外说一句,在Delphi6下似乎没有ValueFromIndex这个属性