楼 主
如何提取文本中第N行到第N行间的内容
发表于 2008-08-15 15:43 · 中国 湖北 襄阳 电信
新手上路
★
积分 15 发帖 7 注册 2008-08-08 01:27 17年会员 UID 122944 性别 女
状态 离线
我想实现的是 提取内容后,这些内容在原文本文档中没有了。就是相当于把一个文本中第N行到第N行的内容转移出来。以前讨论过的 都是相当于复制出来,在源文件中还存在。
比如要把 a.txt 中 第 W 行 到第 Y 行的内容提取到b.txt,并且原文中没有了。如何写呢?
[ Last edited by lovetizz on 2008-8-15 at 03:44 PM ]
第 2 楼
发表于 2008-08-15 17:53 · 中国 湖北 武汉 电信
中级用户
★★
积分 471 发帖 207 注册 2007-05-03 14:53 19年会员 UID 87369 性别 男
状态 离线
先把第w行到第y行的内容提取到文件中,同时把去掉这些行的原文件放进临时文件,再用临时文件覆盖原文件。
第 3 楼
发表于 2008-08-16 00:13 · 中国 湖北 襄阳 电信
新手上路
★
积分 15 发帖 7 注册 2008-08-08 01:27 17年会员 UID 122944 性别 女
状态 离线
第 4 楼
发表于 2008-08-16 19:18 · 中国 湖北 襄阳 电信
新手上路
★
积分 15 发帖 7 注册 2008-08-08 01:27 17年会员 UID 122944 性别 女
状态 离线
第 5 楼
没调试过,请楼主自己试一下吧
发表于 2008-08-16 19:33 · 中国 广东 惠州 联通
初级用户
★
积分 20 发帖 8 注册 2008-08-16 18:27 17年会员 UID 123364 性别 男
状态 离线
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,再
echo rem echo后面有空格
m-n+1次
再将m+1直到末尾输入到result_2.txt。
========
关键的语句是 for /f 语句
其中用 call set 计算循环次数
========
麻烦自己调试一下吧。。。。
第 6 楼
有点儿忙,抱歉
发表于 2008-08-16 19:34 · 中国 广东 惠州 联通
初级用户
★
积分 20 发帖 8 注册 2008-08-16 18:27 17年会员 UID 123364 性别 男
状态 离线
第 7 楼
Re 5楼
发表于 2008-08-16 22:28 · 中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023 发帖 5,017 注册 2007-05-31 19:39 19年会员 UID 89899 性别 男
状态 离线
你这个代码的语法错误太多了吧?
你是想给大家出一个语法改错的题目吗?
第 8 楼
发表于 2008-08-18 23:12 · 中国 湖北 襄阳 电信
新手上路
★
积分 15 发帖 7 注册 2008-08-08 01:27 17年会员 UID 122944 性别 女
状态 离线
第 9 楼
发表于 2008-08-18 23:12 · 中国 湖北 襄阳 电信
新手上路
★
积分 15 发帖 7 注册 2008-08-08 01:27 17年会员 UID 122944 性别 女
状态 离线
第 10 楼
发表于 2008-08-19 00:11 · 美国 惠普HP
版主
★★★★★
积分 9,023 发帖 5,017 注册 2007-05-31 19:39 19年会员 UID 89899 性别 男
状态 离线
有人写过一段代码,你先看看吧,有问题再问。
经常要对文件的指定行进行读取,特写了一个读取文件指定行的小程序段(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
第 11 楼
发表于 2008-08-19 07:16 · 中国 湖北 襄阳 电信
新手上路
★
积分 15 发帖 7 注册 2008-08-08 01:27 17年会员 UID 122944 性别 女
状态 离线
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正