Board logo

标题: [文本处理] 如何用批处理把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

借用 随风 兄的代码:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f %%i in (a.txt) do set _!random:~-5!!random:~-5!=%%i
  3. for /f "tokens=2 delims==" %%i in ('set _') do echo %%i
  4. pause>nul
复制代码
注意:该文本不能太多的行
作者: namejm    时间: 2008-5-6 17:01

  对乱序重列文本内容,有一个比较通用的思路:先在每行数据前插入随机数,然后,再用 sort 命令重新排列数据,重列时再去掉插入的随机数即可。

  演示代码考虑了各种特殊情况:包括特殊符号、空行、以分号打头的行……,能处理的数据行数只受内存的限制,能处理的行长受 findstr 处理能力的限制(处理65535个字符长度的行绰绰有余),只是处理过程中会产生比原文件略大的临时文件:
  1. @echo off
  2. cd.>tmp.txt
  3. for /f "delims=" %%i in ('findstr /n .* test.txt') do (
  4.   set "str=%%i"
  5.     setlocal enabledelayedexpansion
  6.     set "str=!str:*:=!"
  7.     >>tmp.txt echo !random!:!str!
  8.     endlocal
  9. )
  10. cd.>result.txt
  11. for /f "delims=" %%i in ('sort tmp.txt') do (
  12.     set "str=%%i"
  13.     setlocal enabledelayedexpansion
  14.     set "str=!str:*:=!"
  15.     >>result.txt echo.!str!
  16.     endlocal
  17. )
  18. del tmp.txt
  19. start result.txt
复制代码


  再来个效率稍微高一点的:
  1. @echo off
  2. cd.>tmp.txt
  3. for /f "delims=" %%i in ('findstr /n .* test.txt') do (
  4.   set "str=%%i"
  5.     setlocal enabledelayedexpansion
  6.     set "str=!str:*:=!"
  7.     >>tmp.txt echo !random! !str!
  8.     endlocal
  9. )
  10. cd.>result.txt
  11. for /f "tokens=1*" %%i in ('sort tmp.txt') do (
  12.     set "str=%%j"
  13.     setlocal enabledelayedexpansion
  14.     >>result.txt echo.!str!
  15.     endlocal
  16. )
  17. del tmp.txt
  18. start result.txt
复制代码

作者: zyouong    时间: 2008-5-6 18:23

谢谢两位的帮忙!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2