[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]求助批处理怎样取多个同一关键词行的下一行

某崖的小说遇到值的读的,想提取到一文本集中阅读楼主。
多个网页下载合并后,已提取到源码内容为   发言人  下一行为发言内容。由于网友回贴,造成如下示例的内容间杂。所以还需要提取楼主的发言并其他加工。格式大致如下

<divclass="atl-info"><span>楼主:<ahref="http://www
<divclass="bbs-contentclearfix">  爷爷是传承五代人的  这行留
<divclass="atl-info"><span><strongclass="host">楼主</strong>:<ahref="http://www
<divclass="bbs-content">  床尾站着一小仙,男,中批  这行留
<divclass="atl-info"><span><strongclass="host">其他发言人</strong>
<divclass="bbs-content">  其他发言人的发言,特点长短不一,也可能引用楼主大段文字
<divclass="atl-info"><span><strongclass="host">楼主</strong>:<ahref="http://www
<divclass="bbs-content"><br>  <imgsrc="http://static.tianyaui.com/img/static/2011/imgloading.gif"title="点击图片  这行留
<divclass="atl-info"><span><strongclass="host">楼主</strong>:<ahref="http://www
<divclass="bbs-content">  那日入定,爷爷带  这行留
  1. @echo on&&setlocal enabledelayedexpansion
  2. for /f "tokens=1 delims=:" %%i in ('findstr /n "楼主" 33.txt') do (
  3.   echo 楼主标志的行号 %%i
  4.   set /a xy=%%i+1
  5.   set js=
  6. for /f "delims=" %%m in ("33.txt") do (
  7.   set /a js+=1
  8.   if !xy!==!js! echo %%m>>44.txt
  9.   echo 标准!xy!  计数!js!
  10. )
  11. )
  12. pause
复制代码
我尝试写的代码,计数!js!永远为 1,因此提不到楼主发言。所以求助,感谢给予帮助。     结贴时对上面略改
目的,学习批处理

长贴凑趣》据LZ三楼回复之意,顺借本题复习一下纯P伪数组的用法...
  1. @echo off
  2. for %%n in (2,4,8,10) do set "[%%n]=%%n" &::建立伪数组 [n]=n 对应行序号
  3. set "n=0" &setlocal enabledelayedexpansion
  4. (for /f "delims=" %%s in (33.txt) do (
  5. set/a "n+=1" &for %%k in (!n!) do set "An=![%%k]!"
  6. if !An! equ !n! echo,%%s
  7. ))>44.txt
复制代码

TOP

回复 46# WHY
的确出现了自动断行的情况,不过由于是直接提取网页源码,最后以htox32c网页转文本的方式,没有什么影响。同时,图文混合的源码,图片也自动没有了。
目的,学习批处理

TOP

Win7 默认的 PowerShell v2.0 中的 Select-String 不支持 -LiteralPath 参数
PowerShell "..." > b.txt 这种重定向方式也有问题,字符串会自动断行。
这样测试:PowerShell -v 2.0 "..." > b.txt

TOP

贴一个 grep 方案,没有 gawk 和 sed 来的方便。
  1. grep -P -A1 --no-group-separator ">楼主(:)?<" a.txt | grep -P -v ">楼主(:)?<" | find /v "" > b.txt
复制代码
1

评分人数

    • fzp070: 感谢分享,有效。技术 + 1

TOP

回复 43# qixiaobin0715
速度也不慢,1M文本处理也是瞬间的事
目的,学习批处理

TOP

纯p 处理文本文件不是强项,下面代码勉强可用,效率应当不是太好。bat文件保存为ANSI编码,要处理的文本最好也是ANSI编码:
  1. @echo off
  2. set n=0
  3. setlocal enabledelayedexpansion
  4. (for /f "delims=" %%i in (33.txt) do (
  5.     if !n! equ 1 echo,%%i
  6.     set "str=%%i"
  7.     if not "!str:>楼主=!"=="!str!" (set n=1) else set n=0
  8. ))>44.txt
  9. pause
复制代码
2

评分人数

    • fzp070: 这个思路学习了。感谢分享!技术 + 1
    • hlzj88: 谢谢,收藏了!学习学习技术 + 1

TOP

回复 41# terse


    OK,这次两条都可以了。谢谢分享!

TOP

回复 40# fzp070
简单事给复杂化了,两条用上一条就可以了,文件编码是UTF-8的话就用第一条命令,编码ANSL就用第二条命令,脚本和文件同一目录处理
  1. powershell "(select-string  -Lit '%~dp0a.txt' -pattern '>楼主:?<' –context 1 ).Context.PostContext" >a_a.txt
复制代码
  1. powershell "(select-string -Lit '%~dp0a1.txt' -pattern '>楼主:?<' –context 1 -Encoding default).Context.PostContext" >a_1.txt
复制代码
2

评分人数

    • hlzj88: 谢谢,收藏了!技术 + 1
    • fzp070: 两条都OK了技术 + 1

TOP

回复 39# terse


    嗯,这样之后,第2条命令正常了(第1条不报错,但输出空白),但也不方便了,每次使用都要手动输入目录,目录太长还不好看。

TOP

回复 38# fzp070
如有特殊字符 加个参数试下 类似于这样
  1. select-string -Lit 'e:\[文本处理] 提文求助:取\a1.txt'   ......  
复制代码

TOP

回复 34# terse
  1. powershell "(select-string 'a.txt' -pattern '>楼主:?<' –context 1).Context.PostContext" >a11.txt
  2. powershell "(select-string 'a.txt' -pattern '>楼主:?<' –context 1  -Encoding default ).Context.PostContext" >a_#.txt
复制代码
    大概找到原因了,跟目录名称是否含有特殊字符有关
例如目录是E:\11\,你34楼的两条命令都不报错,但第1条命令输出为空,第2条命令正常
如果目录是E:\[文本处理] 提文求助:取\,则两条命令都报错,找不到文本
也就是说34楼两条命令没有对含有特殊字符的目录进行处理。

TOP

回复 36# terse


    在批处理所在目录 和如下目录 均放有A.txt,但跟6楼的powershell命令情况一样,在我电脑都提示找不到文本。目前只有26楼的 两个powershell命令 在我的电脑均正常
  1. “C:\Windows\System32\WindowsPowerShell\v1.0\a.txt”
复制代码

TOP

回复 35# fzp070

找不到文件? 没有A.txt吗?

TOP

回复 34# terse

在我电脑系统上运行报错:
  1. select-string : 找不到路径“C:\Windows\System32\WindowsPowerShell\v1.0\a.txt”,因为该路径不存在。
  2. 所在位置 行:1 字符: 2
  3. + (select-string 'a.txt' -pattern '>楼主:?<' –context 1).Context.PostCont ...
  4. +  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5.     + CategoryInfo          : ObjectNotFound: (C:\Windows\Syst...hell\v1.0\a.txt:String) [Select-String], ItemNotFound
  6.    Exception
  7.     + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SelectStringCommand
复制代码

TOP

返回列表