标题: [文本处理] [已解决]请问TXT文本怎样用批处理同时按拼音与长度排序? [打印本页]
作者: 每天几分 时间: 2012-9-23 10:57 标题: [已解决]请问TXT文本怎样用批处理同时按拼音与长度排序?
多谢CrLf大大!
示例:- 哎哟
- 爱不释手
- 艾滋病
- 安步当车
- 安分
- 按图索骥
- ……
- 八宝粥
- 八竿子打不着
- 巴塞罗那
- 白皙
- ……
复制代码
要求排序如下:(先按拼音再按长度)- 哎哟
- 安分
- 艾滋病
- 爱不释手
- 安步当车
- 按图索骥
- ……
- 白皙
- 八宝粥
- 巴塞罗那
- 八竿子打不着
- ……
复制代码
作者: 乱码 时间: 2012-9-24 11:06
- function cmp(a,b){
- if(a.length==b.length) return a>b;
- return a.length-b.length;
- }
- var fso = new ActiveXObject("scripting.filesystemobject");
- var words = fso.OpenTextFile('1.txt',1).ReadAll().split(/\r\n/);
- fso.OpenTextFile('ok.txt',2,1).Write(words.sort(cmp).join('\r\n'));
- WSH.echo('整理完成');
复制代码
保存为 整理.js 然后双击运行即可,里面的 1.txt就是你要整理的文件,整理完会生成ok.txt文件
如果 整理.js 无法运行,改名成 整理.jse 即可、
作者: 每天几分 时间: 2012-9-24 13:29
回复 2# 乱码
嗯,谢谢,也只能实现其中一个排序了。在按拼音排好序的基础上,再在拼音之间进行长度排序应该是实现不了的。
作者: CrLf 时间: 2012-9-24 14:31
本帖最后由 CrLf 于 2012-9-24 18:56 编辑
简单的排序:复制代码
按楼主要求的排序方式来写有点繁琐:- @echo off
- if 测 gtr 试 echo 区域和语言设置未设置为以拼音排序&pause&exit
-
- set "$=吖 a 八 b 嚓 c 咑 d 妸 e 发 f 猤 g 妎 h 丌 j 咔 k 垃 l 嘸 m 拏 n 噢 o 妑 p 七 q 罖 r 仨 s 他 t 屲 w 夕 x 丫 y 帀 z 咗"
- set "py="
-
- (for /f "delims=" %%a in (a.txt) do (
- for /f "tokens=*" %%b in ("%%a") do set str=%%b
- setlocal enabledelayedexpansion
- set "#=!str:~,1!"
- set "py=!#:~,1!"
- if !#! geq 吖 if !#! leq 咗 (
- set py=z
- for /l %%c in (1 1 22) do (
- for /f "tokens=1,2,3*" %%d in ("!$!") do (
- if !#! geq %%d if !#! lss %%f (
- set py=%%e&set $=
- )
- if defined $ set $=%%f %%g
- )
- )
- for /l %%b in (1 1 10) do if !str:~%%b!. neq . set "py=!py! "
- )
- echo !py!'%%a
- endlocal
- ))>tmp.txt
- (for /f "tokens=1* delims='" %%a in ('sort tmp.txt') do echo %%b)>b.txt
- pause
复制代码
作者: 每天几分 时间: 2012-9-24 15:37
回复 4# CrLf
嗯,我也觉得太繁琐了,也不太可能实现的,在A-Z拼音排序里又分好几种的,比如B,默认是先排ba,再排bai、ban、bang;C-Z后面也是一样。
所以如果先按拼音排的话,“白皙”是排不到“八宝粥”前面的;
如果要“白皙”排到“八宝粥”前面,那只有先按长度排序了;
而这个时候,“白皙”就又排到了A开头的字母那里了,不能同时做到1L所说的那种效果。。。这个命题应该不成立的,自相矛盾了……
作者: CrLf 时间: 2012-9-24 18:19
本帖最后由 CrLf 于 2012-9-24 18:21 编辑
回复 5# 每天几分
不知我代码2生成的b.txt和楼主要求的结果有何不同呢?还是楼主没有试?
作者: 每天几分 时间: 2012-9-24 18:42
回复 6# CrLf
试了啊……你自己看看
作者: CrLf 时间: 2012-9-24 18:55
本帖最后由 CrLf 于 2012-9-24 19:01 编辑
回复 7# 每天几分
样本和实际文本格式不同,顶楼给出的样本似乎没有提到行首有空格?
楼主的实际要求是先按拼音首字母排列,再对首字母相同项按长度排列,所以我原先的代码根据样本特征,只截取每行第一个字符和长度作为排序依据。
代码已修改,测试无误
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |