Board logo

标题: [已结]如何从一文本中用两个关键字进行搜索 [打印本页]

作者: provem     时间: 2009-2-13 10:31    标题: [已结]如何从一文本中用两个关键字进行搜索
文本内容(chatlog.db):

李五对王三说:我们明天大起大落地
李五对所有人说:大家好
王三对所有人说:那个谁来了
王三对李五说:昨天到哪去了


想得到地结果是:

李五对王三说:我们明天大起大落地
李五对所有人说:大家好
王三对所有人说:那个谁来了

下面是自己写的代码,不过当李五对所有人说,就会提取两次(重复了)
下面代码输出结果是

李五对王三说:我们明天大起大落地
李五对所有人说:大家好
李五对所有人说:大家好
王三对所有人说:那个谁来了

for /f "delims=" %%a in (chatlog.db) do (
set str=%%a
echo !str:~0,23!|findstr "%李五%">nul
if !errorlevel! equ 0 (
>>%tmp%\chatlog.tmp echo.%%a
)
echo !str:~0,23!|findstr "所有人">nul
if !errorlevel! equ 0 (
>>%tmp%\chatlog.tmp echo.%%a
)
)


代码应该怎么改

Last edited by provem on 2009-2-13 at 12:46 ]

作者: HAT     时间: 2009-2-13 11:41
一行里面使用两个管道,第一个管道把“所有人过滤掉”,第二个管道再搜索“李五”。

作者: provem     时间: 2009-2-13 12:11
版主说的是像这样吗?好像还是不对

for /f "delims=" %%a in (chatlog.db) do (
set str=%%a
echo !str:~0,23!|findstr "所有人" |findstr "%李五%">nul
if !errorlevel! equ 0 (
>>%tmp%\chatlog.tmp echo.%%a
)
)

作者: yishanju     时间: 2009-2-13 12:19
看findtr 帮助

作者: provem     时间: 2009-2-13 12:19

for /f "delims=" %%a in (chatlog.db) do (
set str=%%a
echo !str:~0,23!|findstr "所有人">nul|echo !str:~0,23!|findstr 李五">nul
if !errorlevel! equ 0 (
>>%tmp%\chatlog.tmp echo.%%a
)
)


现在只有 王三对所有人说:那个谁来了
没有提出来

Last edited by provem on 2009-2-13 at 12:22 ]

作者: provem     时间: 2009-2-13 12:45
问题解决了,以下代码可以达到我想要的效果,谢谢各位


for /f "delims=" %%a in (chatlog.db) do (
set str=%%a
echo !str:~0,23!|findstr /i "李五 所有人">nul
if !errorlevel! equ 0 (
>>%tmp%\chatlog.tmp echo.%%a
)
)