Board logo

标题: 求一批处理从文本文件里提取字符 [打印本页]

作者: tianzizhi     时间: 2006-12-26 03:00    标题: 求一批处理从文本文件里提取字符

现在www.txt文件内容如下,我想用一批处理从www.txt里提取以.htm结尾的网页名,如:
200104174738.htm
200104174772.htm
200104174786.htm
然后放到zhang.txt文件里,请问如何实现,谢谢,不要用第三方工具的.

原始文件在这:www.txt


2002年1月23日     3:26         6031 200104174738.htm             2002年1月23日     3:26      

   5553 200104174772.htm             2002年1月23日     3:26         5155 200104174773.htm   

         2002年1月23日     3:26         7634 200104174781.htm             2002年1月23日     

3:26         5180 200104174786.htm             2002年1月23日     3:26         6658

200104174834.htm             2002年1月23日     3:26         6351 200104174883.htm            

2002年1月23日     3:26         4249 200104174897.htm             2002年1月23日     3:26     

    4207 200104174907.htm             2002年1月23日     3:26         7199 200104174931.htm   

          2002年1月23日     3:26         6346 200104174932.htm             2002年1月23日     

3:26         8475 200104174943.htm             2002年1月23日     3:26         5321

200104174954.htm             2002年1月23日     3:26         5831 200104174977.htm            

2002年1月23日     3:26         6150 200104174978.htm             2002年1月23日     3:26     

   10850 200104175018.htm             2002年1月23日     3:26         7552 200104175037.htm   

          2002年1月23日     3:26         7879 200104175047.htm             2002年1月23日     

3:26         5086 200104175054.htm             2002年1月23日     3:26         6753

200104175055.htm             2002年1月23日     3:26         3925 200104175079.htm            

2002年1月23日     3:26         5588 200104175081.htm             2002年1月23日     3:26     

    5237 200104175082.htm             2002年1月23日     3:26         5881 200104175130.htm   

          2002年1月23日     3:26         5047 200104175170.htm             2002年1月23日     

3:26         5423 200104175225.htm             2002年1月23日     3:26         6273

200104175226.htm             2002年1月23日     3:26         8096 200104175235.htm            

2002年1月23日     3:26         5479 200104175256.htm             2002年1月23日     3:26     

    6392 200104175257.htm             2002年1月23日     3:26        10924 200104175258.htm   

          2002年1月23日     3:26         5758 200104175259.htm             2002年1月23日     

3:26         6058 200104175276.htm             2002年1月23日     3:26         3535

200104175288.htm             2002年1月23日     3:26         5297 200104175333.htm            

2002年1月23日     3:26         6738 200104175361.htm             2002年1月23日     3:26     

    8533 200104175366.htm             2002年1月23日     3:26         7232 200104175370.htm   

          2002年1月23日     3:26         6548 200104175382.htm             2002年1月23日     

3:26         7091 200104175391.htm             2002年1月23日     3:26         4415

200104175400.htm             2002年1月23日     3:26         5165 200104175411.htm            

2002年1月23日     3:26         7801 200104175412.htm             2002年1月23日     3:26     

    3750 200104175431.htm             2002年1月23日     3:26         4553 200104175432.htm   

          2002年1月23日     3:26         7356 200104175457.htm             2002年1月23日     

3:26         5534 200104175488.htm             2002年1月23日     3:26         5488

200104175506.htm             2002年1月23日     3:26         8817 200104175516.htm            

2002年1月23日     3:26         5239 200104175573.htm             2002年1月23日     3:26     

    8497 200104175634.htm             2002年1月23日     3:26        12113 200104175653.htm   

          2002年1月23日     3:26         5094 200104175661.htm             2002年1月23日     

3:26         8138 200104175690.htm             2002年1月23日     3:26         4387

200104175707.htm             2002年1月23日     3:26         3770 200104175732.htm            

2002年1月23日     3:26         5334 200104175733.htm             2002年1月23日     3:26     

    6303 200104175744.htm             2002年1月23日     3:26         7621 200104175745.htm   

          2002年1月23日     3:26         5329 200104175746.htm             2002年1月23日     

3:26         6310 200104175789.htm             2002年1月23日     3:26         4983

200104175808.htm             2002年1月23日     3:26         6183 200104175815.htm            

2002年1月23日     3:26         6465 200104175835.htm             2002年1月23日     3:26     

    6460 200104175849.htm             2002年1月23日     3:26         7387 200104175858.htm   

          2002年1月23日     3:26         6035 200104175862.htm             2002年1月23日     

3:26         5212 200104175872.htm             2002年1月23日     3:26         7749

200104175897.htm             2002年1月23日     3:26         8160 200104175910.htm            

2002年1月23日     3:26         4545 200104175933.htm             2002年1月23日     3:26     

    5628 200104175934.htm             2002年1月23日     3:26         3817 200104175981.htm   

          2002年1月23日     3:26         3085 200104175982.htm             2002年1月23日     

3:26         8211 200104175983.htm             2002年1月23日     3:26         5113

200104176007.htm             2002年1月23日     3:26         4888 200104176012.htm

[ Last edited by tianzizhi on 2006-12-26 at 03:02 AM ]
作者: everest79     时间: 2006-12-26 03:08
for /f %i in (a.txt) do echo %i|findstr /e /i ".htm"&&echo %i>b.txt
作者: tianzizhi     时间: 2006-12-26 03:15
楼上的不要想当然,要亲自试才行的,要那么容易我就不发贴了.
你写的只会得到第一个变量就了事了,那第一个变量还不是我想要的以.htm结尾的网页名.不过还要谢谢你的热心帮助.

[ Last edited by tianzizhi on 2006-12-26 at 03:16 AM ]
作者: ccwan     时间: 2006-12-26 03:29

@echo off
for /f "tokens=1-5 delims= " %%i in (www.txt) do (
   if "%%~xi"==".htm" (>>zhang.txt echo %%i)
   if "%%~xj"==".htm" (>>zhang.txt echo %%j)
   if "%%~xk"==".htm" (>>zhang.txt echo %%k)
   if "%%~xl"==".htm" (>>zhang.txt echo %%l)
   if "%%~xm"==".htm" (>>zhang.txt echo %%m)
)

作者: everest79     时间: 2006-12-26 03:38


  Quote:
Originally posted by tianzizhi at 2006-12-25 02:15 PM:
楼上的不要想当然,要亲自试才行的,要那么容易我就不发贴了.
你写的只会得到第一个变量就了事了,那第一个变量还不是我想要的以.htm结尾的网页名. ...

你试过没有?
作者: ccwan     时间: 2006-12-26 03:39
惭愧!以为www.txt内容就是楼主贴出来的呢!
一看附件,哇!
作者: tianzizhi     时间: 2006-12-26 03:41
ccwan兄的也不行,zhang.txt里只有一个网页名:200104174738.htm.
还请再改进,还有每行被空格隔开的不是固定的5个变量,有的是6个,有的是5个, 请用我的原始文件测试.
作者: ccwan     时间: 2006-12-26 03:42
楼上用了一个>,成功的话也只会保留最后一个,应该用>>
作者: ccwan     时间: 2006-12-26 03:43


  Quote:
Originally posted by tianzizhi at 2006-12-26 03:41:
ccwan兄的也不行,zhang.txt里只有一个网页名:200104174738.htm.
还请再改进,还有每行被空格隔开的不是固定的5个变量,有的是6个,有的是5个, 请用我的原始文䠮..

不会吧?!我试过了,若依你一楼贴出来的内容(非附件),显示66个呢!
作者: tianzizhi     时间: 2006-12-26 03:44
回everest79,我用你的试过了,只得到:2002年1月23日,这个.
你再认真分析一下你写的这句:for /f %i in (a.txt) do echo %i|findstr /e /i ".htm"&&echo %i>b.txt
作者: ccwan     时间: 2006-12-26 03:45
还有,你的附件内容不换行啊。好奇怪。无法正确读取。

[ Last edited by ccwan on 2006-12-26 at 03:48 AM ]
作者: namejm     时间: 2006-12-26 03:49
  www.txt 文本里可能没有任何回车,导致 for 语句无法处理如此长的行内容,楼主能不能发一个有回车的文本出来?
作者: tianzizhi     时间: 2006-12-26 04:06
难道真是没有回车惹的事,(这个错误还不容易发现啊),我是网页另存为.txt得到的www.txt,如果用过回车后可以解决此问题,那问题也就算解决了,谢谢大家了,呵呵..
作者: vkill     时间: 2006-12-26 05:05
用三方工具到很好解决,呵呵,sed
作者: ccwan     时间: 2006-12-26 05:11
还是请vkill写出代码来吧,有时间请教教我用sed,谢谢。
作者: tianzizhi     时间: 2006-12-26 06:12
我试过了,www.txt文件里的内容就一行的,没有换行,难怪我试了好多都不正确.我弄一小段文件回车后用ccwan的代码可以,误差有一点.
如不回车,就这么长的一行有办法提取出来.htm结尾的么,用第三方工具也行,大家没事了想想怎么才能做到,呵呵.......
作者: vkill     时间: 2006-12-26 06:27
sed "s/htm/\n/" life|sed "/.htm/!d"|sed "s/.* 200/200/;s/.htm.*/.htm/"|more>a.txt
type a.txt
pause>nul

[ Last edited by vkill on 2006-12-26 at 06:35 AM ]
作者: vkill     时间: 2006-12-26 06:30
呵呵,sed awk解决文字很容易了
作者: ccwan     时间: 2006-12-26 06:54
没看懂。
作者: jmz573515     时间: 2006-12-26 10:21
找了半天,没找到文件的规律~
作者: jmz573515     时间: 2006-12-26 21:17
'终于找到了解决方法,把下面的代码存为VBS
'你要处理的文件www.txt和这个VBS文件一定要在一个目录.
on error resume next
set fso=createobject("scripting.filesystemobject")
set file=fso.opentextfile("www.txt",1)
a=file.readall
file.close
i=0
do
  i=instr(i+1,a,".htm")
if i<>0 then b=b & mid(a,i-12,16)& vbcrlf
loop  until i=0
set file=fso.createtextfile("222.txt")
file.write b
file.close
msgbox "文件处理完毕,请查看222.txt文件",48+4096,"操作成功"
[ Last edited by jmz573515 on 2006-12-26 at 08:44 AM ]
作者: namejm     时间: 2006-12-26 21:31
  按照你的提示,把www.txt和那个vbs放在同一目录下操作,但是还是出错了。
附件 1: 出错.JPG (2006-12-26 21:31, 9.48 K, 下载附件所需积分 1点 ,下载次数: 6)



作者: jmz573515     时间: 2006-12-26 21:36
晕~~
我试了多遍都没有问题,你要处理的文件名是不是www.txt?

如果还不行你可以试一下,把www.txt改成11.txt之后把vbs里的www.txt也改成11.txt看看行不行.
作者: namejm     时间: 2006-12-26 21:42
  犯了个低级错误:复制代码的时候,把最开始的 ' 漏掉了。建议把代码部分用 [code] 和 [/code] 括起来,以方便别人的复制。
作者: tianzizhi     时间: 2006-12-26 23:13
vbs确实厉害,不过现在还不能去学它,现在还要学我的c,以后试着用c解决我遇到的问题.
作者: netbenton     时间: 2009-4-12 08:55    标题: 顶起陈年老贴,来迟了,呵呵


@echo off&setlocal enabledelayedexpansion
set "t="
(for /f "tokens=*" %%a in (www.txt) do (set "str=!t!%%a"&set "t=%%a"&call :sub !str!))>dest.txt
start dest.txt
pause
goto :eof
:sub
if /i "%~x1"==".htm" echo %1
shift
if not "%1"=="" goto :sub
set t=!t:.htm=!
goto :eof
来一个纯批的!
作者: freeants001     时间: 2009-4-12 09:20
我怎么下不了附件!~~~
作者: freeants001     时间: 2009-4-12 09:50
来个混血的
more +4 "%~f0">#js.js
cscript /nologo #js.js 文件.txt
goto:eof
:::::::::::::::::::::::
File_Path=WScript.arguments(0);
var fso=new ActiveXObject("scripting.filesystemobject");
var fl=fso.opentextfile(File_Path,1);
var sss=fl.readall();
var fl=fso.opentextfile(File_Path+"_处理后.txt",2,1);
sss=sss.replace(/[\s\S]*?\s+(\d+\.htm)/g,"$1\r\n");
fl.write(sss);