相关疑难解决方法(0)

如何在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万
查看次数

如何在C中按顺序对数字和字母排序文件名?

我使用以下代码按字母顺序对文件进行排序,并对文件进行排序,如图所示:

for(int i = 0;i < maxcnt;i++) 
{
    for(int j = i+1;j < maxcnt;j++)
    {           
        if(strcmp(Array[i],Array[j]) > 0)
        {            
            strcpy(temp,Array[i]);      
            strcpy(Array[i],Array[j]);      
            strcpy(Array[j],temp);    
        }    
    } 
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但我需要按照Windows资源管理器中的顺序对其进行排序

在此输入图像描述

怎么这样排序?请帮忙

c c++ sorting

12
推荐指数
4
解决办法
6980
查看次数

是否有文件名排序的比较功能?

可能重复:
如何在Windows资源管理器中获取Delphi中的排序顺序?

我正在寻找一个与Windows资源管理器完全相同的功能(文件排序).现在我正在使用CompareText函数,但它导致以下结果:

---------  /\  ---------
 AFile
 BFile
 _XFile
-----------------------
Run Code Online (Sandbox Code Playgroud)

Windows资源管理器以这种方式对相同的项目进行排序(这就是我想要的):

---------  /\  ---------
 _XFile
 AFile
 BFile
-----------------------
Run Code Online (Sandbox Code Playgroud)

是否有这种比较的功能或我应该由我自己处理?

谢谢!

delphi sorting file windows-explorer delphi-xe2

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

如何按第一个数字排序列表?

我有一个巨大的用户列表,每个用户都有它的ID,但是它的ID数字搞砸了,所以如果有人能告诉我如何按数字对用户进行排序,每个值都有这个表单

1:Stackoverflow
or
145000:Google 
Run Code Online (Sandbox Code Playgroud)

如果我手动这样做,我想我会失去理智,因为有超过700000条记录.谢谢你的时间和帮助....

delphi delphi-7

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

列出目录中的文件名并进行排序?

可能重复:
如何在Windows资源管理器中获取Delphi中的排序顺序?

我正在尝试扫描一个目录,但我无法通过文件名排序.

例如,如果我在文件夹中有这些文件名:

  • 文件1
  • 文件2
  • 文件3
  • FILE4
  • File5
  • File6
  • File7
  • File8
  • File9
  • File10
  • FILE11
  • File12
  • File13
  • FILE14
  • File15
  • File16
  • File17
  • File18
  • File19
  • File20
  • File21
  • File22

如果我使用这样的东西:

var
  SL: TStringList;
  SR: TSearchRec;  
begin
  SL := TStringList.Create;
  try
    if FindFirst(Path + '*.*', faAnyFile and not faDirectory and not faHidden, SR) = 0 then
    repeat
      SL.Add(Path + SR.Name)
    until FindNext(SR) <> 0;

    FindClose(SR);

    // handle the filenames..
  finally
    SL.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

结果将是:

  • File10
  • FILE11
  • File12
  • File13
  • FILE14
  • File15
  • File16
  • File17
  • File18
  • File19 …

delphi

0
推荐指数
1
解决办法
5455
查看次数

Delphi - 使用混合值对TStringList进行排序 - 整数和字符串

我对使用混合值排序TStringList有一点问题.它类似于:

7567533575 Joe
1543779744 Ann
9757462323 Jack
6999966578 Stef

我需要对此列表进行排序以查看:

1543779744 Ann
6999966578 Stef
7567533575 Joe
9757462323 Jack

我可以使用大约3x for循环,使用字符串修剪和一个数组来完成此操作.但这是非常蹩脚的解决方案...我想,有人有最好的代码.我不懂CustomSort ......呃.请帮我.

  • 我使用的是Delphi 10.

delphi sorting

-1
推荐指数
1
解决办法
341
查看次数

标签 统计

delphi ×5

sorting ×4

ansi ×1

c ×1

c++ ×1

delphi-7 ×1

delphi-xe2 ×1

file ×1

tstringlist ×1

windows-explorer ×1