如何在 Delphi 中像在 Windows 资源管理器中一样获取排序顺序?

2024-01-29

总结:

  1. 我曾经使用过的术语 寻找似乎是“自然的” 种类”。
  2. 对于操作系统中的行为:

    • 对于 Windows(版本 >= XP),Windows 资源管理器利用自然 种类。
    • 对于 Linux 终端:使用“ls -v”而不是普通的“ls”以获得自然效果 种类。
  3. 对于在 Delphi 中编程,请使用 StrCmpLogicalW Windows API 来获得自然排序。

  4. For programing in Delphi & Kylix & Lazarus, use hand-crafted functions to get natural sort:
    • (1) Martin Pool 的用于自然顺序字符串比较的 Delphi 包装器。
      http://irsoft.de/web/strnatcmp-and-natsort-for-delphi http://irsoft.de/web/strnatcmp-and-natsort-for-delphi
    • (2)来自davekeolle站点的其他语言的字母排序算法代码。
      http://www.davekoelle.com/alphanum.html http://www.davekoelle.com/alphanum.html
    • (3)其他知识页面:
      http://www.codinghorror.com/blog/2007/12/sorting-for- humans-natural-sort-order.html http://www.codinghorror.com/blog/2007/12/sorting-for-humans-natural-sort-order.html
      http://objectmix.com/delphi/722211-natural-sorting-optimizing-working-solution.html http://objectmix.com/delphi/722211-natural-sorting-optimizing-working-solution.html
      http://groups.google.com/group/borland.public.delphi.language.delphi.general/browse_thread/thread/1141d49f8bbba577 http://groups.google.com/group/borland.public.delphi.language.delphi.general/browse_thread/thread/1141d49f8bbba577
      http://objectmix.com/delphi/401713-alphanumeric-sort-routine-delphi.html http://objectmix.com/delphi/401713-alphanumeric-sort-routine-delphi.html

=========================

以下文件名将在 Windows 资源管理器中排序,如下所示:

测试_1_测试.txt

测试_2_测试.txt

test_11_test.txt

test_12_test.txt

test_21_test.txt

test_22_test.txt

例如,如果我将它们放入 TStringList 实例并调用 Sort,则排序顺序如下:

测试_1_测试.txt

test_11_test.txt

test_12_test.txt

测试_2_测试.txt

test_21_test.txt

test_22_test.txt

为了记录,上述文件名将在 Cygwin 的 rxvt 终端或 CentOS 等 Linux 发行版的 xterm 终端中排序,如下所示:

test_11_test.txt

test_12_test.txt

测试_1_测试.txt

test_21_test.txt

test_22_test.txt

测试_2_测试.txt

您能帮忙评论一下如何理解这种排序行为的差异吗?此外,是否可以得到与 Windows 资源管理器中相同的顺序?任何建议表示赞赏!

PS:我的 Windows 区域设置设置为中文,但我认为英语区域设置也是如此。


StrCmp逻辑W http://msdn.microsoft.com/en-us/library/bb759947%28v=vs.85%29.aspx能够处理数字,另一种选择是比较字符串 http://msdn.microsoft.com/en-us/library/dd317759%28v=vs.85%29.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Delphi 中像在 Windows 资源管理器中一样获取排序顺序? 的相关文章

  • 我可以在 Windows Azure 中设置成本上限吗?

    我想设置一个 Windows Azure 帐户 我是 MSDN 订阅者 因此前 16 个月我可以 免费 获得它 尽管如此 微软还是想要我的信用卡号码 以防我超出免费限额 从理论上讲 这意味着我正在向微软写一份全权委托书来向我的信用卡收取费用
  • Delphi - 引用在运行时创建的组件

    我正在使用 Delphi 5 并且在运行时创建许多面板 然后在面板上创建按钮 显然也是在运行时创建 我需要这样做 因为将来我可能需要动态创建更多面板 按钮组合 我可以完成所有这些 但我不知道如何引用我创建的面板 因为我找不到访问面板组件名称
  • RAM 到 RAM 的 DMA 传输

    我的一个朋友告诉我 在 x86 架构上 DMA 控制器无法在两个不同的 RAM 位置之间传输 它只能在RAM和外设 如PCI总线 之间传输 这是真的 因为 AFAIK DMA 控制器should能够在位于总线上并具有地址的任意设备之间 特别
  • Swift3 中的数组排序

    在我的代码中 我有一个如下所示的结构 struct Object var name String var count Int 我现在正在创建一个包含 10 个对象的数组 这些对象具有随机名称和随机计数 有没有一个简单的方法a 按字母顺序对它
  • woocommerce 在前端按库存和缺货对产品进行排序

    我想首先在产品类别中显示库存产品 或者如果可能的话在任何地方显示 然后我也想在 Woocommerce 中显示缺货产品 其实有很多产品没有数量但是有库存 所以需要检查库存状态 但我更喜欢先有更多的数量 在这种情况下 如何强制当前排序 非常感
  • 导出的 DLL 函数未按词法排序?

    嗯 今天我遇到了一个奇怪的事情 我不久前编写了自己的 GetProcAddress 版本 用于从远程进程获取函数地址 显然我花了很多时间阅读 PE 架构来找出解决这个问题的最佳方法 根据 PECOFF v8 规范 我认为这是最新的官方规范
  • 是否可以确定哪个键盘发送了按键?

    我有一个 Windows Media Center 遥控器 Windows 将其识别为键盘 当我使用 Windows Media Center 运行多显示器设置并在一个屏幕上播放视频时 遥控器的输入将与常规键盘一起定向到活动窗口 因此 当我
  • 如何防止从快照恢复虚拟机时出现“本机与域之间的信任关系失败”错误?

    当您从 足够旧的 快照恢复虚拟机 属于 Windows 域 时 您将收到以下错误 本机与域之间的信任关系失败 发生这种情况是因为域控制器定期更新计算机帐户密码 可能还有其他一些事情 有什么方法可以配置域控制器 或其他任何东西 以防止这种情况
  • 如何将 Windows 窗体应用程序 (C++) 设置为具有 Aero/Glass 背景?

    我正在使用 Visual Studio 2010 Pro 用 C 创建 Windows 窗体应用程序 我想创建一个透明背景 即使用 Aero Glass 效果 类似于它围绕 Windows 照片查看器中 UI 底部的方式 此时 我已经查看了
  • 如何使用 .Net (C#) 在 Windows 中安全地存储 AES 密钥?

    我一直在寻找一种方法来存储给定的 AES 密钥 以便无法检索它 但它仍然可以用于加密和解密 使用 C 我认为可以找到非对称密钥存储的等效项here http msdn microsoft com en us library tswxhw92
  • 对指针列表进行排序

    我再次发现自己在 C 中的一些非常简单的任务上失败了 有时我希望我能从 Java 中的 OO 中学到所有知识 因为我的问题通常是从像 Java 一样思考开始的 无论如何 我有一个std list
  • Delphi 生成的 Dylib 在 OSX 上的可靠部署

    我想在 OSX 上部署一个 dylib 它是用 Delphi 创建的 这个 dylib 应该是可由第三方应用程序加载 这看起来像是一个重复的问题 但经过大量搜索后 我找不到答案 这和这个是同一个问题 https forums embarca
  • 找出用户属于哪些组

    我有一个刚刚创建的 Windows 用户帐户 以 XYZ 为例 此 XYZ 属于我在计算机管理 gt 本地用户和组中创建的用户组和自定义组 因此 在属性中我看到该用户属于 2 个组 现在我想获取这些组并显示它们 有什么建议么 我已经这样做了
  • 数据太长,导致列错误(包含国家字符)

    我必须移植一些DBS变成独立的MySQL版本 5 0 18运行于Windows 7 64 位我遇到了一个困扰我的问题 如果我尝试将任何国家 Unicode 字符插入varchar我收到错误 ERROR 1406 22001 Data too
  • 在Delphi/Lazarus中设置提示窗口(THintWindow)的大小

    我正在尝试在 Lazarus 中进行自定义提示 到目前为止 我已经动态加载了提示中的文本 并自定义了字体 字体大小和字体颜色 我想限制提示窗口的宽度 有任何想法吗 这是我的代码 type TExHint class THintWindow
  • 删除 MongoDB 查询结果中的 "scanAndOrder" : true

    所以我的数据库中有一个带有以下分片键的集合 cl yyyy mm user id N 当我执行以下查询时 db collection find cl 2012 03 user id in users id lt new ObjectId 4
  • 排序数组最快的搜索方法是什么?

    正在回答另一个问题 https stackoverflow com questions 4752028 whats wrong with this interpolation search implementation 4752042 47
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 有适用于 Windows 的 Bonjour SDK 吗?

    我想知道如何在 Windows 上实现 bonjour 以便我可以在 Windows 上设置服务器并使用 iphone 客户端 中的 bonjour 服务访问 Windows 服务器 中的文件 谁能告诉我我们是否有适用于 Windows 的
  • 如何使用 LiveBindings 在 TStringGrid 中显示超过 200 行?

    我有一个TDataSource这是由一个支持TClientDataset绑定到一个TStringGrid 我通过右键单击网格并选择 Link to DB Datasource 然后选择数据源 这为我设置了 LiveBindings 当我运行

随机推荐