标题: [文本处理] [已解决]批处理求字符串出现精确次数而不是包含该字串的行数 [打印本页]
作者: haier168 时间: 2009-6-7 09:06 标题: [已解决]批处理求字符串出现精确次数而不是包含该字串的行数
我有一个字典的xml 文件,103万行,我想知道里面有多少<ABBR> 的标签,我用find, findstr 都只能得到含有<ABBR>的行数,但如果一行中有多个<ABBR> 时,就无法准确得知具体有多少含有这个字串了。
大家帮帮忙,周末愉快!
[ 本帖最后由 haier168 于 2009-6-9 10:09 编辑 ]
作者: rat 时间: 2009-6-7 11:37
vbs:- MsgBox GetStrCount("<ABBR>", _
- CreateObject("Scripting.FileSystemObject").OpenTextFile("test.xml").ReadAll())
-
-
-
- Function GetStrCount(patrn, strng)
- Dim regEx ' 创建变量。
- Set regEx = New RegExp ' 创建正则表达式。
- regEx.Pattern = patrn ' 设置模式。
- regEx.IgnoreCase = True ' 设置是否区分大小写。
- regEx.Global = True ' 设置全程匹配。
- GetStrCount = regEx.Execute(strng).Count
- End Function
复制代码
作者: haier168 时间: 2009-6-7 11:57
谢谢版主回复,弱弱的问一下,vbs 的代码怎么使用?
作者: inittab 时间: 2009-6-7 12:25
可以的话,帮测一下运行时间
- @echo off&setlocal enabledelayedexpansion
- set n=0
- echo 开始计时:%time%
- for /f "delims=" %%i in (word.xml) do (
- set "str=%%i"&set "str=!str:<ABBR>=" "ABBR" "!"
- for %%a in ("!str!") do if %%a=="ABBR" (set/a n+=1)
- )
- echo 共有^<ABBR^> !n! 个
- echo 结束时间:%time%
- pause
复制代码
[ 本帖最后由 inittab 于 2009-6-7 12:27 编辑 ]
作者: haier168 时间: 2009-6-7 12:45
谢谢各位的帮忙,今天是星期天,由于部门资料管理严格,在家里无法测试效果,只有等上班才能测试,今天在家里上网找资料,发现要学习的实在太多了,欢迎大家继续踊跃发表代码。
不过看楼上两位的代码都是批处理,是否没有第三方工具能用一条命令就出结果的?
作者: Batcher 时间: 2009-6-7 12:55 标题: 回复 5楼 的帖子
- grep -o "<ABBR>" a.txt | find /v "" /c
复制代码
第三方命令行工具 grep.exe 下载地址:
http://bbs.bathome.net/thread-1114-1-1.html
作者: haier168 时间: 2009-6-7 14:45
呵呵,谢谢管理员,我随便找了个文件测试,正是我想要的结果
太强了,命令行有些时候太强了
我要好好学习,向各位帮忙的兄弟致谢!!!
作者: haier168 时间: 2009-6-9 10:15
原帖由 inittab 于 2009-6-7 12:25 发表
可以的话,帮测一下运行时间
@echo off&setlocal enabledelayedexpansion
set n=0
echo 开始计时:%time%
for /f "delims=" %%i in (word.xml) do (
set "str=%%i"&set "str=!str:=" "ABBR" "!"
for %%a in ("! ...
今天上班后用inittab 兄的代码测试, 结果用时3分31秒, 但结果是错的事实上有 48157 个, 而测试的结果是48153个,刚刚用了Batcher 兄的代码, 发现用时不到2秒, 且结果完全正确。效率高而且准确,就是无法给各位评分,因为我在帖子右下角根本找不到任何可以评分的功能。麻烦管理员帮忙解决评分的问题。
[ 本帖最后由 haier168 于 2009-6-9 10:36 编辑 ]
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |