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

[文本处理] 批处理怎样随即提取几行内容并重新组合输出?

比如说1.txt里面有200行文字,我想实现随机从里面提取5行(5做成可调的)内容(注意是随机,比如提取1、5、9、150、200共5行组成一行新的文本,注意不换行,也就是组成的文本是159150200这样的为一行),并不是只组合一次,最好做成可设定输出多少行,比如可设定运行后随机组合50行并输出到2.txt,组合后的内容不能重复。希望论坛的达人们帮小弟搞下这个代码 谢谢拉!

[ 本帖最后由 chuan31 于 2011-1-13 01:04 编辑 ]

批处理怎样随机从多个文本里提取几行内容并重新组合输出?(两则)

看到论坛里高手真多,打心里佩服,有二个问题放在这里请教:
1.批处理怎样随机从多个文本里提取几行内容并重新组合输出

比如说1.txt和2.txt、3.txt、4.txt...多个(能设定几个记事本)文本里面各有200行带符号文字,我想实现随机从每个文本里面提取5行(5做成可调的)内容(注意是随机,
比如提取1、5、9、150、200共5行组成一行新的文本,注意不换行,也就是组成的文本是159150200这样的为一行),并不是只组合一次,最好做成可设定输出多少行,
比如可设定运行后随机组合50行或不限行并输出到2.txt,组合后的内容不能重复。希望论坛的达人们帮小弟搞下这个代码 谢谢拉!

1,允许重复提取
2,文本编码类型是txt
3,文本中没有空行
4,1.txt和2.txt、3.txt、4.txt(如有个把空行不知能行吗,不行就考虑)。

看过论坛里民单个文本高手写出来了http://bbs.bathome.net/thread-10754-1-1.html,这个复杂些不知能行吗

2.怎样随机替换特定字符,替换字数不限,比如有a.txt,b.txt,
a.txt里面内容如为:

ddddgfgd
sdgdsds
rtyrewyh
sdggdsgds
sdgsdg
sdgsds
sdggsd
.....
这样随机多行

b.txt里面内容如为

   sdfk中华g%*dhfglgh,'xxxxx,yyyyy,wwwww',sd%¥g侠客ljsd,kkkkk,jjjjj,ttttt <>

注:sdfk中华g%*dhfglgh,'xxxxx,yyyyy,wwwww'(前面特定词xxxxx,yyyyy,wwwww可为0或多个可设调),sd%¥g侠客ljsd,kkkkk,jjjjj,ttttt <>(此处词kkkkk,jjjjj,ttttt也为1至多个可设调)。

然后怎样用a.txt里面的行允许重复提取,单行随机不重复的替换b.txt里面的xxxxx,yyyyy,wwwww,kkkkk,jjjjj,ttttt这些指定字符,字符句不限制个数,行字数不限。
E-Mail:xxxhjs@163.com

TOP

回复 10楼 的帖子

已在7楼修改并更新
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

原帖由 hanyeguxing 于 2011-1-13 22:48 发表
忘记了,以为你要在源文本上处理呢


麻烦老大抽时间完善下吧  先谢谢拉

TOP

回复 8楼 的帖子

忘记了,以为你要在源文本上处理呢
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

原帖由 hanyeguxing 于 2011-1-13 22:09 发表
@echo off
set n=5
set m=20
set "k=_"
for %%a in (*.txt) do (
        for /f "delims=:" %%a in ('findstr /n .* "%%a"') do set k=%%a
        for /l %%b in (1,1,%m%) do call:a "%%a"
)
exit
:a:开 ...


这个代码运行时显示移动了某某个文件,但是运行完后被处理的文件里面只剩下几个数字,原来的中文没有了,不知道处理后的文件输出到哪里去了 还是根本就没有输出,望老大看看!

TOP

回复 6楼 的帖子

  1. @echo off
  2. set n=5
  3. set m=20
  4. set "p=_"
  5. for %%a in (*.txt) do (
  6.         for /f "delims=:" %%a in ('findstr /n .* "%%a"') do set k=%%a
  7.         for /l %%b in (1,1,%m%) do call:a "%%a"
  8. )
  9. exit
  10. :a
  11. setlocal
  12. :b
  13. set/a b=%random%%%k+1
  14. if defined #%b% goto:b
  15. set/a a+=1
  16. set #%b%==
  17. if %a% leq %n% goto:b
  18. (
  19. for /f "tokens=1* delims=:" %%a in ('findstr /n .* %1') do if defined #%%a (
  20.         if defined a (
  21.                 set/p"=%%b"<nul
  22.                 set a=
  23.         ) else set/p"=%p%%%b"<nul
  24. )
  25. echo/
  26. )>>"%~dp1输出_%~nx1"
  27. Endlocal
复制代码

[ 本帖最后由 hanyeguxing 于 2011-1-13 22:51 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

原帖由 hanyeguxing 于 2011-1-13 09:59 发表
@echo off
set n=5
set m=20
set "r=d:\文本.txt"
set "s=d:\输出.txt"
for /f "delims=:" %%a in ('findstr /n .* "%r%"') do set k=%%a
for /l %%a in (1,1,%m%) do call:a
exit
:a
setlocal
:b
set/a  ...


这个脚本超级好用 谢谢老大!另外能不能稍微对输出结果处理下,就是加上分隔符(可以自定义用什么符号分隔) 现在的输出结果是125468545这样的 请老大修改下,实现1_2_5_4_6_8_5_4_5这样的 _这个分隔符可以自定义,另外现在要处理的文件路径是绝对的,能做成相对的吗?就是只要把这个bat文件复制到一个文件夹 就处理当前文件夹下的一个txt 不论这个TXT是什么文件名。

[ 本帖最后由 chuan31 于 2011-1-13 20:31 编辑 ]

TOP

有点乱,可以试一下
  1. @echo off&setlocal enabledelayedexpansion
  2. findstr /n . 2.txt>>3.txt
  3. set n=0
  4. :1
  5. set /a a=%random%%%200+1
  6. findstr /bc:"%a%:" 3.txt>>4.txt
  7. for /f %%i in (4.txt)do (findstr /xc:"%%i" 3.txt)>>3.txt
  8. )
  9. set /a n+=1
  10. if "%n%" equ "5" (goto :2) else goto 1
  11. echo 出现错误&pasue&goto :eof
  12. :2
  13. for /f "tokens=1* delims=:" %%i in (4.txt) do set /p a=%%i,<nul>>5.txt
  14. for /f "tokens=1-5 delims=," %%1 in (5.txt) do set b=%%1%%2%%3%%4%%5
  15. for /f "tokens=1* delims=:" %%i in (4.txt) do echo %%j >>%b%.txt
  16. del 3.txt&del 4.txt
  17. REM 如果感到%b%.txt有点乱,就看一下5.txt吧,原因是%b%的并不是行数从小到大的顺序
  18. pause
复制代码

TOP

  1. @echo off
  2. set n=5
  3. set m=20
  4. set "r=d:\文本.txt"
  5. set "s=d:\输出.txt"
  6. for /f "delims=:" %%a in ('findstr /n .* "%r%"') do set k=%%a
  7. for /l %%a in (1,1,%m%) do call:a
  8. exit
  9. :a
  10. setlocal
  11. :b
  12. set/a b=%random%%%k+1
  13. if defined #%b% goto:b
  14. set/a a+=1
  15. set #%b%==
  16. if %a% leq %n% goto:b
  17. (
  18. for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%r%"') do if defined #%%a set/p"=%%b"<nul
  19. echo/
  20. )>>"%s%"
  21. Endlocal
复制代码

[ 本帖最后由 hanyeguxing 于 2011-1-13 10:07 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

原帖由 hanyeguxing 于 2011-1-13 01:22 发表
1,是否允许重复提取?
2,文本编码类型是什么?
3,文本中是否有空行?



版主您好!
1、同一行可以重复提取但输出的行与行不能重复
2、文本编码ANSI
3、文本行中没有空行

期待老大的作品!!

TOP

1,是否允许重复提取?
2,文本编码类型是什么?
3,文本中是否有空行?

[ 本帖最后由 hanyeguxing 于 2011-1-13 01:23 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

返回列表