Board logo

标题: 多条件提取数据II [打印本页]

作者: hgx126     时间: 2009-2-5 12:27    标题: 多条件提取数据II

不好意思,我又要麻烦大家了。由于是新手上路,求助的时候比较多,请大家多见谅!

上次大家帮助我解决了同时多满足多个条件提取数据的问题,这次请大家再次帮偶一个忙:

同样是一目录下有多个文本,其中一个内容如下:
5422|542202|12310001|18500|2008-3-12|2009-3-11|安晨城
5422|0|12510101|24000|2007-3-19|2009-3-10|安永仙
5422|542202|12550101|22600|2008-1-23|2009-1-22|白通
5422|542206|12540210|39320|2008-4-10|2011-4-9|白晓筠
5422|542202|12510201|40000|2008-12-30|2010-12-29|保琴
5422|542206|12410001|30000|2008-4-29|2010-4-28|蔡必兵
5422|542202|12540210|48400|2008-2-1|2011-1-31|蔡彪
5422|542501|12540210|38500|2008-5-12|2011-5-11|蔡兵
5422|542202|12710101|30000|2008-10-21|2009-10-20|蔡光芬
5422|542204|12310001|29000|2008-12-25|2009-12-24|蔡光忠
5422|542204|12310001|29000|2008-12-25|2009-12-24|蔡娟
5422|542501|12510201|100000|2008-4-23|2010-4-22|蔡先刚
5422|542202|12510201|250000|2008-3-31|2010-3-30|蔡先涛
5422|0|12610001|0|2008-2-26|2008-2-25|曹斌
5422|0|12760001|20000|2008-5-26|2008-2-25|曹斌
5422|542202|12540210|74600|2008-1-9|2010-1-8|陈斌
现要将满足以下其中任意一个条件的该行数据提取到b.txt。(以|为分隔符)
1、第三列数据的前四位为“1231”;
2、第三列数据的前四位为“1241”;
3、第三列数据的前四位为“1254”;

求一批处理,批量将该目录下的所有文本里满足条件的数据提取出来。求
大家帮忙。
作者: yishanju     时间: 2009-2-5 12:54
无非就是那几个命令的改改就能用,经常用到为什么不自己学一学
type *.txt|findstr /r /c:".*[|].*[|]1231.*[|].*[|].*[|].*[|].*" /c:".*[|].*[|]1241.*[|].*[|].*[|].*[|].*" /c:".*[|].*[|]1254.*[|].*[|].*[|].*[|].*" >>b.txt
pause
作者: moniuming     时间: 2009-2-5 12:59

@echo off
Setlocal Enabledelayedexpansion
for /f "tokens=1,2,3* delims=|" %%a in ('type *.txt') do (
  set "str=%%c"
  set "var=!str:~,4!"
  if "!var!"=="1231" (
    echo %%a^|%%b^|%%c^|%%d
  ) else (
    if "!var!"=="1241" (
      echo %%a^|%%b^|%%c^|%%d
    ) else (
      if "!var!"=="1254" (echo %%a^|%%b^|%%c^|%%d)
    )
  )
)>>b.txt
start "" b.txt
[ Last edited by moniuming on 2009-2-5 at 13:00 ]
作者: hgx126     时间: 2009-2-6 00:57
感谢moniuming及yishanju兄。

不过我想的是一个文本提取后的数据生成另外一个文件名,而不是将该目录下的的所有文件合并生成一个文件。
最好是在原文件名上加一个前缀。
比如a.txt生成一个新的a.csv或a_new.txt文件。我用了>>%%~n0%.csv或等没成功,是哪里错了?

[ Last edited by hgx126 on 2009-2-6 at 22:27 ]
作者: yishanju     时间: 2009-2-6 11:18
for /r %%i in (*.txt) do (
        findstr /r /c:".*[|].*[|]1231.*[|].*[|].*[|].*[|].*" /c:".*[|].*[|]1241.*[|].*[|].*[|].*[|].*" /c:".*[|].*[|]1254.*[|].*[|].*[|].*[|].*" %%i >>%%~ni.cvs
)
作者: yishanju     时间: 2009-2-6 11:28
for /r %%i in (*.txt) do (
        findstr /r /c:".*|.*|1231.*|.*|.*|.*|.*" /c:".*|.*|1241.*|.*|.*|.*|.*" /c:".*|.*|1254.*|.*|.*|.*|.*" %%i >>%%~ni.cvs
)

把命令简化成这样试试看行不行,

[ Last edited by yishanju on 2009-2-6 at 11:29 ]
作者: moniuming     时间: 2009-2-7 00:02
加一个for应该可以了吧,试试?
@echo off
Setlocal Enabledelayedexpansion
for %%i in (*.txt) do (
  for /f "tokens=1,2,3* delims=|" %%a in ('type "%%i"') do (
    set "str=%%c"
    set "var=!str:~,4!"
    if "!var!"=="1231" (
      >>"%%~ni_new.txt" echo %%a^|%%b^|%%c^|%%d
    ) else (
      if "!var!"=="1241" (
        >>"%%~ni_new.txt" echo %%a^|%%b^|%%c^|%%d
      ) else (
        if "!var!"=="1254" (
          >>"%%~ni_new.txt" echo %%a^|%%b^|%%c^|%%d
        )
      )
    )
  )
)

作者: hgx126     时间: 2009-2-9 21:16
谢谢