![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-27 15:24 |
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,276 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 两个文本跳行输出(难题) |
| 可打印版本 2,640 / 24 |
| 第16楼 bat-zw | 发表于 2008-04-01 20:38 |
| 金牌会员 发帖 1,276 积分 3,105 | |
Originally posted by terse at 2008-4-1 16:35: 学习!!!!!!!!!! |
|
| 第17楼 bat-zw | 发表于 2008-04-01 21:37 |
| 金牌会员 发帖 1,276 积分 3,105 | |
@echo off 不好意思,为了得到提高,本人虽然水平有限,还是试着解释这段代码如下: 第一个for循环表示从a.txt中依次读取每行,每读取一行就把这行添加输入到c.txt中然后跳转到第二个for循环中; 第二个for循环的意思是依次读取b.txt中每一行,每读一行就把存在于循环中%%i变量(第二个for循环的%%i),在b.txt中这行中查找一次,如果没发现就把这一行改变变量名为A并添加输入到c.txt中,然后结束再开始第一个for循环,这样后面的每次循环就不会查找这一行了(其变量名为A而不是%%i); 而当第一个大循环也就是第一和第二个for循环结束后,便开始了第三个for语句的循环,在这个for循环中就是一行行地对b.txt查找在当前循环中是否有变量%%i(同样行,其余的行的变量名都变成A了)的存在,如没有就添加输入到c.txt中。 真的好难解释啊!!!!!!!!!!!! 总结:trse巧妙的将三个for循环中的变量都命名为%%i,同时反复运用 if (not) defined语句进行查找识别,成功的实现了对a.txt和b.txt跳行并不丢失行的输出,实在是高,佩服!!! |
|
| 第18楼 26933062 | 发表于 2008-04-01 21:40 |
| 银牌会员 发帖 879 积分 2,268 | |
|
原来是在不知道哪个文件行数多的情况下
如此把2楼代码稍作修改即可达到楼主的要求 : 另外: 2 楼的第一个代码到底哪里不行?怎么不通用? [ Last edited by 26933062 on 2008-4-1 at 09:43 PM ] |
|
| 第19楼 bat-zw | 发表于 2008-04-01 21:46 |
| 金牌会员 发帖 1,276 积分 3,105 | |
感谢兄弟对本贴的多次关注:Originally posted by 26933062 at 2008-4-1 21:40: |
|
| 第20楼 26933062 | 发表于 2008-04-01 21:51 |
| 银牌会员 发帖 879 积分 2,268 | |
|
代码有问题?
我测试没问题啊? 你测试有什么问题?说说啊? |
|
| 第21楼 balinger | 发表于 2008-04-01 21:58 |
| 中级用户 发帖 115 积分 356 | |
|
14楼的思路的确奇妙,令人佩服!
不过还有个小问题,如果 b.txt 中有相同的行,就会出错。 |
|
| 第22楼 topmcs | 发表于 2008-04-02 11:58 |
| 初级用户 发帖 16 积分 25 来自 湖南 | |
|
高手!!!!!!!!!11
|
|
| 第23楼 terse | 发表于 2008-04-02 12:50 |
| 银牌会员 发帖 946 积分 2,404 | |
Originally posted by balinger at 2008-4-1 21:58: 确实如此 改这样 @echo off for /f "delims=" %%i in (a.txt) do echo %%i&call :loop for /f "%n% delims=" %%i in (b.txt) do echo %%i pause goto :eof :loop for /f "%n% tokens=1* delims=:" %%i in ('findstr /n .* "b.txt"') do set n=skip=%%i &echo %%j&goto :eof |
|
| 第24楼 bat-zw | 发表于 2008-04-02 13:51 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
高!!!!!!!!!!!!! for /f "%n% tokens=1* delims=:" %%i in ('findstr /n .* "b.txt"') do set n=skip=%%i &echo %%j&goto :eof
使用"delims=:" "findstr /n" "%%n=skip=%%i" 把%%i变量变为行号,思路的确是太广了。 [ Last edited by zw19750516 on 2008-4-2 at 01:55 PM ] |
|
| 第25楼 bat-zw | 发表于 2008-04-02 21:26 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
基本在一个大循环解决问题的方案: 通用范围为1-999行
[ Last edited by zw19750516 on 2008-4-2 at 11:47 PM ] |
|
| 上一页 1 2 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |