中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-27 15:25
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,276 会员排行
DOS批处理 & 脚本技术(批处理室) » 两个文本跳行输出(难题)
可打印版本  2,642 / 24
第1楼 bat-zw 发表于 2008-04-01 03:42
金牌会员 发帖 1,276 积分 3,105
两个文本跳行输出(难题)
===============================================
虽然目前还没有人达到开始的要求主(可能是一个for镶嵌根本做不到),但还是有了比较完美的方案=======>见14楼,同时本人在17楼对这段代码进行了粗略的分析。
===================================
本人苦思多日,终于想到了基本在一个大循环中解决的方案,==>见25楼
文本1.txt

文本2.txt

要求用批处理输出为

我写下的如下代码:

输出为:
丢了1.txt最后两行,搞了好久都没解决,只好请教大家了(注,要在一个循环中解决)。

[ Last edited by zw19750516 on 2008-4-2 at 09:54 PM ]
第2楼 26933062 发表于 2008-04-01 04:12
银牌会员 发帖 879 积分 2,268
呵呵,
为何非要在一个循环中完成,你的那个代码,效率是个大问题,1.txt有多少行,就要把2.txt循环多少遍。。。
怎么才算是一个循环啊?我觉得你的这个代码就应该不叫一个循环。所谓一个循环,应该是说只把一个文档循环一次。
另外,1.txt和2.txt的行数不一样,最后1.txt多的行怎么处理?
你给的标准输出,好像也有错误啊,wwwwwwww那一行去哪啦?

:
:

[ Last edited by 26933062 on 2008-4-1 at 04:28 AM ]
第3楼 bat-zw 发表于 2008-04-01 11:04
金牌会员 发帖 1,276 积分 3,105
Originally posted by 26933062 at 2008-4-1 04:12:
呵呵,
为何非要在一个循环中完成,你的那个代码,效率是个大问题,1.txt有多少行,就要把2.txt循环多少遍。。。
怎么才算是一个循环啊?我觉得 ...

我的意思是在一个for镶嵌中解决这个问题,不然就谈不上难了,呵呵。
第4楼 huahua0919 发表于 2008-04-01 11:52
银牌会员 发帖 780 积分 1,608
第5楼 bat-zw 发表于 2008-04-01 12:09
金牌会员 发帖 1,276 积分 3,105
不在一个循环中的解决方案:
还是没达到我最初的想法,但通用性还好,2楼、四楼的代码通用性还不行:
1 实际上我们不可能每次都知道到底1.txt和2.txt哪个的行数多(针对2楼的)
2 我们也不可能每次都知道1.txt和2.txt都有多少行(针对4楼的)
如意见不对,请指正,目的只有一个为了提高。


[ Last edited by zw19750516 on 2008-4-1 at 04:33 PM ]
第6楼 huahua0919 发表于 2008-04-01 12:57
银牌会员 发帖 780 积分 1,608
想知道多少行还不简单
列出两个行后,进行比较不就行了?
第7楼 abcd 发表于 2008-04-01 13:25
银牌会员 发帖 739 积分 1,436
P不容易就换别的嘛。
第8楼 ansipeter 发表于 2008-04-01 13:52
中级用户 发帖 130 积分 269
虽然操作有些麻烦还是可以勉强实现的,不过代码多了点而已,唉
第9楼 huahua0919 发表于 2008-04-01 14:07
银牌会员 发帖 780 积分 1,608

这个总应该行
第10楼 abcd 发表于 2008-04-01 14:14
银牌会员 发帖 739 积分 1,436
Originally posted by ansipeter at 2008-4-1 01:52 PM:
虽然操作有些麻烦还是可以勉强实现的,不过代码多了点而已,唉
第11楼 bat-zw 发表于 2008-04-01 14:31
金牌会员 发帖 1,276 积分 3,105
Originally posted by huahua0919 at 2008-4-1 14:07:
第12楼 bat-zw 发表于 2008-04-01 14:33
金牌会员 发帖 1,276 积分 3,105
Originally posted by ansipeter at 2008-4-1 13:52:
虽然操作有些麻烦还是可以勉强实现的,不过代码多了点而已,唉
第13楼 ansipeter 发表于 2008-04-01 14:51
中级用户 发帖 130 积分 269
楼上的,你测试了吗?对,我的代码是有些通用性不好,必须在for /f "delims=: tokens=1*" %%a in ('findstr /n .* 1.txt') do call:ansi %%a "%%b"这句放置行多的那个文件,我这里测试通过,如果要是怎么放都可以的话,那添加个判断就可以很好的通用了,唉
第14楼 terse 发表于 2008-04-01 16:35
银牌会员 发帖 946 积分 2,404
我来一个 虽然多一FOR 但有效 怎么多个%%I
@echo off
for /f "delims=" %%i in (a.txt) do >>c.txt echo %%i&call :loop
for /f "delims=" %%i in (b.txt) do if not defined %%i echo %%i>>c.txt
pause
goto :eof
:loop
for /f "delims=" %%i in (b.txt) do if not defined %%i set %%i=A &>>c.txt echo %%i&goto :eof

上面处理不了b.txt重复行 所以改一下:
@echo off
for /f "delims=" %%i in (a.txt) do >>c.txt echo %%i&call :loop
for /f "%n% delims=" %%i in (b.txt) do >>c.txt echo %%i
pause
goto :eof
:loop
for /f "%n% tokens=1* delims=:" %%i in ('findstr /n .* "b.txt"') do set n=skip=%%i &>>c.txt echo %%j&goto :eof

[ Last edited by terse on 2008-4-2 at 12:53 PM ]
第15楼 huahua0919 发表于 2008-04-01 16:35
银牌会员 发帖 780 积分 1,608
楼主可嘉
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023