Board logo

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

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

文本内容(chatlog.db):

李五对王三说[02-12 18:30]:我们明天大起大落地
李五对所有人说[02-12 18:30]:大家好
王三对所有人说[02-12 18:31]:那个谁来了
王三对李五说[02-12 18:31]:昨天到哪去了


想得到地结果是:

李五对王三说[02-12 18:30]:我们明天大起大落地
李五对所有人说[02-12 18:30]:大家好
王三对所有人说[02-12 18:31]:那个谁来了

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

李五对王三说[02-12 18:30]:我们明天大起大落地
李五对所有人说[02-12 18:30]:大家好
李五对所有人说[02-12 18:30]:大家好
王三对所有人说[02-12 18:31]:那个谁来了
CODE:  [Copy to clipboard]
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
版主说的是像这样吗?好像还是不对
CODE:  [Copy to clipboard]
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
CODE:  [Copy to clipboard]
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
  )
  )
现在只有  王三对所有人说[02-12 18:31]:那个谁来了
没有提出来

[ Last edited by provem on 2009-2-13 at 12:22 ]
作者: provem     时间: 2009-2-13 12:45
问题解决了,以下代码可以达到我想要的效果,谢谢各位
CODE:  [Copy to clipboard]
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
  )
  )





欢迎光临 中国DOS联盟论坛 (http://cndos.fam.cx/forum/) Powered by Discuz! 2.5