冥界3大法王 发表于 2024-9-22 21:57

有如下:按数字开头的字符串列表,按数字升序排序?

内容如下:
1.大白补丁
10.沙盘
12.网络抓包
13.一机一码
15.易窗助手
16.注册表
17.查壳相关
18.TC9.5.1
19.FileLocatorPro_8.5.2951
2.API监控
20.快速搜索
21.列依赖相关
22.算钥查询
23.添加区段
24.资源修改
25.穷举破解
26.修复导入表
27.反调试
28.去数字签名
3.黑客进程
30.文本编辑
31.BeyondCompare
33.磁盘类
34.提权
4.16进制编辑
6.汇编比较
7.灰色按钮
8.火绒盾
9.进程监控
按数字升序排序?用Delphi实现。{:301_974:}

hebeijianke 发表于 2024-9-22 23:27

program SortStrings;

{$APPTYPE CONSOLE}

uses
System.SysUtils,
System.Generics.Collections,
System.Generics.Defaults;

// 自定义比较器
function CompareStrings(const Left, Right: string): Integer;
var
LeftNum, RightNum: Integer;
begin
LeftNum := StrToInt(Left.Split(['.']));
RightNum := StrToInt(Right.Split(['.']));
Result := CompareValue(LeftNum, RightNum);
end;

var
StringList: TArray<string>;
SortedList: TArray<string>;
begin
// 初始化字符串数组
StringList := TArray<string>.Create(
    '1.大白补丁', '10.沙盘', '12.网络抓包', '13.一机一码', '15.易窗助手',
    '16.注册表', '17.查壳相关', '18.TC9.5.1', '19.FileLocatorPro_8.5.2951',
    '2.API监控', '20.快速搜索', '21.列依赖相关', '22.算钥查询',
    '23.添加区段', '24.资源修改', '25.穷举破解', '26.修复导入表',
    '27.反调试', '28.去数字签名', '3.黑客进程', '30.文本编辑',
    '31.BeyondCompare', '33.磁盘类', '34.提权', '4.16进制编辑',
    '6.汇编比较', '7.灰色按钮', '8.火绒盾', '9.进程监控'
);

// 对数组进行排序
TArray.Sort<string>(StringList, TComparer<string>.Construct(CompareStrings));

// 输出排序后的数组
for var Item in StringList do
    WriteLn(Item);

// 释放数组(实际上在这个例子中不需要,因为StringList是局部变量)
// StringList.Free; // 对于局部变量这是不必要的,且会导致编译错误
end.
不知道能运行不

冥界3大法王 发表于 2024-9-23 08:26

hebeijianke 发表于 2024-9-22 23:27
program SortStrings;

{$APPTYPE CONSOLE}


一堆错,AI机器人太坑爹。

塞北的雪 发表于 2024-9-23 09:51

本帖最后由 塞北的雪 于 2024-9-23 09:56 编辑

<?php
$array = ['1.大白补丁', '10.沙盘', '12.网络抓包', '13.一机一码', '15.易窗助手',
    '16.注册表', '17.查壳相关', '18.TC9.5.1', '19.FileLocatorPro_8.5.2951',
    '2.API监控', '20.快速搜索', '21.列依赖相关', '22.算钥查询',
    '23.添加区段', '24.资源修改', '25.穷举破解', '26.修复导入表',
    '27.反调试', '28.去数字签名', '3.黑客进程', '30.文本编辑',
    '31.BeyondCompare', '33.磁盘类', '34.提权', '4.16进制编辑',
    '6.汇编比较', '7.灰色按钮', '8.火绒盾', '9.进程监控'];
natsort($array);
$array = array_values($array); // 重新索引数组
print_r($array);
?>
Array
(
    => 1.大白补丁
    => 2.API监控
    => 3.黑客进程
    => 4.16进制编辑
    => 6.汇编比较
    => 7.灰色按钮
    => 8.火绒盾
    => 9.进程监控
    => 10.沙盘
    => 12.网络抓包
    => 13.一机一码
    => 15.易窗助手
    => 16.注册表
    => 17.查壳相关
    => 18.TC9.5.1
    => 19.FileLocatorPro_8.5.2951
    => 20.快速搜索
    => 21.列依赖相关
    => 22.算钥查询
    => 23.添加区段
    => 24.资源修改
    => 25.穷举破解
    => 26.修复导入表
    => 27.反调试
    => 28.去数字签名
    => 30.文本编辑
    => 31.BeyondCompare
    => 33.磁盘类
    => 34.提权
)
PHP是最好的编程语言,没有之一

gaoxiangfei 发表于 2024-9-24 10:58

现在班主用哪个delphi版本呢呢,共享一下

神仙不在 发表于 2024-9-24 12:52

搞不定,求大神用python来解答

冥界3大法王 发表于 2024-9-24 13:19

神仙不在 发表于 2024-9-24 12:52
搞不定,求大神用python来解答

谁说的?

procedure TForm8.While_Do循环Click(Sender: TObject);
var
I: integer;
match: TMatch;
begin
Memo2.Clear;
I := 1;
while I < 200 do
begin
    match := TRegEx.match(Memo1.Text, I.ToString + '\..*');
    if match.Success then
    begin
      Memo2.Lines.Add(match.Value);
    end;
    Inc(I);
end;
end;

冥界3大法王 发表于 2024-9-24 13:21

版本2:

procedure TForm8.升级版合体测试正则Click(Sender: TObject);
var
match: TMatch;
i: Integer;
begin
ShowMessage(Memo1.Lines.Count.ToString);
Memo2.Clear;
i := 1;
repeat
    match := TRegEx.match(Memo1.Text, i.ToString + '\..*');
    if match.Success then
    begin
      Memo2.Lines.Add(match.Value);
//   ShowMessage(i.ToString);
    end;
    Inc(i);
until (i = 200);
end;

lyrong2008 发表于 2024-9-25 11:48

厉害了!{:1_893:} delphi接触的并不多

冥界3大法王 发表于 2024-9-26 11:44

下面是当初脑残解决方案:(有bug)
procedure TForm1.用户指定文件夹下生成启动配置Click(Sender: TObject);
var
待生成工具集所在路径: string;
files: TStringDynArray;
配置文件中完整文件路径: string;
stringList: TStringList;
K, I: Integer;
变量1, 变量2: string;
match: TMatch;
begin
Memo1.Clear;
Memo2.Clear;
待生成工具集所在路径 := InputBox('请输入', '准备遍历的文件夹完整路径', 'X:\0.自创工具for delphi10.4.1\20.杂交外观浮动工具栏漂亮版x64dbg贴心助手\Tools');
files := TDirectory.GetFiles(待生成工具集所在路径, '*.exe', TSearchOption.soAllDirectories);
//for str in files do
//   Memo2.Lines.Add(str);
stringList := TStringList.Create;
for 配置文件中完整文件路径 in files do
begin
//    ShowMessage(str);
    stringList.Sorted := True;
    stringList.Duplicates := dupIgnore;    //去重项
    stringList.BeginUpdate;                //必须加上这个!

    变量1 := StringReplace(配置文件中完整文件路径, 待生成工具集所在路径 + '\', '', );
    //ShowMessage(变量1);
    match := TRegEx.match(变量1, '\\.*');
    if match.Success then
    begin
   //ShowMessage(match.Value);
//      Clipboard.AsText := match.Value;
      变量2 := match.Value;
      变量2 := StringReplace(变量1, 变量2, '', );
    end;
    stringList.EndUpdate;         //似乎不加也行!
    stringList.Add(变量2);
    stringList.Sort;
end;

//放在这下面!
K := 1;
while K < 200 do    //假设InputBox用户指定的目录下最多200个子工具文件夹!
begin
    match := TRegEx.match(stringList.Text, K.ToString + '\..*');
    if match.Success then
    begin
      Memo2.Lines.Add(match.Value);
//      ShowMessage(match.Value);
//这后面加上按[小节找到]后的内容,依次写入.ini
    end;
    Inc(K);
end;


//Memo1.Lines.AddStrings(stringList);
end;


=============================
下面是AI回答,加我自己修改完善的,测试达标的代码:

procedure SortByNumericValue(const List: TStringList);
var
I, J: Integer;
Regex: TRegEx;
Match: TMatch;
IntValueI, IntValueJ: Integer;
begin
// 正则表达式,用于匹配字符串中的数字
Regex := TRegEx.Create('\d+');

// 使用冒泡排序算法根据数字对字符串列表进行排序
for I := 0 to List.Count - 2 do
    for J := I + 1 to List.Count - 1 do
    begin
      // 尝试匹配数字
      Match := Regex.Match(List);
      if Match.Success then
      IntValueI := StrToInt(Match.Value)
      else
      IntValueI := 0;

      Match := Regex.Match(List);
      if Match.Success then
      IntValueJ := StrToInt(Match.Value)
      else
      IntValueJ := 0;

      // 如果第二个数字大于第一个数字,则交换它们的位置
      if IntValueJ < IntValueI then
      begin
      List.Exchange(I, J);
      end;
    end;
end;


procedure TForm1.重新最优化组合Click(Sender: TObject);
var
DirectoriesList: TStringDynArray;
I: Integer;
小节名列表: TStringList;
待生成工具集所在路径: string;
begin
小节名列表 := TStringList.Create;
待生成工具集所在路径 := InputBox('请输入', '准备遍历的文件夹完整路径', 'X:\0.自创工具for delphi10.4.1\20.杂交外观浮动工具栏漂亮版x64dbg贴心助手\Tools');
try
    //获取当前目录及其所有子目录的名称列表
    DirectoriesList := TDirectory.GetDirectories(待生成工具集所在路径);
    //遍历并显示所有目录名称
    for I := 0 to Length(DirectoriesList) - 1 do
    begin
      Memo1.Lines.Add(ExtractFileName(DirectoriesList));
      小节名列表.Add(ExtractFileName(DirectoriesList));
    end;
except
    on E: Exception do
      Writeln('发生异常: ' + E.Message);
end;

Memo1.Clear;
try
// 添加一些包含数字的字符串
//    小节名列表.Add('1.大白补丁');
    // 排序
    SortByNumericValue(小节名列表);
    // 输出排序后的结果
    for var Item in 小节名列表 do
      Memo1.Lines.Add(Item);
finally
    ShowMessage('小节名列表(StringList的内容)是:' + #13#10 + 小节名列表.Text);
    小节名列表.Free;
end;
///// ↑↑↑↑↑↑以下内容完成遍历当前目录,得到小节名,排序备用 ↑↑↑↑↑↑   ///
end;
页: [1] 2
查看完整版本: 有如下:按数字开头的字符串列表,按数字升序排序?