Board logo

标题: 提取字符并按照要求输出2 [打印本页]

作者: true4321     时间: 2008-6-2 20:23    标题: 提取字符并按照要求输出2
1.txt内容为: 11111 aaaa 22222 bbbb 33333 cccc 2.txt内容为: aaaa 甲 bbbb 乙 cccc 丙 dddd 丁 要求输出3.txt内容为: 11111 aaaa 甲 22222 bbbb 乙 33333 cccc 丙

作者: bat-zw     时间: 2008-6-2 21:50
@echo off
set n=-1
for /f "delims=" %%i in (1.txt) do call :lp %%i
pause>nul&goto :eof
:lp
set /a n+=1
set "m=skip=%n%"
if %n% equ 0 set "m="
for /f "%m% tokens=2 delims= " %%i in (2.txt) do echo %1 %%i>>3.txt&goto :eof
[ Last edited by zw19750516 on 2008-6-2 at 09:51 PM ]

作者: WANKOILZ     时间: 2008-6-3 12:44
@echo off
for /f "tokens=1*" %%a in (1.txt) do (
  for /f "tokens=1*" %%i in (2.txt) do (
  if %%b==%%i echo %%a %%b %%j
  )
)
pause

作者: bat-zw     时间: 2008-6-3 12:45
Originally posted by WANKOILZ at 2008-6-3 12:44:
@echo off
for /f "tokens=1*" %%a in (1.txt) do (
  for /f "tokens=1*" %%i in (2.txt) do (
  if %%b==%%i echo %%a %%b %%j
  )
)
pause
化码看起来是简化了很多,兄弟考虑了效率问题没有啊,我的两个for循环的次数是用+,而你的是用*。

作者: WANKOILZ     时间: 2008-6-3 12:48
我的两个for循环的次数是用+
我的循环的次数就肯定比你多了,呵呵

作者: bat-zw     时间: 2008-6-3 12:49
Originally posted by WANKOILZ at 2008-6-3 12:48: +是什么意思
第一个for在a.txt中循环的次数+第二个for在b.txt中循环的次数,大循次数实际上就是等于a.txt的行数。 而你的在b.txt中循环的次数等于a.txt的行数*b.txt的行数。 在行数不多的情况下,你的代码执行还可以,但遇到行数多的情况,如两个文件各有10000行,你的代码执行的效率将慢得让人无可忍受,而这种情况是完全可以避免的。 [ Last edited by zw19750516 on 2008-6-3 at 12:57 PM ]

作者: WANKOILZ     时间: 2008-6-3 13:05
这倒是一个以后值得注意的问题,受教。