【问题标题】:Sorting TSTringList Names property as integers instead of strings [duplicate]将 TSTringList Names 属性排序为整数而不是字符串 [重复]
【发布时间】:2013-03-15 02:44:58
【问题描述】:

我有一个大的文本数据文件,其中每一行看起来都是这样的

10005=08/18/09,No BS,25094,wrg1

且数据乱序(即等号前的数字)

我将此文件作为名称值对加载到 StringList 中。 TStringList 排序函数当然不会,因为数字是字符串而不是整数。

如何在将它们加载到 TStringList 之前将它们整理好?

我执行文件时是否有一个快速函数,它返回一个我可以分配给 TStringList 的 TStrings?

谢谢

【问题讨论】:

  • 为什么你需要按照描述的顺序?

标签: delphi


【解决方案1】:
function StrCmpLogicalW(sz1, sz2: PWideChar): Integer; stdcall;
  external 'shlwapi.dll' name 'StrCmpLogicalW';

function MyCompare(List: TStringList; Index1, Index2: Integer): Integer;
begin
  Result := StrCmpLogicalW(PWideChar(List[Index1]), PWideChar(List[Index2]));
end;

用法:

  StringList.CustomSort(MyCompare);

【讨论】:

  • @TLama 不需要声明为PWideChar,见this answer
  • 我知道这不是必需的(因此编辑评论)。如果在 Delphi 中定义,我最好使用 PCWSTR
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-23
  • 2019-03-01
相关资源
最近更新 更多