Board logo

标题: [求助]求读取文件每行内容并赋值给变量的高效写法! [打印本页]

作者: bugs     时间: 2010-9-10 04:24    标题: [求助]求读取文件每行内容并赋值给变量的高效写法!
文件x.txt,共40行,如下格式: ABC=11111 ABC=22222 ABC=33333 ... ABC=44444 需要读取每行,把=号后的值赋给变量。 写了2段代码来实现,代码1处理完得7秒多,代码2得6秒多,目前文件内容才40行就这么耗时。- -! 求更好的解决方法! 代码1:
for /f "tokens=1 delims=:" %%i in ('findstr /n "." x.txt') do @set tl=%%i

set line=0
set j=0
for /l %%i in (1,+1,%tl%) do (
	set /a line+=1
	set /a j+=1
	for /f "tokens=1,3* delims=:=" %%a in ('findstr /n . x.txt') do if %%a==!line! set "n=%%b"
	set Value!j!=!n!
)
代码2:
for /f "tokens=1 delims=:" %%i in ('findstr /n "." x.txt') do @set tl=%%i

set j=0
for /l %%i in (1,+1,%tl%) do (
	set /a j+=1
	for /f "tokens=1,2* delims==" %%a in ('sed -n "!j!p" x.txt') do set "n=%%b"
	set Value!j!=!n!
)
[ Last edited by bugs on 2010-9-10 at 04:25 ]

作者: slore     时间: 2010-9-10 09:20
搞不明白要findstr干嘛?要2个for干嘛?

作者: DXSX     时间: 2010-9-10 10:25
@echo off & setlocal ENABLEDELAYEDEXPANSION set x=0 & IF EXIST TEMP.BAT DEL TEMP.BAT for /f "tokens=1,2 delims==" %%c in (x.txt) do (set /a x+=1 & echo set Value!x!=%%d >>temp.BAT) ENDLOCAL IF EXIST TEMP.BAT (CALL TEMP.BAT & DEL TEMP.BAT) [ Last edited by DXSX on 2010-9-10 at 10:52 ]

作者: bugs     时间: 2010-9-12 07:43
Originally posted by DXSX at 2010-9-10 10:25: @echo off & setlocal ENABLEDELAYEDEXPANSION set x=0 & IF EXIST TEMP.BAT DEL TEMP.BAT for /f "tokens=1,2 delims==" %%c in (x.txt) do (set /a x+=1 & echo set Value!x!=%%d &g ...
谢谢,很高效。 但是代码忽略了空行,如果想把空行也做为内容来处理怎么修改代码? [ Last edited by bugs on 2010-9-12 at 07:45 ]

作者: DXSX     时间: 2010-9-12 08:49
Originally posted by bugs at 2010-9-12 07:43: 谢谢,很高效。 但是代码忽略了空行,如果想把空行也做为内容来处理怎么修改代码? [ Last edited by bugs on 2010-9-12 at 07:45 ]
空行等于没有内容,用 set 是没有办法赋值的。也没有意义。

作者: bugs     时间: 2010-9-12 09:51
Originally posted by DXSX at 2010-9-12 08:49: 空行等于没有内容,用 set 是没有办法赋值的。也没有意义。
嗯。了解。 我只是想让行号可以匹配对应值,方便些。如 40行 变量名就是value40