<html>
<head><title>平沙漠漠夜带刀</title></head>
<body background="../../../../images/back-1.jpg" leftmargin="50">
<CENTER><B><FONT COLOR="#FF6666"><FONT POINT-SIZE="16">平沙漠漠夜带刀 </FONT></FONT></B></CENTER>
<FONT SIZE=+1>
<pre>
我们的三毛,走啊走的,走到撒哈拉去了,她的朋友们总要说她:“嗨!三毛,好好的
德文教授不干,何必呢!”她留学过西班牙,在马德里大学毕业,美国伊利诺州的公务员也
检定及格。
可是,她一直说:我喜欢流浪。
我初抵沙漠时,十分希望做世界第一个
......
我大笑起来,笑得跌跌撞撞,踏到死人胸口上。我笑够了,对这个小家伙说:“胆子那
么小,又要半夜里出来祷告,快回去吧!”
他对我弯了一下腰,走了。
我发现,一只脚正踏在他母亲的左手。望望四周,月光没有了,那边坟场尽头处,似有
东西爬出来。我低叫一声快逃啊,一口气跑回家,撞开门来,将背靠在门上喘气,看看表,
四十分钟的路程,才十五分钟就跑回来了。就如朋友所说:“沙漠有趣的事情很多,你慢慢
的去发现吧!”今夜,真是够了。
</pre>
</font>
<center><A HREF="12.htm"><IMG SRC="up.gif" nosave border=0 alt="前" width="91" height="25"></A> <img src="home.gif" alt="黄金书屋" nosave border=0></A> <A HREF="14.htm"><IMG SRC="next.gif" alt="后" nosave border=0 width="176" height="25"></A></center>
</body>
</html>
平沙漠漠夜带刀
我们的三毛,走啊走的,走到撒哈拉去了,她的朋友们总要说她:“嗨!三毛,好好的
德文教授不干,何必呢!”她留学过西班牙,在马德里大学毕业,美国伊利诺州的公务员也
检定及格。
可是,她一直说:我喜欢流浪。
我初抵沙漠时,十分希望做世界第一个
......
我大笑起来,笑得跌跌撞撞,踏到死人胸口上。我笑够了,对这个小家伙说:“胆子那
么小,又要半夜里出来祷告,快回去吧!”
他对我弯了一下腰,走了。
我发现,一只脚正踏在他母亲的左手。望望四周,月光没有了,那边坟场尽头处,似有
东西爬出来。我低叫一声快逃啊,一口气跑回家,撞开门来,将背靠在门上喘气,看看表,
四十分钟的路程,才十五分钟就跑回来了。就如朋友所说:“沙漠有趣的事情很多,你慢慢
的去发现吧!”今夜,真是够了。
@echo off&setlocal enabledelayedexpansion
md newfile
for /l %%i in (1,1,88) do (
set num=%%i&set num=0!num!&set num=!num:~-2!
if exist !num!.txt (
for /f "delims=" %%j in ('findstr "\<<title>.*</title>\>" !num!.txt') do (
set "str=%%j"
set "str=!str:~13,-15!"
echo !str!>newfile\new!num!.txt
)
findstr /v "[<>]" !num!.txt>>newfile\new!num!.txt
)
)
pause
Originally posted by WANKOILZ at 2008-5-27 03:28 PM: 我来个比较粗糙的,因为发现除题目外,其余要抛弃的行都应该包含<或>,所以思路就是找题目和不包含<>的行。把以下P和txt文件放在一起然 ...就是 单独对04.txt运行后编辑出来的如下:
平沙漠漠夜带刀
我们的三毛,走啊走的,走到撒哈拉去了,她的朋友们总要说她:“嗨!三毛,好好的
德文教授不干,何必呢!”她留学过西班牙,在马德里大学毕业,美国伊利诺州的公务员也
检定及格。
可是,她一直说:我喜欢流浪。
我初抵沙漠时,十分希望做世界第一个
......
我大笑起来,笑得跌跌撞撞,踏到死人胸口上。我笑够了,对这个小家伙说:“胆子那
么小,又要半夜里出来祷告,快回去吧!”
他对我弯了一下腰,走了。
我发现,一只脚正踏在他母亲的左手。望望四周,月光没有了,那边坟场尽头处,似有
东西爬出来。我低叫一声快逃啊,一口气跑回家,撞开门来,将背靠在门上喘气,看看表,
四十分钟的路程,才十五分钟就跑回来了。就如朋友所说:“沙漠有趣的事情很多,你慢慢
的去发现吧!”今夜,真是够了。
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /a-d /b *.txt') do (
for /f "delims=" %%i in ('type %%a') do (
set str=%%i
if "!str:~6,7!"=="<title>" echo !str:~13,-15!>%%a
if "!str:~-4!"=="pre>" set /a n+=1
if !n! equ 1 if not "!str:~,5!"=="<pre>" echo !str!>>%%a
)
set n=0
)
echo 全部搞定!
pause>nul
Originally posted by zw19750516 at 2008-5-28 17:06: @echo off&setlocal enabledelayedexpansion for /f "delims=" %%a in ('dir /a-d /b *.txt') do ( for /f "delims=" %%i in ('type %%a') do ( set str=%%i ...上面是不行成任何临时文件的方法,但效率差点,如要效率高点,可修改如下:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /a-d /b *.txt') do (
for /f "delims=" %%i in (%%a) do (
set str=%%i
if "!str:~6,7!"=="<title>" echo !str:~13,-15!>temp.txt
if "!str:~-4!"=="pre>" set /a n+=1
if !n! equ 1 if not "!str:~,5!"=="<pre>" echo !str!>>temp.txt
)
set n=0&del /q %%a&ren temp.txt %%~nxa
)
echo 全部搞定!
pause>nul
@echo off&setlocal enabledelayedexpansion
md newfile
for /l %%i in (1,1,88) do (
set num=%%i&set num=0!num!&set num=!num:~-2!
if exist !num!.txt (
for /f "delims=" %%j in ('findstr "\<<title>.*</title>\>" !num!.txt') do (
set "str=%%j"
set "str=!str:~13,-15!"
echo !str!>newfile\new!num!.txt
)
findstr /v "[<>]" !num!.txt>>newfile\new!num!.txt
)
if exist newfile\new!num!.txt (
cd.>newfile\n!num!.txt
for /f "delims=" %%z in (newfile\new!num!.txt) do >>newfile\n!num!.txt echo %%z
)
del newfile\new!num!.txt
)
pause
@echo off&setlocal enabledelayedexpansion
md newfile
for /l %%i in (1,1,88) do (
set num=%%i&set num=0!num!&set num=!num:~-2!
if exist !num!.txt (
for /f "delims=" %%j in ('findstr "\<<title>.*</title>\>" !num!.txt') do (
set "str=%%j"
set "str=!str:~13,-15!"
echo !str!>newfile\new!num!.txt
)
findstr /v "[<>]" !num!.txt>>newfile\new!num!.txt
findstr . newfile\new!num!.txt>newfile\!num!.txt&del newfile\new!num!.txt
)
)
pause
Originally posted by WANKOILZ at 2008-5-29 18:37: 去空行的话,用 findstr . a.txt>b.txt 这种方法比较简洁。 [code]@echo off&setlocal enabledelayedexpansion md newfile for /l %%i in (1,1,88) do ( set num=%%i&set num=0 ...findstr在处理文本字符上效率不及if,所以个人认为在处理大量字符时,尽量用if好一点。
@echo off&setlocal enabledelayedexpansion
::建10000个txt文件
for /l %%i in (1,1,10000) do (
(echo will sort
echo namejm)>%%i.txt
)
::测试findstr消耗时间
echo findstr:
echo %time%
findstr "jm" *.txt>nul
echo %time%
::测试if消耗时间
echo if:
echo %time%
for /l %%i in (1,1,10000) do (
for /f "delims=" %%j in (%%i.txt) do (
set "str=%%j"
if "!str:~-2!"=="jm" echo jm>nul
)
)
echo %time%
pause
Originally posted by WANKOILZ at 2008-5-29 20:20: zw兄的代码每行判断,文本数量多的时候恐怕效率比不上findstr吧. 我用以下代码测试10000个txt文件,结果findstr消耗 不到1秒,而if消耗 大于3秒。 测试 ...楼上的测试代码有误,我认为要比较就要进行逐行判断,请测试以下代码(找出1.txt中所有以abcd开头的行并赋值为A):
@echo off
if exist 1.txt del /q 1.txt
for /l %%i in (1,1,100) do echo abcd cn-dos>>1.txt
for /l %%i in (1,1,100) do echo cn-dos abcd>>1.txt
echo findstr:
echo 当前时间:%time%
for /f "delims= " %%a in (1.txt) do echo %%a|findstr "abcd">nul&&set %%a=A
echo 当前时间:%time%
echo if:
echo 当前时间:%time%
for /f "delims= " %%a in (1.txt) do if "%%a" equ "abcd" set %%a=A
echo 当前时间:%time%
pause>nul
findstr:
当前时间:20:52:38.78
当前时间:20:53:11.82
if:
当前时间:20:53:11.82
当前时间:20:53:11.82
Originally posted by WANKOILZ at 2008-5-29 21:07: 管道+findstr 这种方式效率低是肯定的,也是应该尽量避免的。 findstr需单独用,如findstr "" *.txt 这种形式才能体现其效率。 我认为zw兄的例子在findstr的常规使用范围之外。那请兄弟用findstr找出上述1.txt中以abcd开头的行吧。 ps:我费这么力气无非是要证明findstr在处理文本字符时效率比不上if,请兄弟不要误会了我的意思。 [ Last edited by zw19750516 on 2008-5-29 at 09:13 PM ]
@echo off
findstr "^abcd" 1.txt
pause
Originally posted by WANKOILZ at 2008-5-29 21:13: 不会的,zw兄看这个是不是快点:请自己测试运行结果和时间吧。[ Last edited by WANKOILZ on 2008-5-29 at 09:17 PM ]@echo off findstr "^abcd" 1.txt pause
@echo off&md abcd
set "f=\<<title>.*</title>\>"
for /f "tokens=1,4 delims=:<>" %%a in ('findstr "%f%" *.txt') do set ".%%~na=%%b"
setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%a in ('findstr /v "[<>]" *.txt') do (
if not defined %%~na set %%~na=aaa&>>"abcd\%%a" echo !.%%~na!
>>"abcd\%%a" echo.%%b
)
start abcd
Originally posted by 26933062 at 2008-5-29 21:23: findstr的效率并不是zw兄所想的那么不堪。(关键看怎么用) findstr的功能却可能超出你的想像。 按3楼 WANKOILZ 兄的思路也写了个,同时也给3楼代码提 ...我并不是说findstr一无是处,只是在说明在处理文本字符上不如if效率高。
Originally posted by zw19750516 at 2008-5-29 20:52: 楼上的测试代码有误,我认为要比较就要进行逐行判断,请测试以下代码(找出1.txt中所有以abcd开头的行并赋值为A): [code] @echo off if exist 1.txt del /q ...每个命令都各有巧妙。 严格来说findstr和if是无法进行比较的,对文本处理用if就还要同时配合for、set等其它命令。 我们应该根据需要各取所长。而不以己之长比其之短。 如:zw兄所说,我拟一题,用findstr和for来比较速度如何? a.txt 内容有一万行,其中有10行是以abcd开头的, 要求:显示a.txt中 abcd 开头的行。
Originally posted by WANKOILZ at 2008-5-29 21:45: 26933062的代码确实很精简,令人佩服。 把文本名字作为变量,在findstr /v "[<>]" *.txt的时候就能同时获得文本的标题和不包含<>的内容。 ...哦? 有必要么? 或者说有何区别?给个实例好么、?
哦? 有必要么? 或者说有何区别?给个实例好么、?误会了,我只是分析了以下你代码的妙处,勿怪。
Originally posted by zw19750516 at 2008-5-29 08:00 PM: 不知楼主测试了我发的两段代码没有,是不是不行,还是怎么的,怎么就没回馈的了(我自己建了10个文件是测试全部成功的)运行后全部成功!!谢谢,我不太看懂的地方做了些修改,我感觉更好懂一些,先未征的你的同意,见凉,改了的地方为:if !n! equ 1 if not "!str:~,5!"=="<pre>" echo !str!>>%%a,改为:if !n! equ 1 if not "!str:~-4!"=="pre>" echo !str!>>%%a全部如下
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /a-d /b *.txt') do (
for /f "delims=" %%i in ('type %%a') do (
set str=%%i
if "!str:~6,7!"=="<title>" echo !str:~13,-15!>%%a
if "!str:~-4!"=="pre>" set /a n+=1
if !n! equ 1 if not "!str:~-4!"=="pre>" echo !str!>>%%a
)
set n=0
)
echo 全部搞定!
pause>nul