返回列表 发帖
41楼的改进思路,相信这能终结双文本同时输出的难题:
@echo off
findstr /n .* 1.txt>tmp1
find /n /v "" 2.txt|more>tmp2 +2
for /f "tokens=2*delims=]:" %%a in ('fc /lb1000 /n tmp1 tmp2^|sort') do echo;%%b
del /q tmp?
pauseCOPY

TOP

49楼的代码刚看过
改了一个findstr
少了一个find
代码和思路都有创新
不过限于算法思想
对于两个以上的文本就无法实现交替输出了

另外
find /n /v "" 2.txt|more>tmp2 +2
可以改用
find /n /v "" <2.txt>tmp2
更好些
天的白色影子

TOP

好办法,避开了多余的显示,省一个more。
其实如果文件数是2的倍数,还是可以这样用的,不过效率就难说了

TOP

楼上说的是递归算法吗?
也就是先a,c交替得到ac
再b,d交替得到bd
再ac,bd交替得到abcd
这是需要文件数是二的乘方吧

另外这只是原型代码
真正实用还要考虑一些细节
比如文本的末行没有\r\n
天的白色影子

TOP

本帖最后由 zm900612 于 2011-7-18 20:27 编辑
@echo off
(for /f "delims=" %%a in (1.txt) do (
    endlocal
    echo;%%a
    setlocal enabledelayedexpansion
    set /p t2=
    if defined t2 echo;!t2!
))<2.txt>合并.txt
::由于可以有两个不同的输入来源并存,所以双文本合并就成为轻而易举的事了COPY
1

评分人数

TOP

@echo off&setlocal enabledelayedexpansion
(for /l %%a in (1,1,50) do set /p n%%a=)<1.txt
(for /l %%a in (1,1,50) do set /p m%%a=)<2.txt
for /l %%a in (1,1,50) do (
    if not "!n%%a!"=="" echo;!n%%a!
    if not "!m%%a!"=="" echo;!m%%a!
)
pauseCOPY

TOP

@echo off & setlocal enabledelayedexpansion
cd /d %~dp0
::思路:通过行数定位结合more +n命令。
set /a nn=0
for /f "delims=" %%i in (1.txt) do (
echo;%%i
call :lp !nn! & set /a "nn+=1"
)
pause>nul & goto :eof
:lp
::more 第一行是以0计数开始
for /f "delims=" %%x in ('more +%1 2.txt') do echo;%%x & goto :eofCOPY
我就是我,不一样的烟火!

TOP

@echo off
set /a m=1000,n=1001
setlocal enabledelayedexpansion
for /f "delims=" %%a in (a.txt) do set /a m+=2&set #!m!=%%a
for /f "delims=" %%b in (b.txt) do set /a n+=2&set #!n!=%%b
for /f "tokens=2 delims==" %%c in ('set #') do echo %%c
pauseCOPY

TOP

回复 1# batman


  这个问题我提问过的,版主用了5行代码就完成了工作。

TOP

返回列表