标题: [文本处理] [已解决]批处理如何高效实现按首字母排列? [打印本页]
作者: bluewing009 时间: 2009-12-13 20:12 标题: [已解决]批处理如何高效实现按首字母排列?
1.txt 内格式为
aaa bbb ccc "asdd" dasdasd
aaa bbb ccc "asdds" asdasd
aaa bbb ccc "sdww" asdasd
......
...........
寻求一个高效的新思路,将“”内的内容 按首字母排列 A~Z
我的原有思路为: 读取首字母,赋值(a为1,b为2......),然后判断数字大小。
“”前字符长度一定(aaa bbb ccc )
有其他需要知道的在帖子上说明。
[ 本帖最后由 bluewing009 于 2009-12-18 23:11 编辑 ]
作者: batman 时间: 2009-12-13 20:17
请问楼主,你这个排列是把整行进行排列,还是只排列""间的内容,也就是是不是要提取""间的内容?
同时aaa bbb ccc 表示是12个字符长度(空格也是字符),还是固定的这12个字符?
作者: Batcher 时间: 2009-12-13 20:18
可以用set命令的特性来自动排序吧
SET command invoked with just a variable name, no equal sign or value
will display the value of all variables whose prefix matches the name
given to the SET command. For example:
SET P
would display all variables that begin with the letter 'P'
|
作者: bluewing009 时间: 2009-12-13 20:21 标题: 回复 2楼 的帖子
以“”内的内容 为准
比如 排列后为:
aaa bbb ccc "asjdo" asdasd
aaa bbb ccc "basdjkajs" asdasd
aaa bbb ccc "casjkdasjk" asd
aaa bbb ccc "dsdasdas"dasdas
作者: bluewing009 时间: 2009-12-13 20:22 标题: 回复 3楼 的帖子
请Batcher 明示~~~
作者: Batcher 时间: 2009-12-13 20:25
批处理代码留给别人来写吧,我来个sort.exe的先:复制代码
第三方命令行工具 sort.exe 下载地址:
http://bbs.bathome.net/thread-1114-1-1.html
作者: batman 时间: 2009-12-13 20:26
- @sort /+14 1.txt&pause>nul
复制代码
[ 本帖最后由 batman 于 2009-12-13 20:32 编辑 ]
作者: bluewing009 时间: 2009-12-13 20:34
两个人 不约而同的用了linux sort命令 ...........
这样真的很高效,.........
作者: vsbat 时间: 2009-12-13 20:34
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in (a.txt) do (set t=%%i
- set t=!t:~13,1!
- set "_!t!%%i=%%i"
- )
- for /f "tokens=2 delims==" %%j in ('set _') do echo %%j
- pause
复制代码
[ 本帖最后由 vsbat 于 2009-12-13 20:37 编辑 ]
作者: batman 时间: 2009-12-13 20:35 标题: 回复 6楼 的帖子
以前没注意到这个第三方居然和系统自带的同名。。。
作者: pumahxh 时间: 2009-12-13 21:05
原帖由 vsbat 于 2009-12-13 20:34 发表
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (set t=%%i
set t=!t:~13,1!
set "_!t!%%i=%%i"
)
for /f "tokens=2 delims==" %%j in ('set _') do echo %%j
pause
强!利用set var按照变量首字母排序特性,方法独特,学习了。
刚测试了下,set 也可以按数字降序排序,汉字按拼音排列。
[ 本帖最后由 pumahxh 于 2009-12-13 21:15 编辑 ]
作者: bluewing009 时间: 2009-12-15 09:28
希望能看到更多的想法
作者: bluewing009 时间: 2009-12-17 12:04
让帖子浮起来,看看谁有更好的办法?
作者: batman 时间: 2009-12-17 15:29
既然楼主想看到更多的办法,下面就给出一种效率还算是高的办法(明显是在自找麻烦):- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in (1.txt) do (
- for /f "tokens=4" %%b in ("%%a") do set "_%%~b=%%a"&set "str=!str! %%~b"
- )
- set /a max=0
- for %%a in (%str%) do (
- for %%b in (%str%) do if "%%a" geq "%%b" set /a .%%a+=1
- set "_!.%%a!=_%%a"&if !max! leq !.%%a! set /a max=.%%a
- )
- for /l %%a in (1,1,%max%) do for %%b in (!_%%a!) do echo !%%b!
- pause>nul
复制代码
作者: 随风 时间: 2009-12-18 02:37
我也来一个,同样是自找麻烦
- @echo off
- if not "%~1"=="" (
- for /f "delims=" %%a in (a.txt) do (
- set "str=%%a"
- setlocal enabledelayedexpansion
- set str=!str:*"=!
- echo !str: =! %%a
- endlocal
- )
- goto :EOF
- )
- for /f "tokens=1* delims= " %%i in ('%~s0 h^|sort') do echo %%j
- pause
复制代码
作者: bluewing009 时间: 2009-12-19 07:06
谢谢大家 o∩_∩o
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |