标签: tstringlist

Delphi:StringList Delimiter始终是空格字符,即使设置了Delimiter也是如此

我在TStringList类中使用分隔符时遇到问题.看一看:

var
  s: string;
  sl: TStringList;

begin
  sl := TStringList.Create;
  s := 'Users^foo bar^bar foo^foobar^barfoo';
  sl.Delimiter := '^';
  sl.DelimitedText := s;
  ShowMessage(sl[1]);
end;
Run Code Online (Sandbox Code Playgroud)

sl[1] 应该回来 'foo bar'

sl[1] 回来了 'foo'

看来分隔符现在是'^'AND' '

有任何想法吗?

delphi tstringlist delphi-7 delimiter

54
推荐指数
3
解决办法
7万
查看次数

为什么变量被声明为TStrings并创建为TStringList?

为什么变量被声明为TStrings和创建为TStringList

例如:var sl声明为,TStrings但创建为TStringList

var
  sl : TStrings;
begin
  sl := TStringList.Create;

  // add string values...
  sl.Add( 'Delphi' );
  sl.Add( '2.01' );

  // get string value using its index
  // sl.Strings( 0 ) will return
  //   'Delphi'
  MessageDlg(
    sl.Strings[ 0 ],
    mtInformation, [mbOk], 0 );

  sl.Free;
end;
Run Code Online (Sandbox Code Playgroud)

delphi tstringlist

38
推荐指数
4
解决办法
2万
查看次数

TStringList拆分错误

最近我被一位声誉卓着的SO用户告知,它TStringList有分裂错误,导致它无法解析CSV数据.我没有被告知这些错误的性质,在互联网上搜索包括Quality Central没有产生任何结果,所以我问.什么是TStringList拆分错误

注意,我对没有根据意见​​的答案感兴趣.


我知道的:

并不多......其中一个就是,这些错误很少出现在测试数据中,但在现实世界中却很少见.

另一方面,如上所述,它们阻止了对CSV的正确解析.认为很难用测试数据重现错误,我(可能)寻求帮助,他们尝试在生产代码中使用字符串列表作为CSV解析器.

无关紧要的问题:

我获取了有关'Delphi-XE'标记问题的信息,因此由于"空格字符被视为分隔符" 功能而无法解析,因此不适用.因为StrictDelimiterDelphi 2006 引入的属性解决了这个问题.我,我自己,正在使用Delphi 2007.

此外,由于字符串列表只能包含字符串,因此它只负责拆分字段.涉及由区域差异等引起的字段值(fi日期,浮点数......)的任何转换难度都不在范围内.

基本规则:

CSV没有标准规范.但是从各种规范中可以推断出基本规则.

下面演示TStringList如何处理这些.规则和示例字符串来自维基百科.括号([ ])叠加在字符串周围,以便能够通过测试代码查看前导或尾随空格(相关).


空间被认为是一个领域的一部分,不应该被忽视.

Test string: [1997, Ford , E350]
Items: [1997] [ Ford ] [ E350]


带嵌入逗号的字段必须包含在双引号字符中.

Test string: [1997,Ford,E350,"Super, luxurious truck"]
Items: [1997] [Ford] [E350] [Super, luxurious truck]


具有嵌入式双引号字符的字段必须包含在双引号字符中,并且每个嵌入的双引号字符必须由一对双引号字符表示.

Test string: [1997,Ford,E350,"Super, ""luxurious"" truck"]
Items: [1997] [Ford] [E350] [Super, "luxurious" truck]


嵌入换行符的字段必须包含在双引号字符中.

Test string: [1997,Ford,E350,"Go get one …

csv delphi tstringlist delphi-2007

30
推荐指数
1
解决办法
6512
查看次数

TStringList与TList <string>

使用标准有什么不同

type 
  sl: TStringList 
Run Code Online (Sandbox Code Playgroud)

与使用通用TList相比

type 
  sl: TList<string>
Run Code Online (Sandbox Code Playgroud)

据我所知,两者表现完全相同.

这只是做同样事情的另一种方式吗?

是否存在一个比另一个好的情况?

谢谢!

delphi generics tstringlist

29
推荐指数
2
解决办法
1万
查看次数

为什么memo.Lines使用TStrings而不是TStringList?

为什么要Memo.Lines使用抽象类TStrings?为什么不使用TStringList呢?

我应该TStringList在使用它之前将其转换为它吗?

delphi tstringlist memo

20
推荐指数
1
解决办法
1万
查看次数

delphi数组字符串stringlist转换

在delphi中有一种简单的方法可以将字符串数组转换为tstringlist吗?

arrays delphi tstringlist

16
推荐指数
2
解决办法
2万
查看次数

如何在Delphi中以不同的方式对TStringList进行排序

我有一个简单的TStringList.我做了一个TStringList.Sort.

然后我注意到下划线"_"在大写字母"A"之前排序.这与排序相同文本并在A之后排序_的第三方软件包形成对比.

根据ANSI字符集,AZ是字符65 - 90,_是95.所以看起来第三方包使用该顺序而TStringList.Sort不是.

我深入研究了TStringList.Sort的内容,并使用AnsiCompareStr(Case Sensitive)或AnsiCompareText(Case Insensitive)进行排序.我尝试了两种方法,将我的StringList的CaseSensitive值设置为true,然后设置为false.但在这两种情况下,"_"首先排序.

我无法想象这是TStringList中的一个错误.所以这里肯定有其他东西我没有看到.可能是什么?

我真正需要知道的是如何让我的TStringList进行排序,使其与其他包的顺序相同.

作为参考,我使用Delphi 2009,我在我的程序中使用Unicode字符串.


所以这里的最终答案是覆盖Ansi与你想要的任何东西比较(例如非ansi比较),如下所示:

type
  TMyStringList = class(TStringList)
  protected
    function CompareStrings(const S1, S2: string): Integer; override;
  end;

function TMyStringList.CompareStrings(const S1, S2: string): Integer;
begin
  if CaseSensitive then
    Result := CompareStr(S1, S2)
  else
    Result := CompareText(S1, S2);
end;
Run Code Online (Sandbox Code Playgroud)

delphi sorting ansi tstringlist

13
推荐指数
2
解决办法
2万
查看次数

使用TStringList的AddObject和整数?

使用delphi 7:

  • 如何使用AddObject?将一个整数添加到stringlist项的对象部分?
  • 如何从stringlist项的对象属性中检索整数?
  • 完成后如何释放所有对象并列出?

delphi tstringlist delphi-7

12
推荐指数
1
解决办法
1万
查看次数

使用分隔符将TStringlist转换为字符串

我有一个存储在TStringList中的字符串列表,我想将其转换为由逗号分隔的字符串,我使用以下代码

channelList: TStringList;
aCurrentChannel :=  Stringreplace(channelList.Text,Char(13)+Char(10),',',[rfReplaceAll]);
Run Code Online (Sandbox Code Playgroud)

但最后一个角色来了,就像1,2,无论如何都要避免这种情况?

delphi tstringlist

12
推荐指数
2
解决办法
2万
查看次数

从TStringList中删除重复项

我正在解析数据集并为TStringList我想要避免重复项分配值.我使用以下代码但仍插入重复项.

  channelList := TStringList.Create;
  channelList.Duplicates := dupIgnore;
  try
    dataset.First;
    while not dataset.EOF do
    begin
        channelList.Add(dataset.FieldByName('CHANNEL_INT').AsString)  ;
        dataset.Next;
    end;
Run Code Online (Sandbox Code Playgroud)

为什么要添加重复项?

delphi tstringlist

11
推荐指数
2
解决办法
1万
查看次数

标签 统计

delphi ×10

tstringlist ×10

delphi-7 ×2

ansi ×1

arrays ×1

csv ×1

delimiter ×1

delphi-2007 ×1

generics ×1

memo ×1

sorting ×1