标题: [文本处理] 如何用批处理把TXT文本的内容进行无序/随机排列/打乱? [打印本页]
作者: zyouong 时间: 2008-5-6 14:19 标题: 如何用批处理把TXT文本的内容进行无序/随机排列/打乱?
本帖最后由 pcl_test 于 2016-11-9 19:39 编辑
比如我有建一TXT文件,里面有内容:
123
234
345
567
678
789
890
如何把他们进行无序排列?用批处理实现。比如实现后的排列为
567
123
345
789
234
890
456
作者: youxi01 时间: 2008-5-6 15:19
借用 随风 兄的代码:- @echo off&setlocal enabledelayedexpansion
- for /f %%i in (a.txt) do set _!random:~-5!!random:~-5!=%%i
- for /f "tokens=2 delims==" %%i in ('set _') do echo %%i
-
- pause>nul
复制代码
注意:该文本不能太多的行
作者: namejm 时间: 2008-5-6 17:01
对乱序重列文本内容,有一个比较通用的思路:先在每行数据前插入随机数,然后,再用 sort 命令重新排列数据,重列时再去掉插入的随机数即可。
演示代码考虑了各种特殊情况:包括特殊符号、空行、以分号打头的行……,能处理的数据行数只受内存的限制,能处理的行长受 findstr 处理能力的限制(处理65535个字符长度的行绰绰有余),只是处理过程中会产生比原文件略大的临时文件:- @echo off
- cd.>tmp.txt
- for /f "delims=" %%i in ('findstr /n .* test.txt') do (
- set "str=%%i"
- setlocal enabledelayedexpansion
- set "str=!str:*:=!"
- >>tmp.txt echo !random!:!str!
- endlocal
- )
- cd.>result.txt
- for /f "delims=" %%i in ('sort tmp.txt') do (
- set "str=%%i"
- setlocal enabledelayedexpansion
- set "str=!str:*:=!"
- >>result.txt echo.!str!
- endlocal
- )
- del tmp.txt
- start result.txt
复制代码
再来个效率稍微高一点的:
- @echo off
- cd.>tmp.txt
- for /f "delims=" %%i in ('findstr /n .* test.txt') do (
- set "str=%%i"
- setlocal enabledelayedexpansion
- set "str=!str:*:=!"
- >>tmp.txt echo !random! !str!
- endlocal
- )
- cd.>result.txt
- for /f "tokens=1*" %%i in ('sort tmp.txt') do (
- set "str=%%j"
- setlocal enabledelayedexpansion
- >>result.txt echo.!str!
- endlocal
- )
- del tmp.txt
- start result.txt
复制代码
作者: zyouong 时间: 2008-5-6 18:23
谢谢两位的帮忙!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |