标题: [文本处理] 排批处理怎样从多文本中提取任意一行文字组合? [打印本页]
作者: yimei_0210 时间: 2015-1-31 17:08 标题: 排批处理怎样从多文本中提取任意一行文字组合?
假设有两个文本:
文本A内容如下:
1
2
3
4
文本B内容如下:
a
s
d
f
g
希望生成一个C文件,
每点击一次批处理文件,在C文件里会产生任意两行数据,比如
第一次生成的是1a(希望能实现换行,如有难度不换行也可以)
第二次生成的是1s
第三次生成的是3g
纠结很久,先在这里谢过啦~
作者: pcl_test 时间: 2015-1-31 17:21
回复 1# yimei_0210
1、任意是随机的意思吗?
2、包括重复的吗?
作者: yimei_0210 时间: 2015-1-31 17:41
本帖最后由 yimei_0210 于 2015-1-31 17:44 编辑
任意是随机
不要出现11 22这样的重复数据 谢谢
作者: yimei_0210 时间: 2015-1-31 17:59
2、包括重复的吗? 是指这种情况吗? 第一次生成的是1a 第二次也可以是1a 这个不要有~~
作者: pcl_test 时间: 2015-1-31 18:46
本帖最后由 pcl_test 于 2015-1-31 19:15 编辑
回复 4# yimei_0210 - @echo off
- setlocal enabledelayedexpansion
- if not exist C.txt cd.>C.txt
- :main
- set Alines=0
- set Blines=0
- for /f "tokens=* delims=" %%a in (A.txt) do (
- set /a Alines+=1
- )
- for /f "tokens=* delims=" %%b in (B.txt) do (
- set /a Blines+=1
- )
- set /a n1=%random%%%%Alines%+1
- set /a m1=%random%%%%Blines%+1
- set n2=0
- for /f "delims=" %%i in (A.txt) do (
- set /a n2+=1
- if "!n2!" == "%n1%" set Astr=%%i &&goto main1
- )
- :main1
- set m2=0
- for /f "delims=" %%j in (B.txt) do (
- set /a m2+=1
- if "!m2!" == "%m1%" set Bstr=%%j &&goto main2
- )
- :main2
- set Astr=%Astr:~0,-1%
- set Bstr=%Bstr:~0,-1%
- set word=%Astr%%Bstr%
- for /f "delims=" %%c in (C.txt) do (
- if "%word%." equ "%%c." (goto main)
- )
- echo %word%>>C.txt
复制代码
作者: 慕夜蓝化 时间: 2015-1-31 19:03
- @echo off&setlocal enabledelayedexpansion
- :start
- set/a a=0,b=0,n=0,u=0,v=0,r=0
- (for /f "tokens=1-2 delims=:" %%i in ('type "A.txt"^|find /v /c "" ^&type "A.txt"^|findstr -Rn ".*"') do (
- set/a a+=1
- if !a! equ 1 set/a "n=%random%%%%%i"
- if !n! neq 0 (set/a u+=1) else (goto :start)
- if !u! neq 1 if %%i equ !n! set/p=%%j<nul&call :a&exit /b
- )) >>C.txt
- :a
- set/a a=0,b=0,n=0,u=0,v=0,r=0
- for /f "tokens=1-2 delims=:" %%i in ('type "B.txt"^|find /v /c "" ^&type "B.txt"^|findstr -Rn ".*"') do (
- set/a b+=1
- if !b! equ 1 set/a "r=%random%%%%%i"
- if !r! neq 0 (set/a v+=1) else (goto :a)
- if !v! neq 1 if %%i equ !r! set/p=%%j<nul&echo,&goto :eof
- )
复制代码
每点击一次,注入每次的随机提取数。
作者: yimei_0210 时间: 2015-1-31 23:04
回复 5# pcl_test
测试了5楼的写法,正符合需求。
真心感谢~~辛苦了!
作者: yimei_0210 时间: 2015-1-31 23:09
回复 6# 慕夜蓝化
六楼的写法,在多次点击后,会出现重复数据呢,不知何解。
作者: 慕夜蓝化 时间: 2015-2-1 09:07
回复 8# yimei_0210
恩,因为没有考虑c.txt中的内容,我加了一个判断,并且将代码简化了一下。- @echo off&setlocal enabledelayedexpansion
- :prepare
- call :start "1.txt" "2.txt"&type "c.txt"|find "!str!" >nul 2>nul||>>c.txt echo,!str!&&exit
- set "str="&goto :prepare
- :start
- set/a a=0,n=0,u=0
- if not "%~1"=="" (
- for /f "tokens=1-2 delims=:" %%i in ('type "%~1"^|find /v /c "" ^&type "%~1"^|findstr -Rn ".*"') do (
- set/a a+=1
- if !a! equ 1 set/a "n=%random%%%%%i"
- if !n! neq 0 (set/a u+=1) else (goto :start)
- if !u! neq 1 if %%i equ !n! set "str=!str!%%j"&shift&goto :start
- )
- ) else (
- goto :eof
- )
复制代码
作者: 慕夜蓝化 时间: 2015-2-1 10:07
- @echo off&setlocal enabledelayedexpansion
- :prepare
- call :start "1.txt" "2.txt"&type "c.txt"|find "!str!" >nul 2>nul||>>c.txt echo,!str!&&exit
- set "str="&goto :prepare
- :start
- set/a a=0,n=0
- if not "%~1"=="" (
- for /f "tokens=1-2 delims=:" %%i in ('type "%~1"^|find /v /c "" ^&findstr -Rn ".*" "%~1"') do (
- set/a a+=1
- if !a! equ 1 set/a n=%random%%%%%i+1
- if !a! neq 1 if %%i equ !n! set "str=!str!%%j"&shift&goto :start
- )
- )
复制代码
解决了使用findstr搜索文本时,无法搜索到最后一行的bug。
以及余数未+1的错误,并简化代码。
作者: yimei_0210 时间: 2015-2-2 10:35
回复 10# 慕夜蓝化
好的,我再试试看~~有不明之处会再来请教
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |