Board logo

标题: [文本处理] FOR循环嵌套时处理两个文本文件中每一行时的效率 [打印本页]

作者: lxzzr    时间: 2009-6-10 17:36     标题: FOR循环嵌套时处理两个文本文件中每一行时的效率

有两个文本文件1.txt和2.txt
1.txt
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
复制代码

2.txt
  1. a
  2. b
  3. c
  4. d
  5. e
复制代码


要求:取两个文本文件的每一行。

代码:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%n in (1.txt) do (
  4.        set temp_m=
  5.        set /a temp_n+=1
  6.        for /f %%m in (2.txt) do (
  7.              set /a temp_m+=1
  8.              if !temp_n! == !temp_m! echo %%n %%m
  9.        )
  10. )
  11. pause
复制代码


但是在两个文本文件较大时候效率就N低,还有其他的好方法么?
作者: zqz0012005    时间: 2009-6-10 17:45

将两个文件行号相同的行合并,这个问题也很经典。
文本较小且没有特殊字符时,可以用设置变量法。
  1. for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt') do set _%%a=%%b
  2. for /f "tokens=1* delims=:" %%a in ('findstr /n .* 2.txt') do echo !_%%a! %%b
复制代码
文本很大或有特殊字符,这个方法就不行了。
作者: lxzzr    时间: 2009-6-10 17:57     标题: 回复 2楼 的帖子

这个方法不错,比较巧妙!
作者: 随风    时间: 2009-6-10 17:59

确实是个经典的问题,好像除了3楼的方法就只有call 了,但楼主的方法是不可取的。
看谁还有更好的思路。。。
作者: lxzzr    时间: 2009-6-10 18:02     标题: 回复 4楼 的帖子

呵呵,我的那个“小打小闹”还行。
作者: Batcher    时间: 2009-6-10 21:03

合并行数相同的两个文本
  1. paste a.txt b.txt>c.txt
复制代码
第三方命令行工具 paste.exe 下载地址:
http://bbs.bathome.net/thread-1114-1-1.html
作者: zqz0012005    时间: 2009-6-10 21:30

CMD读文件没有“暂停”功能,打开文件读取内容(放到内存中)后就马上自动关闭了。不像wsh脚本中的fso,打开文件后就保持为打开状态,关闭之前还不能删除文件。打开时Read、ReadLine、ReadAll想怎么读就怎么读。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2