标题: [文本处理] 批处理怎样随即提取几行内容并重新组合输出? [打印本页]
作者: chuan31 时间: 2011-1-13 00:54 标题: 批处理怎样随即提取几行内容并重新组合输出?
比如说1.txt里面有200行文字,我想实现随机从里面提取5行(5做成可调的)内容(注意是随机,比如提取1、5、9、150、200共5行组成一行新的文本,注意不换行,也就是组成的文本是159150200这样的为一行),并不是只组合一次,最好做成可设定输出多少行,比如可设定运行后随机组合50行并输出到2.txt,组合后的内容不能重复。希望论坛的达人们帮小弟搞下这个代码 谢谢拉!
[ 本帖最后由 chuan31 于 2011-1-13 01:04 编辑 ]
作者: hanyeguxing 时间: 2011-1-13 01:22
1,是否允许重复提取?
2,文本编码类型是什么?
3,文本中是否有空行?
[ 本帖最后由 hanyeguxing 于 2011-1-13 01:23 编辑 ]
作者: chuan31 时间: 2011-1-13 01:52
原帖由 hanyeguxing 于 2011-1-13 01:22 发表
1,是否允许重复提取?
2,文本编码类型是什么?
3,文本中是否有空行?
版主您好!
1、同一行可以重复提取但输出的行与行不能重复
2、文本编码ANSI
3、文本行中没有空行
期待老大的作品!!
作者: 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 b=%random%%%k+1
- if defined #%b% goto:b
- set/a a+=1
- set #%b%==
- if %a% leq %n% goto:b
- (
- for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%r%"') do if defined #%%a set/p"=%%b"<nul
- echo/
- )>>"%s%"
- Endlocal
复制代码
[ 本帖最后由 hanyeguxing 于 2011-1-13 10:07 编辑 ]
作者: wc726842270 时间: 2011-1-13 10:35
有点乱,可以试一下- @echo off&setlocal enabledelayedexpansion
- findstr /n . 2.txt>>3.txt
- set n=0
- :1
- set /a a=%random%%%200+1
- findstr /bc:"%a%:" 3.txt>>4.txt
- for /f %%i in (4.txt)do (findstr /xc:"%%i" 3.txt)>>3.txt
- )
- set /a n+=1
- if "%n%" equ "5" (goto :2) else goto 1
- echo 出现错误&pasue&goto :eof
- :2
- for /f "tokens=1* delims=:" %%i in (4.txt) do set /p a=%%i,<nul>>5.txt
- for /f "tokens=1-5 delims=," %%1 in (5.txt) do set b=%%1%%2%%3%%4%%5
- for /f "tokens=1* delims=:" %%i in (4.txt) do echo %%j >>%b%.txt
- del 3.txt&del 4.txt
- REM 如果感到%b%.txt有点乱,就看一下5.txt吧,原因是%b%的并不是行数从小到大的顺序
- pause
-
复制代码
作者: chuan31 时间: 2011-1-13 20:28
原帖由 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 编辑 ]
作者: hanyeguxing 时间: 2011-1-13 22:09 标题: 回复 6楼 的帖子
- @echo off
- set n=5
- set m=20
- set "p=_"
- 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
- setlocal
- :b
- set/a b=%random%%%k+1
- if defined #%b% goto:b
- set/a a+=1
- set #%b%==
- if %a% leq %n% goto:b
- (
- for /f "tokens=1* delims=:" %%a in ('findstr /n .* %1') do if defined #%%a (
- if defined a (
- set/p"=%%b"<nul
- set a=
- ) else set/p"=%p%%%b"<nul
- )
- echo/
- )>>"%~dp1输出_%~nx1"
- Endlocal
复制代码
[ 本帖最后由 hanyeguxing 于 2011-1-13 22:51 编辑 ]
作者: chuan31 时间: 2011-1-13 22:45
原帖由 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:开 ...
这个代码运行时显示移动了某某个文件,但是运行完后被处理的文件里面只剩下几个数字,原来的中文没有了,不知道处理后的文件输出到哪里去了 还是根本就没有输出,望老大看看!
作者: hanyeguxing 时间: 2011-1-13 22:48 标题: 回复 8楼 的帖子
忘记了,以为你要在源文本上处理呢
作者: chuan31 时间: 2011-1-14 00:16
原帖由 hanyeguxing 于 2011-1-13 22:48 发表
忘记了,以为你要在源文本上处理呢
麻烦老大抽时间完善下吧 先谢谢拉
!
作者: hanyeguxing 时间: 2011-1-14 00:19 标题: 回复 10楼 的帖子
已在7楼修改并更新
作者: xxxhjs 时间: 2011-9-26 22:50
批处理怎样随机从多个文本里提取几行内容并重新组合输出?(两则)
看到论坛里高手真多,打心里佩服,有二个问题放在这里请教:
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
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |