中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何提取文本中第N行到第N行间的内容
作者:
标题: 如何提取文本中第N行到第N行间的内容 上一主题 | 下一主题
lovetizz
新手上路





积分 15
发帖 7
注册 2008-8-8
状态 离线
『楼 主』:  如何提取文本中第N行到第N行间的内容

我想实现的是 提取内容后,这些内容在原文本文档中没有了。就是相当于把一个文本中第N行到第N行的内容转移出来。以前讨论过的  都是相当于复制出来,在源文件中还存在。

比如要把 a.txt 中 第 W 行 到第 Y 行的内容提取到b.txt,并且原文中没有了。如何写呢?

[ Last edited by lovetizz on 2008-8-15 at 03:44 PM ]

2008-8-15 15:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ThinKing
中级用户





积分 471
发帖 207
注册 2007-5-3
状态 离线
『第 2 楼』:  

先把第w行到第y行的内容提取到文件中,同时把去掉这些行的原文件放进临时文件,再用临时文件覆盖原文件。

2008-8-15 17:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lovetizz
新手上路





积分 15
发帖 7
注册 2008-8-8
状态 离线
『第 3 楼』:  

能不能具体给个代码啊 。。。。

2008-8-16 00:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lovetizz
新手上路





积分 15
发帖 7
注册 2008-8-8
状态 离线
『第 4 楼』:  

没人解答啊。。。

2008-8-16 19:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Karman
初级用户





积分 20
发帖 8
注册 2008-8-16
状态 离线
『第 5 楼』:  没调试过,请楼主自己试一下吧



  Quote:
set /a m=5
set /a n=3
set /a l=m-n+1
set /a nn=%n%
for /f "skip=nn" %%i in(files.txt) (
Call set /a l=%%l%%-1
if %l% les 1 goto next
echo %%i>>result_1.txt
)
:next

以上是提取n行到m行的批处理。
剩下的部分原理相同,相当于先提取1到n-1行的结果到result_2.txt,再

  Quote:
echo rem echo后面有空格

m-n+1次
再将m+1直到末尾输入到result_2.txt。
========
关键的语句是 for /f 语句
其中用 call set 计算循环次数
========
麻烦自己调试一下吧。。。。

2008-8-16 19:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Karman
初级用户





积分 20
发帖 8
注册 2008-8-16
状态 离线
『第 6 楼』:  有点儿忙,抱歉

新手要多多试验。。。。

2008-8-16 19:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 7 楼』:  Re 5楼

你这个代码的语法错误太多了吧?
你是想给大家出一个语法改错的题目吗?



2008-8-16 22:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lovetizz
新手上路





积分 15
发帖 7
注册 2008-8-8
状态 离线
『第 8 楼』:  

。。。。。。

试过了 不行 。。。

2008-8-18 23:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lovetizz
新手上路





积分 15
发帖 7
注册 2008-8-8
状态 离线
『第 9 楼』:  

没有高手来解答一下? 都去看奥运了。。

2008-8-18 23:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 10 楼』:  

有人写过一段代码,你先看看吧,有问题再问。

  Quote:
经常要对文件的指定行进行读取,特写了一个读取文件指定行的小程序段(ReadLine.Bat),方面以后调用。

使用也比较简单:"Call ReadLine <文件名> <跳过的行数> <读取行数>"就可以了。比如在一个批处理里加上一句"Call ReadLine a.txt 5 7",那么将跳过a.txt文件的前5行,显示下面的7行字符,也包含空行。也可以不指定第三个参数。

ReadLine.Bat


@echo off&SetLocal ENABLEDELAYEDEXPANSION
if "%1"=="" (goto --help) else (set file=%~s1)
if "%2"=="" (set first="delims=: tokens=1*") else (set first="skip=%2 delims=: tokens=1*")
if "%3"=="" (
        for /f %first% %%a in ('findstr /n .* %file%') do echo/%%b
        goto :EOF
)
set last=%3
set loop=0
for /f %first% %%a in ('findstr/n .* %file%') do (
        if not defined lxmxn (echo/%%b&set /a loop+=1) else (goto :EOF)
        if "!loop!"=="%last%" set lxmxn=Nothing
)
GOTO :EOF

:--help
echo/======================================
echo/本程序段需要带参数才能正常运行
echo/&echo/Usage:&echo/Call ReadLine ^<文件名^> ^<跳过行数^> ^<读取行数^>
echo/&echo/例如:call ReadLine aa.txt 5 7 ,将跳过aa.txt文件的前5行,读取下面的7行字符
echo/&echo/如果^<跳过行数^>没有指定,就从文件第一行读取
echo/&echo/指定^<读取行数^>时必须指定^<跳过行^>
echo/======================================
goto :eof




2008-8-19 00:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lovetizz
新手上路





积分 15
发帖 7
注册 2008-8-8
状态 离线
『第 11 楼』:  

谢了

2008-8-19 07:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: