标题: [文本处理] 批处理怎样检测文本内容是否有指定关键词? [打印本页]
作者: kxhcn 时间: 2011-9-20 19:15 标题: 批处理怎样检测文本内容是否有指定关键词?
a.txt里面文本格式如下
k001 158 159 今天1 10 1 60
k001 158 159 昨天 10 1 60
GA0 67 75 星期2 200 20 30
GA0 67 75 烈士 200 20 30
n114 67 75 烈士1 50 5 10
n114 67 75 蜘蛛人 50 5 20
L001 151 75 恶魔 100 1 60
L001 125 39 奴隶 100 15 20
b.txt里面文本格式如下
天下
昨天
火龙
烈士
埃及
要求检测a.txt里面是否含有b.txt里面每行的内容
含有就删除b.txt里面的所在行
作者: hankerer 时间: 2011-9-20 20:01
- @echo off
- SETLOCAL enabledelayedexpansion
- (
- for /f "delims=" %%i in (a.txt) do (
- set a=0
- for /f "delims=" %%j in (b.txt) do (
- set p=%%i
- set q=!p:%%j=!
- if not !p! == !q! set a=1
- )
- if !a! == 0 echo %%i
- )
- )>c.txt
- pause
复制代码
作者: hankerer 时间: 2011-9-20 20:03
- @echo off
- SETLOCAL enabledelayedexpansion
- (
- for /f "delims=" %%i in (b.txt) do (
- set a=0
- for /f "delims=" %%j in (a.txt) do (
- set p=%%j
- set q=!p:%%i=!
- if not !p! == !q! set a=1
- )
- if !a! == 0 echo %%i
- )
- )>c.txt
- pause
复制代码
上面是删A。txt
这个是删b.txt里面的内容。道理是一样的
作者: cjiabing 时间: 2011-9-20 20:06
findstr /v /g:a.txt b.txt>>c.txt
作者: kxhcn 时间: 2011-9-20 20:29
本帖最后由 kxhcn 于 2011-9-20 20:30 编辑
2楼 3楼的代码有问题 死循环了
c.txt文本的大小在不停的增加
作者: hankerer 时间: 2011-9-20 20:32
本帖最后由 hankerer 于 2011-9-20 20:35 编辑
2楼 3楼的代码有问题 死循环了
c.txt文本的大小在不停的增加
kxhcn 发表于 2011-9-20 20:29
我的电脑上运行的好好的
我发的都是我自己在自己的电脑上试过了
为啥我的电脑上没有问题。发上来的代码老是说有问题?
难道是我用WIN7的原因?
作者: kxhcn 时间: 2011-9-20 20:33
4楼的代码实现不了啊
作者: kxhcn 时间: 2011-9-20 20:38
我用3楼的代码实现了
谢谢啊
作者: weichenxiehou 时间: 2011-9-20 21:24
回复 3# hankerer
作者从效率的角度考虑,很不错,没用findstr,值得鼓励!
作者: cjiabing 时间: 2011-9-20 22:09
回复 7# kxhcn
要求检测a.txt里面是否含有b.txt里面每行的内容——findstr /i /g:b.txt a.txt>>c.txt
含有就删除b.txt里面的所在行——findstr /i /v /g:a.txt b.txt>>c.txt
findstr命令的参数:
/I 指定搜索不分大小写。
/V 只打印不包含匹配的行。
/G:file 从指定的文件获得搜索字符串。 (/ 代表控制台)。
修改了下,具体没试过,自己修改。
作者: cjiabing 时间: 2011-9-20 22:11
回复 9# weichenxiehou
按照流行的说法,但文件足够大时,用FOR不如用Findstr。特别是嵌套FOR会严重导致效率下降。不信你找一个几M的文本来试试。
作者: weichenxiehou 时间: 2011-9-20 22:40
回复 11# cjiabing
几M的文件没试过,不过前段时间写一个批的时候,用for嵌套写出来的代码在执行效率方面与用findstr比较起来优势明显,呵呵,这个就看个人喜好了,仁者见仁智者见智了。
作者: guaiwu 时间: 2011-9-21 17:19
- @echo off
- setlocal enabledelayedexpansion
- for /f %%i in (b.txt) do set /a b+=1&set b!b!=%%i
- for /f %%j in (a.txt) do set /a a+=1&set a!a!=%%j
- for /l %%i in (1 1 %b%) do (
- for /l %%j in (1 1 %a%) do (
- if !b%%i! neq !a%%j! set c=!b%%i!
- )
- echo !c!>>c.txt
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |