Board logo

标题: 『求助』提取指定行的内容 其他一概略过 [打印本页]

作者: kcdsw     时间: 2006-4-25 19:37    标题: 『求助』提取指定行的内容 其他一概略过

呵呵  苦找了一下午 没找到合适的  还希望大家帮我
作者: zhangxue     时间: 2006-4-25 19:53
lmod好像可以。
作者: kcdsw     时间: 2006-4-25 20:51
呵呵 不太想借助其他软件来实现
就想用批处理~~  呵呵
作者: 3742668     时间: 2006-4-25 21:04
仔细翻一翻,前面发过的。
方法一 :
for /f "skip=3 delims=" %i in (a.txt) do echo %i
可以显示出第四行开始的内容,如果只想显示第四行的内容可以在后面接 &call或 &exit。
方法二:
for /f "delims=: tokens=1,2" %i in ('findstr /n . a.txt') do if "%i"="4" set %i=%j
echo 第四行的内容为:%4%
具体情况,具体分析。
作者: kcdsw     时间: 2006-4-25 22:28
谢谢你的解答
呵呵  这些我都翻过了 自己也写了个
只不过效率不太高  (自己感觉)
因为每个需要分析的文件都是50多M,又想偷懒~~
我的想法就是它能不能直接读第二行  节约时间嘛

突然又有了新的想法  看了你的回复 我在想 我们用for来寻找某个字符串 而for是需要遍历的 但是我的字符串只需要1次就ok了  可以不可以用其他的命令或者 找到后就跳出for语句? 暂时思维有些混乱~~~ 请指点

[ Last edited by kcdsw on 2006-4-25 at 22:33 ]
作者: 3742668     时间: 2006-4-25 22:42
findstr /?多看几遍,希望你能自己得到方法。
之所以给出第一种方案就是因为第一种可以跳过前三行然后结束,光看别人的是不会有多少提高的,自己多想想吧。
两种方法只要略做修改都可以提高效率。
对了,留心findstr的 {“常规表达式” 部分} + {参数 “/n” 部分},理解了这两部分可以轻松地指哪儿打哪儿。
作者: zhangxue     时间: 2006-4-25 22:48
Dos不支持for /f吧?
作者: kcdsw     时间: 2006-4-25 22:48
犯昏了
@echo off
echo 测试环境CMD@WinXP sp2,如果使用在其他系统请先测试!
echo 执行时需要进行字符串查找,请不要对相关文件进行改动
echo.
echo 执行中...请耐心等待

echo ----------------------------执行信息----------------------------
For /f %%a in ('dir /b *.ps') do call :name "%%a"
echo ----------------------------------------------------------------
echo 执行完毕,按任意键退出
pause >nul
exit

:name
set name=%~n1
if not [%name:~0,1%]==[2] goto :eof
for /f "tokens=2 delims=. " %%i in ('findstr pdn.pdf$ %name%.ps') do set file=%%i.xml
set xmlpath="%appdata%\NewspaperDirect\PressReader\queue\%file%"
for /F "tokens=*" %%c in ('type %xmlpath% ^|find "<title>"') do set paper="%%c"
set paper=%paper:~8,-9%
set paper=%paper:&#x20;= %
set name=%paper% %name:~0,4%-%name:~4,2%-%name:~6,2%
rename %1 "%name%.ps" &&echo %~n1.ps 改名为 %name%.ps
goto :eof
ok了  睡觉去~~  下下侬~~

[ Last edited by kcdsw on 2006-4-26 at 14:02 ]
作者: kcdsw     时间: 2006-4-26 00:12
剩下的明天再改吧   第二次要从xml里边查询  因为文件小 所以不觉得影响速度

最开始用type 重定向 用find查找
后来测试findstr的时候发现它的规律后速度大为提高  1秒就能执行完 以前得分钟计算
好了  以后工作会更省力了

[ Last edited by kcdsw on 2006-4-26 at 00:14 ]
附件 1: 新建 BMP 图像 (2).JPG (2006-4-26 00:14, 91.51 K, 下载附件所需积分 1点 ,下载次数: 2)



作者: 无奈何     时间: 2006-4-26 00:16
追求效率的话可以试试 sed

sed -n "2{p;q}" file.txt

可显示文件第二行
sed下载:http://www.student.northpark.edu/pemente/sed/gsed407x.zip
作者: kcdsw     时间: 2006-4-26 15:41
发现bug

更正
@echo off
echo 测试环境CMD@WinXP sp2,如果使用在其他系统请先测试!
echo 执行时需要进行字符串查找,请不要对相关文件进行改动
echo.
echo 执行中...请耐心等待

echo ----------------------------执行信息----------------------------
For /f %%a in ('dir /b 20*.ps') do call :name "%%a"
echo ----------------------------------------------------------------
echo 执行完毕,按任意键退出
pause >nul
exit

:name
set name=%~n1
if not [%name:~0,1%]==[2] goto :eof
for /f "tokens=2 delims=. " %%i in ('findstr pdn.pdf$ %name%.ps') do set file=%%i.xml
set xmlpath="%appdata%\NewspaperDirect\PressReader\queue\%file%"
for /F "tokens=*" %%c in ('type %xmlpath% ^|find "<title>"') do set paper="%%c"
set paper=%paper:&#x20;= %
set paper=%paper:~8,-9%
set name=%paper% %name:~0,4%-%name:~4,2%-%name:~6,2%
rename %1 "%name%.ps" &&echo %~n1.ps 改名为 %name%.ps
goto :eof
思路是用findstr中的$来界定最后需要查找的行
因为我需要的字符只在第二行出现所以效率还算可以
但是同样的命令在对xml文件查找的时候就出错了
最后还是用的type重定向 好在xml没有超过20kb的 所以也就这样了

对程序做了简单的优化  暂时这样吧  谢谢楼上的无奈何 兄和 楼上上的兄弟们~~

[ Last edited by kcdsw on 2006-4-26 at 15:46 ]