[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]请问TXT文本怎样用批处理同时按拼音与长度排序?

多谢CrLf大大!

示例:
  1. 哎哟
  2. 爱不释手
  3. 艾滋病
  4. 安步当车
  5. 安分
  6. 按图索骥
  7. ……
  8. 八宝粥
  9. 八竿子打不着
  10. 巴塞罗那
  11. 白皙
  12. ……
复制代码
要求排序如下:(先按拼音再按长度)
  1. 哎哟
  2. 安分
  3. 艾滋病
  4. 爱不释手
  5. 安步当车
  6. 按图索骥
  7. ……
  8. 白皙
  9. 八宝粥
  10. 巴塞罗那
  11. 八竿子打不着
  12. ……
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  1. function cmp(a,b){
  2. if(a.length==b.length) return a>b;
  3. return a.length-b.length;
  4. }
  5. var fso = new ActiveXObject("scripting.filesystemobject");
  6. var words = fso.OpenTextFile('1.txt',1).ReadAll().split(/\r\n/);
  7. fso.OpenTextFile('ok.txt',2,1).Write(words.sort(cmp).join('\r\n'));
  8. WSH.echo('整理完成');
复制代码
保存为 整理.js 然后双击运行即可,里面的 1.txt就是你要整理的文件,整理完会生成ok.txt文件
如果 整理.js 无法运行,改名成 整理.jse 即可、
求老大赐我《精通正则表达式》

TOP

回复 2# 乱码


    嗯,谢谢,也只能实现其中一个排序了。在按拼音排好序的基础上,再在拼音之间进行长度排序应该是实现不了的。

TOP

本帖最后由 CrLf 于 2012-9-24 18:56 编辑

简单的排序:
  1. sort a.txt>b.txt
复制代码
按楼主要求的排序方式来写有点繁琐:
  1. @echo off
  2. if 测 gtr 试 echo 区域和语言设置未设置为以拼音排序&pause&exit
  3. set "$=吖 a 八 b 嚓 c 咑 d 妸 e 发 f 猤 g 妎 h 丌 j 咔 k 垃 l 嘸 m 拏 n 噢 o 妑 p 七 q 罖 r 仨 s 他 t 屲 w 夕 x 丫 y 帀 z 咗"
  4. set "py="
  5. (for /f "delims=" %%a in (a.txt) do (
  6. for /f "tokens=*" %%b in ("%%a") do set str=%%b
  7. setlocal enabledelayedexpansion
  8. set "#=!str:~,1!"
  9. set "py=!#:~,1!"
  10. if !#! geq 吖 if !#! leq 咗 (
  11. set py=z
  12. for /l %%c in (1 1 22) do (
  13. for /f "tokens=1,2,3*" %%d in ("!$!") do (
  14. if !#! geq %%d if !#! lss %%f (
  15. set py=%%e&set $=
  16. )
  17. if defined $ set $=%%f %%g
  18. )
  19. )
  20. for /l %%b in (1 1 10) do if !str:~%%b!. neq . set "py=!py! "
  21. )
  22. echo !py!'%%a
  23. endlocal
  24. ))>tmp.txt
  25. (for /f "tokens=1* delims='" %%a in ('sort tmp.txt') do echo %%b)>b.txt
  26. pause
复制代码

TOP

回复 4# CrLf


嗯,我也觉得太繁琐了,也不太可能实现的,在A-Z拼音排序里又分好几种的,比如B,默认是先排ba,再排bai、ban、bang;C-Z后面也是一样。
所以如果先按拼音排的话,“白皙”是排不到“八宝粥”前面的;
如果要“白皙”排到“八宝粥”前面,那只有先按长度排序了;
而这个时候,“白皙”就又排到了A开头的字母那里了,不能同时做到1L所说的那种效果。。。这个命题应该不成立的,自相矛盾了……

TOP

本帖最后由 CrLf 于 2012-9-24 18:21 编辑

回复 5# 每天几分


    不知我代码2生成的b.txt和楼主要求的结果有何不同呢?还是楼主没有试?

TOP

回复 6# CrLf

试了啊……你自己看看

TOP

本帖最后由 CrLf 于 2012-9-24 19:01 编辑

回复 7# 每天几分

    样本和实际文本格式不同,顶楼给出的样本似乎没有提到行首有空格?
    楼主的实际要求是先按拼音首字母排列,再对首字母相同项按长度排列,所以我原先的代码根据样本特征,只截取每行第一个字符和长度作为排序依据。
    代码已修改,测试无误
1

评分人数

    • 每天几分: 嗯,这代码对俺很有用!万分感谢!技术 + 1

TOP

返回列表