找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25616|回复: 7

[文本处理] [已解决]BAT怎样找到连续使用句号的句子并显示出来?

[复制链接]
发表于 2012-10-30 20:21:16 | 显示全部楼层 |阅读模式
本帖最后由 每天几分 于 2012-10-31 15:36 编辑

比如:
    青云山脉巍峨高耸,虎踞中原,山阴处有大河“洪川”,山阳乃重镇“河阳城”,扼天下咽喉,地理位置十分重要。
    青云山连绵百里。峰峦起伏。最高有七峰。高耸入云。平日里只见白云环绕山腰。不识山顶真容。
青云山山林密布。飞瀑奇岩。珍禽异兽。
在所多有。景色幽险奇峻。天下闻名。

    只是更有名的,却是在这山上的修真门派——青云门。
    青云一脉历史悠久,创派至今已有两千余年,为当今正邪两道之首。据说开派祖师本是一个江湖相师,半生潦倒,郁郁不得志。在其四十九岁那年,云游四方,路经青云山,一眼便看出此山钟灵奇秀,聚天地灵气,是一绝好之地。当下立刻登山,餐风饮露,修真炼道,未几,竟于青云山深处一处密洞内,得到一本无名古卷,上载各般法门妙术,艰深枯涩,却是妙用无穷,威力巨大。
……
==========================
要求:将红色字部分(即未用逗号,连续使用句号)的句子显示到一个新文本中。

谢谢楼下3位!

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2012-10-30 21:14:06 | 显示全部楼层
保存为vbs,试试看吧
  1. Set FSO = CreateObject("Scripting.FileSystemObject")
  2. Set File = FSO.OpenTextFile("a.txt",1)
  3. Do Until File.AtEndOfStream
  4.    Text = File.ReadLine
  5.    A = Split(Text,"。")
  6.    B = Split(Text,",")
  7.    If UBound(A) > 1 And Ubound(B) = 0 Then
  8.       Str = Str & Text & vbCrLf
  9.    End If
  10. Loop
  11. FSO.CreateTextFile("b.txt",True).Write Str
复制代码

评分

参与人数 1技术 +1 收起 理由
每天几分 + 1 谢谢!

查看全部评分

发表于 2012-10-30 22:36:03 | 显示全部楼层
vbs 用正则可能更方便些:
  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. text = fso.OpenTextFile("a.txt",1).ReadAll

  3. With New RegExp
  4.         .Global = True
  5.         .MultiLine = True
  6.         .Pattern = "^[^,]+$"
  7.         Set ar = .Execute(text)
  8. End With

  9. For Each a In ar
  10.         str = str & a & vbCrLf
  11. Next

  12. fso.CreateTextFile("b.txt",True).Write str
复制代码

评分

参与人数 1技术 +1 收起 理由
每天几分 + 1 辛苦了!

查看全部评分

发表于 2012-10-31 03:23:33 | 显示全部楼层
即然L上给了VBS的方法,我就来个P的吧,至于效率么,不适用于大的文件
只是根椐你的描述所写,

  1. @echo off
  2. findstr /v /i "," a.txt|findstr /i ".*。.*。"
  3. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
每天几分 + 1 谢谢!

查看全部评分

发表于 2012-10-31 17:01:44 | 显示全部楼层
回复 4# wc726842270


    findstr 匹配gbk宽字节时有一点小问题,因为它实际上是逐字节匹配的,所以经常可能得出错误的结果,这种情况建议用 find 代替
发表于 2012-11-1 02:10:43 | 显示全部楼层
回复 5# CrLf


    确实是字节,不过还请举例说明
发表于 2012-11-1 03:38:34 | 显示全部楼层
本帖最后由 CrLf 于 2012-11-1 03:40 编辑

回复 6# wc726842270


   http://bbs.bathome.net/viewthread.php?tid=507
   http://bbs.bathome.net/viewthread.php?tid=7629&
findstr 搜索宽字符时,无开关有时会常出现搜不到匹配行的现象(使用多个关键词时尤为明显),而加了开关后容易导致错误匹配,比如:
  1. @echo off
  2. findstr /r "。" %0
  3. :: #
  4. pause
复制代码
这是因为 "。" 的 hex 为 A1 A3,而 " #" 则是 A1 A1 A3 A3,findstr 按 gbk 逐字节匹配的时候发现后者符合前者的条件:A1 [A1 A3] A3,但其实这是错误的...而 find 貌似是以 unicode 逐字符匹配,反正不存在这个毛病

不过刚测试时发现错误匹配貌似是 /r 开关导致的,其他开关似乎没出现这个现象,看来使用 findstr 匹配宽字符时要尽量避免用正则

评分

参与人数 1技术 +1 收起 理由
wc726842270 + 1 不错

查看全部评分

发表于 2012-11-1 06:36:47 | 显示全部楼层
本帖最后由 wc726842270 于 2012-11-1 06:48 编辑

回复 7# CrLf


    学习了,最初学时,不知是何意。不过ZM也真够细心了,写完了之后也用ASCKII试了一下,不过没发现什么异常,看来还是少了
刚看到你的回贴时,想了一下,FINDSTR应该是传回了指针常量,之后逐字节对比,如果在NUL前全部匹配的话,则传回被操作字符串的首指针,
如果是只是查单的话,却实可能,不过随着长度的增加这种机率也下降了,不过不可否认,这却实是个漏动。
看来还是加个"/L”要保险啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 20:19 , Processed in 0.022798 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表