精易论坛

标题: 文本_分割文本排序_快速 BUG [打印本页]

作者: 521001040    时间: 2024-7-5 02:54
标题: 文本_分割文本排序_快速 BUG
文本_分割文本排序_快速 (“A_10|B_3|C_1|D_3|E_1|F_11”, “|”, “_”, 2, 2, 真, C)

其中参数"排序方向正向" 无效

作者: Suky    时间: 2024-7-5 04:33
  
子程序名返回值类型公开备 注
文本_分割文本排序_快速文本型 将多行用特定字符间隔的文本按某一列排序。支持文本、整数、小数和日期时间类型。失败返回空。快速排序算法 【afu45】
参数名类 型参考可空数组备 注
要排序的文本文本型原文本
行分隔符文本型按行分割出每条数据,默认 #换行符
列分隔符文本型按列分割出每个字段数据。如果本参数被省略,默认用字符|分割
排序的列整数型按哪一列排序,从1开始。如果本参数被省略,默认按第1列排序
数据类型整数型指定按哪种数据类型来排序,1.文本 2.整数 3.小数 4.日期时间(格式参考 到时间 ())。 默认按 1.文本排序
排序方向正向逻辑型如果参数值为真,排序将从小到大;如果为假,则为从大到小。如果本参数被省略,将默认为真
返回数组文本型返回排序后的数组
变量名类 型静态数组备 注
排序数组自定义排序数组0
文本数组文本型0
文本数组2文本型0
i整数型 
结果文本型 
排序变量自定义排序数组0
数据成员数量整数型 
插入位置整数型 
当前数据自定义排序数组 
当前分区成员数整数型 
当前位置整数型 
中间位置整数型 
中间数据自定义排序数组 
' 该历程收录自: [url]https://125.confly.eu.org/forum.php?mod=viewthread&tid=14759043[/url]
如果真 (要排序的文本 = “”)
返回 (“”)
如果真 (是否为空 (行分隔符))
行分隔符 = #换行符
如果真 (是否为空 (列分隔符))
列分隔符 = “|”
如果真 (是否为空 (排序的列))
排序的列 = 1
如果真 (是否为空 (数据类型))
数据类型 = 1
如果真 (是否为空 (排序方向正向))
排序方向正向 = 真

文本数组 = 分割文本 (要排序的文本, 行分隔符, )
计次循环首 (取数组成员数 (文本数组), i)
文本数组2 = 分割文本 (文本数组 [i], 列分隔符, )
如果真 (排序的列 < 1 排序的列 > 取数组成员数 (文本数组2))
返回 (“”)
判断 (数据类型 = 2)  ' 整数
当前数据.整数 = 到整数 (文本数组2 [排序的列])
判断 (数据类型 = 3)  ' 小数
当前数据.小数 = 到小数 (文本数组2 [排序的列])
判断 (数据类型 = 4)  ' 日期时间
当前数据.日期时间 = 到时间 (文本数组2 [排序的列])
当前数据.文本 = 文本数组2 [排序的列]  ' 其他情况都按文本
数据类型 = 1
当前数据.原数据 = 文本数组 [i]
加入成员 (排序数组, 当前数据)
计次循环尾 ()
数据成员数量 = 取数组成员数 (排序数组)
计次循环首 (数据成员数量, i)
当前位置 = 1
当前分区成员数 = 取数组成员数 (排序变量)
当前数据 = 排序数组 [i]
判断 (i = 1)
插入成员 (排序变量, 1, 当前数据)
到循环尾 ()
判断 (数据类型 = 1 文本比较 (当前数据.文本, 排序变量 [当前分区成员数].文本, ) ≥ 0 数据类型 = 2 当前数据.整数 ≥ 排序变量 [当前分区成员数].整数 数据类型 = 3 当前数据.小数 ≥ 排序变量 [当前分区成员数].小数 数据类型 = 4 当前数据.日期时间 > 排序变量 [当前分区成员数].日期时间)
插入成员 (排序变量, 当前分区成员数 + 1, 当前数据)
到循环尾 ()
判断 (数据类型 = 1 文本比较 (当前数据.文本, 排序变量 [1].文本, ) ≤ 0 数据类型 = 2 当前数据.整数 ≤ 排序变量 [1].整数 数据类型 = 3 当前数据.小数 ≤ 排序变量 [1].小数 数据类型 = 4 当前数据.日期时间 ≤ 排序变量 [1].日期时间)
插入成员 (排序变量, 1, 当前数据)
到循环尾 ()



判断循环首 (当前位置 < 当前分区成员数 - 1)
中间位置 (当前位置 + 当前分区成员数) \ 2
中间数据 = 排序变量 [中间位置]
如果真 (数据类型 = 1 当前数据.文本 = 中间数据.文本 数据类型 = 2 当前数据.整数 = 中间数据.整数 数据类型 = 3 当前数据.小数 = 中间数据.小数 数据类型 = 4 当前数据.日期时间 = 中间数据.日期时间)
当前位置 = 中间位置
跳出循环 ()

如果 (数据类型 = 1 当前数据.文本 < 中间数据.文本 数据类型 = 2 当前数据.整数 < 中间数据.整数 数据类型 = 3 当前数据.小数 < 中间数据.小数 数据类型 = 4 当前数据.日期时间 < 中间数据.日期时间)
当前分区成员数 = 中间位置
当前位置 = 中间位置

判断循环尾 ()
插入位置 = 当前位置 + 1
插入成员 (排序变量, 插入位置, 当前数据)
计次循环尾 ()
如果真 (是否为空 (返回数组))
重定义数组 (返回数组, 假, 0)
如果 (排序方向正向)
计次循环首 (取数组成员数 (排序变量), i)
结果 = 结果 + 排序变量 [i].原数据 + 选择 (取数组成员数 (排序数组) = i, “”, 行分隔符)
如果真 (是否为空 (返回数组))
加入成员 (返回数组, 排序变量 [i].原数据)

计次循环尾 ()


计次循环首 (取数组成员数 (排序变量), i)
结果 = 结果 + 排序变量 [数据成员数量 - i + 1].原数据 + 选择 (取数组成员数 (排序数组) = i, “”, 行分隔符)
如果真 (是否为空 (返回数组))
加入成员 (返回数组, 排序变量 [i].原数据)

计次循环尾 ()

返回 (结果)


源码里看不出来什么原因导致的
测试证实bug存在
需要再逐步检查才能确定位置

作者: Suky    时间: 2024-7-5 04:44
本帖最后由 Suky 于 2024-7-5 04:45 编辑
  
如果 (排序方向正向)
计次循环首 (取数组成员数 (排序变量), i)
结果 = 结果 + 排序变量 .原数据 + 选择 (取数组成员数 (排序数组) = i, “”, 行分隔符)
如果真 (是否为空 (返回数组))
加入成员 (返回数组, 排序变量 .原数据)

计次循环尾 ()


计次循环首 (取数组成员数 (排序变量), i)
结果 = 结果 + 排序变量 [数据成员数量 - i + 1].原数据 + 选择 (取数组成员数 (排序数组) = i, “”, 行分隔符)
调试输出 (数据成员数量 - i + 1)
如果真 (是否为空 (返回数组))
加入成员 (返回数组, 排序变量 .原数据)

计次循环尾 ()


i支持库列表   支持库注释   
spec特殊功能支持库

找到bug原因了
排序方向正向为假这里,加入成员 (返回数组, 排序变量 .原数据)   这里的数组下标错了,应该是  数据成员数量 - i + 1


这就是复制相似代码后没改完全导致的   
@项目部004

作者: Suky    时间: 2024-7-5 04:48
  
调试输出 (文本_分割文本排序_快速 (“A_10|B_3|C_1|D_3|E_1|F_11”, “|”, “_”, 2, 2, 真, C))
调试输出 (C)
调试输出 (文本_分割文本排序_快速 (“A_10|B_3|C_1|D_3|E_1|F_11”, “|”, “_”, 2, 2, 假, C))
调试输出 (C)


i支持库列表   支持库注释   
spec特殊功能支持库


* “E_1|C_1|B_3|D_3|A_10|F_11”
* 数组:6{“E_1”,“C_1”,“B_3”,“D_3”,“A_10”,“F_11”}
* “F_11|A_10|D_3|B_3|C_1|E_1”
* 数组:6{“E_1”,“C_1”,“B_3”,“D_3”,“A_10”,“F_11”}


看了半天,迷迷糊糊,看到返回值,就调试输出了一下,结果看到返回文本跟数组结果不一致
然后才发现bug所在地

作者: 我的yyy123    时间: 2024-7-5 17:42
谢谢分享,学习了
作者: 心情贝比    时间: 2024-7-6 23:50
我是来学习的
作者: shituo    时间: 2024-7-7 21:12
都不更新了  还提交什么BUG
作者: Suky    时间: 2024-7-8 16:08
@shituo 我怎么没发现问题? 他排序的是第二列 就是后面数字部分阿 怎么不对了、》》 ?
bug点是  返回数组那里    不管排序方向正向是真是假,返回的数组结果都是排序方向为正向时候的
返回文本没错,返回数组里错了
作者: shituo    时间: 2024-7-9 01:26
Suky 发表于 2024-7-8 16:08
@shituo 我怎么没发现问题? 他排序的是第二列 就是后面数字部分阿 怎么不对了、》》 ?
bug点是  返回数组 ...

明天修复
作者: 戏如人生dm    时间: 2024-7-20 18:52
没有遇到此类错误!
作者: pq9999    时间: 2024-7-23 20:05
#在这里 感谢分享,很给力!~快速 感谢分享,很给力!~回复#
作者: sucuang    时间: 2024-8-2 12:07
111111111111
作者: 1346497276    时间: 2024-8-13 18:37
6666666666666666666666666
作者: wuruirui2022    时间: 2024-8-16 16:01
谢谢了
作者: dangerace    时间: 2024-9-2 16:02
shituo 发表于 2024-7-7 21:12
都不更新了  还提交什么BUG

有bug还是应该提出来的,这样好让其他人都知道这里有坑,能改的自己改,自己不能改的起码知道避坑不是。
作者: 炸弹    时间: 2024-9-30 12:24
感谢分享

作者: 不离01    时间: 2025-4-10 23:40
6666666666666666




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4