精易论坛

标题: 英文数字混编求排序源码 [打印本页]

作者: y2j423633    时间: 2017-6-19 19:48
标题: 英文数字混编求排序源码
已知文本内容为 数字+英文 / 英文+数字 的内容,求对该文本的排序源码

例子:已知文本为 aaa00001~aaa99999 或 abc00001~abc99999 ,需对英文及数字统一进行排序

例如,  aaa00001 排在 abc000001  前面,如果英文前缀一致,则只对数字进行排序

文本内容也有  00001aaaaaa 这种的,英文和数字的长度不定

不知道讲述的是否够清楚,有不清楚的跟帖回复一下,谢谢


补充内容 (2017-6-19 21:46):
http://125.confly.eu.org/forum.php?mod= ... 80&pid=11587153

已补需排序的文本例子,求大神出手
作者: 奇异博士    时间: 2017-6-19 19:48
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
文本数组文本型20
i整数型 
随机文本型 
置随机数种子 ()
计次循环首 (20, i)
随机 = 选择 (取字节集数据 (到字节集 (取随机数 (0, 1)), #逻辑型, ), “aaa”, “abc”)到文本 (取随机数 (1000, 9999))
文本数组 [i] = 随机
编辑框1.加入文本 (随机 + #换行符 )
计次循环尾 ()
文本排序 (文本数组, )
计次循环首 (20, i)
编辑框2.加入文本 (文本数组 [i]#换行符 )
计次循环尾 ()
子程序名返回值类型公开备 注
文本排序  
参数名类 型参考可空数组备 注
文本数组文本型
从小到大逻辑型默认从大到小
变量名类 型静态数组备 注
a整数型 
b整数型 
大数大数2
c整数型 
保留文本型 
数字文本型2
字节集1字节集 
字节集2字节集 
计次循环首 (取数组成员数 (文本数组), a)
计次循环首 (取数组成员数 (文本数组), b)
字节集1 = 到字节集 (文本数组 [a])
字节集2 = 到字节集 (文本数组 [b])
计次循环首 (取字节集长度 (字节集1), c)
数字 [1] = 数字 [1]到文本 (字节集1 [c])
计次循环尾 ()
大数 [1].导入文本 (数字 [1])
计次循环首 (取字节集长度 (字节集2), c)
数字 [2] = 数字 [2]到文本 (字节集2 [c])
计次循环尾 ()
大数 [2].导入文本 (数字 [2])
如果真 (选择 (从小到大, 大数 [1].小于 (大数 [2]), 大数 [1].大于 (大数 [2])))
保留 = 文本数组 [a]
文本数组 [a] = 文本数组 [b]
文本数组 [b] = 保留
大数 [1].销毁 ()
大数 [2].销毁 ()
数字 [1]“”
数字 [2]“”
计次循环尾 ()
计次循环尾 ()


i支持库列表   支持库注释   
eCalc数值计算支持库



补充内容 (2017-6-19 21:59):
小弟我只会写冒泡算法

QQ图片20170619215539.png (85.57 KB, 下载次数: 0)

效果图

效果图

源代码.e

5.97 KB, 下载次数: 4


作者: 潇洒&男孩    时间: 2017-6-19 20:00
你可以尝试下利用数据库的排序来实现!如果是想利用其它的排序的话我不懂!你可以坐等大神!
作者: 镇坛道德标杆    时间: 2017-6-19 20:07
demo.zip (1.62 KB, 下载次数: 10)      

作者: 呵呵仙    时间: 2017-6-19 20:37
就文本排序就OK了.
http://bbs.eyuyan.com/read.php?tid=397806
作者: 小淡    时间: 2017-6-19 20:49
  1. .版本 2
  2. .支持库 spec

  3. .局部变量 b, 文本型, , "0"
  4. .局部变量 z, 整数型, , "0"
  5. .局部变量 文本, 文本型
  6. .局部变量 i


  7. 文本 = “aaa00001/aaa99999/abc00001/abc99999”
  8. 文本 = 子文本替换 (文本, “aaa”, “888”, , , 真)
  9. 文本 = 子文本替换 (文本, “abc”, “999”, , , 真)
  10. b = 分割文本 (文本, “/”, )
  11. .计次循环首 (取数组成员数 (b), i)
  12.     加入成员 (z, 到整数 (b [i]))
  13. .计次循环尾 ()
  14. 数组排序 (z, 真)
  15. 清除数组 (b)
  16. .计次循环首 (取数组成员数 (z), i)
  17.     文本 = 到文本 (z [i])
  18.     .判断开始 (取文本左边 (文本, 3) = “888”)
  19.         文本 = “aaa” + 取文本右边 (文本, 取文本长度 (文本) - 3)
  20.     .判断 (取文本左边 (文本, 3) = “999”)
  21.         文本 = “abc” + 取文本右边 (文本, 取文本长度 (文本) - 3)
  22.     .默认

  23.     .判断结束
  24.     加入成员 (b, 文本)
  25. .计次循环尾 ()
  26. 调试输出 (b)
复制代码

作者: 粉蝴蝶软件    时间: 2017-6-19 21:05
  1. .版本 2
  2. .支持库 spec

  3. .程序集 窗口程序集_启动窗口

  4. .子程序 __启动窗口_创建完毕
  5. .局部变量 文本, 文本型
  6. .局部变量 n1, 整数型
  7. .局部变量 txt1, 整数型

  8. 文本 = “aaa00001”
  9. .计次循环首 (取文本长度 (文本), n1)
  10.     txt1 = 取文本中间 (文本, n1, 1)
  11.     .如果真 (取反 (是否为数字 (txt1)))
  12.         调试输出 (字母取位置 (txt1))
  13.     .如果真结束

  14. .计次循环尾 ()

  15. .子程序 字母取位置, 整数型, , 判断字母所在的循序,并返回位置,可用于判断先后,数值越小越靠前
  16. .参数 字母, 文本型
  17. .局部变量 字母组, 文本型, , "0"
  18. .局部变量 小写字母, 文本型
  19. .局部变量 n1, 整数型

  20. 字母组 = { “a”, “b”, “c”, “d”, “e”, “f”, “g”, “h”, “i”, “j”, “k”, “l”, “m”, “n”, “o”, “p”, “q”, “r”, “s”, “t”, “u”, “v”, “w”, “x”, “y”, “z” }
  21. 小写字母 = 到小写 (字母)
  22. .计次循环首 (取数组成员数 (字母组), n1)
  23.     .如果真 (小写字母 = 字母组 [n1])
  24.         返回 (n1)
  25.     .如果真结束
  26.     处理事件 ()
  27. .计次循环尾 ()
  28. 返回 (0)

  29. .子程序 是否为数字, 逻辑型
  30. .参数 文本, 文本型

  31. .如果真 (到文本 (到整数 (文本)) = 文本)
  32.     返回 (真)
  33. .如果真结束
  34. 返回 (假)
复制代码

补充内容 (2017-6-19 21:08):
没有解决你的问题,这个是刚写的 如何判断字母大小的,A>b  执行出来是 1>2,数值越小越大,你可以利用这个子程序去写,先删除首部的0,然后判断第一个数值是数字还是文字,如果是数字 就按数组来判断

补充内容 (2017-6-19 21:08):
字母就按循序先后来判断
作者: y2j423633    时间: 2017-6-19 21:14
小淡 发表于 2017-6-19 20:49

亲,文本内容是
aaa00001 到 aaa99999 不是只有2个文本的
作者: y2j423633    时间: 2017-6-19 21:19
粉蝴蝶软件 发表于 2017-6-19 21:05
补充内容 (2017-6-19 21:08):
没有解决你的问题,这个是刚写的 如何判断字母大小的,A>b  执行出来是 1>2 ...

也不知道是不是我自己想的复杂了还是讲的复杂了

我现在就一批文本内容就是 英文+数字 或者 数字+英文 这样类型的

我自己的思路是先判断第几位到第几位是数字,然后处理以0开头的数字段,作对比

其次是英文段的排序,最后再是一个综合排序,我自己也没实现到,所以才来求助了
作者: y2j423633    时间: 2017-6-19 21:27
呵呵仙 发表于 2017-6-19 20:37
就文本排序就OK了.
http://bbs.eyuyan.com/read.php?tid=397806

呵呵仙来个模块具体的用法呗,人笨下载了不会用
作者: y2j423633    时间: 2017-6-19 21:29
junkboy 发表于 2017-6-19 20:07

* 数组:5{“aaa00001”,“aaa00002”,“abc00002”,“abc00001”,“abc00999”}

排出来的顺序明显不对哇,abc00002怎么会排在abc00001前面呢
作者: 小淡    时间: 2017-6-19 21:29
y2j423633 发表于 2017-6-19 21:14
亲,文本内容是
aaa00001 到 aaa99999 不是只有2个文本的

你对你已知文本进行分割就行了     b = 分割文本 (文本, “/”, )

作者: 粉蝴蝶软件    时间: 2017-6-19 21:30
y2j423633 发表于 2017-6-19 21:19
也不知道是不是我自己想的复杂了还是讲的复杂了

我现在就一批文本内容就是 英文+数字 或者 数字+英文  ...

ABC001 余BBC001 这个好比较,但是 ABC001 与123ABC 这个怎么比较

补充内容 (2017-6-19 21:31):
建议你把字母开头的 和 数字开头的 分开比较,比较完之后你在吧 字母与数字排个先后顺序,这个顺序是你自己定的


补充内容 (2017-6-19 21:35):
你这个5精币估计回答的都是嘴上理论,写出来的未必真有用
作者: 镇坛道德标杆    时间: 2017-6-19 21:33
y2j423633 发表于 2017-6-19 21:29
* 数组:5{“aaa00001”,“aaa00002”,“abc00002”,“abc00001”,“abc00999”}

排出来的顺序明显不对 ...

代码里不是写了么   不看代码只看结果吗?   比较函数里自己写一下
作者: y2j423633    时间: 2017-6-19 21:45
demo.rar (1.98 KB, 下载次数: 6)

需要排序的文本例子,求大神出手
作者: y2j423633    时间: 2017-6-19 21:47
粉蝴蝶软件 发表于 2017-6-19 21:30
ABC001 余BBC001 这个好比较,但是 ABC001 与123ABC 这个怎么比较

补充内容 (2017-6-19 21:31):

http://125.confly.eu.org/forum.php?mod= ... 80&pid=11587153

我发了个文本例子,你看看能排不
作者: y2j423633    时间: 2017-6-19 21:48
junkboy 发表于 2017-6-19 21:33
代码里不是写了么   不看代码只看结果吗?   比较函数里自己写一下

说白了就是不会写比较函数啊,来求的就是比较文本的函数嘛
作者: y2j423633    时间: 2017-6-19 22:11
奇异博士 发表于 2017-6-19 21:57
[e=0].版本 2
.支持库 eCalc

貌似你这个冒泡算法还可以哟,你看看我提供的那个例子的数字能不能处理呢
作者: 镇坛道德标杆    时间: 2017-6-19 22:32
demo.zip (3.06 KB, 下载次数: 5)

作者: y2j423633    时间: 2017-6-19 22:33
粉蝴蝶软件 发表于 2017-6-19 21:30
ABC001 余BBC001 这个好比较,但是 ABC001 与123ABC 这个怎么比较

补充内容 (2017-6-19 21:31):

ABC001 与123ABC 这2类不会在1个文本里,也就是说1个文本里的类型都是固定的

比如文本1.txt里,就都是

aaaa000212
aaaa021203
aaba123123

这样格式是统一的,只是前缀的英文和后缀的数字需要进行排序。
另一类就是数字在前,英文在后的类型,不是2个不同类型进行排序
作者: 呵呵仙    时间: 2017-6-19 22:36
y2j423633 发表于 2017-6-19 21:27
呵呵仙来个模块具体的用法呗,人笨下载了不会用

希尔排序_文本数组.rar (5.96 KB, 下载次数: 7)


改好了!!
作者: 呵呵仙    时间: 2017-6-20 16:26
不是给你改为模块了吗?请不告诉你不会用读入文件(),分割文本().如果你想定制软件,可以到定制区走走.




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