Board logo

标题: [文本处理] [已解决]批处理怎样只保留带有指定字符的行,其余行删除,然后删第二列,感谢! [打印本页]

作者: quartz123    时间: 2014-7-10 15:41     标题: [已解决]批处理怎样只保留带有指定字符的行,其余行删除,然后删第二列,感谢!

  1. @echo off&setlocal ENABLEDELAYEDEXPANSION
  2.     set record=同期_不可用.txt
  3.     (for /f "delims=" %%j in (!record!) do (
  4.             set "str=%%j"
  5.             if "!str:~,1!" EQU "6" (echo SH!str:,=!) else (echo SZ!str:,=!)
  6.     ))>同期.txt
  7.     del /q "同期_不可用.txt"
  8.     pause
复制代码
执行后得出的txt如下(一部份):

SZ000014        2014中报       
SZ000018        2014中报        100.00
SZ000025        2014中报        52.00
SZ000029        2014中报        129.88
SZ000033        2014一季报        -23.17
SZ000033        2014中报        -310.34
SZ000045        2014中报        -174.00
SZ000050        2014中报        230.00
SZ000059        2014中报        -704.90
SZ300323        2014年报       
SZ300324        2014年报       
SZ300327        2014年报        -20.00

这是现用的命令,请老师们帮忙在此命令里加放几句, 使之仅留下带有"2014中报"字符的行,没此字符的行全部删除(删除中间行后,上下行之间不留空行),然后再把第二列全部删除,第一列和第三列之间留一个"tab"的位置,请问要怎么写,非常感谢!!
作者: CrLf    时间: 2014-7-10 16:30

  1. in (!record!) do
复制代码
改成
  1. in ('findstr 2014中报 !record!') do
复制代码

作者: quartz123    时间: 2014-7-10 16:38

本帖最后由 quartz123 于 2014-7-10 16:41 编辑

回复 2# CrLf


非常感谢老师帮助!
请问老师在此基础上如何删除第二列,使第一列和第三列中间只留一个"tab"的位置
还有,如果我要同时保留带有"2014年报"字样的行,是不是这样写呢:in ('findstr 2014中报 and 2014年报 !record!') do
麻烦了!
作者: terse    时间: 2014-7-10 17:44

本帖最后由 terse 于 2014-7-10 17:47 编辑

回复 3# quartz123
  1. @echo off&setlocal enabledelayedexpansion
  2. set record=同期_不可用.txt
  3. for /f "delims=U" %%i in ('cmd /u /c echo 唉') do set "tab=%%i"
  4. (for /f "tokens=1,2*" %%j in ('findstr /i 2014中报 !record!') do (
  5.     set "str=%%j%tab%%%l"
  6.      if "!str:~,1!" EQU "6" (echo SH!str:,=!) else (echo SZ!str:,=!)
  7. ))>同期.txt
  8. del /q "同期_不可用.txt"
  9. pause
复制代码
保留年报
  1. findstr /i "\<2014中报\> \<2014年报\>" !record!
复制代码

作者: quartz123    时间: 2014-7-10 21:11

回复 4# terse


    非常完美,非常感谢老师,没分了,明天来加!!
作者: quartz123    时间: 2014-7-13 19:50

回复  quartz123 保留年报
terse 发表于 2014-7-10 17:44



   
很感谢老师出手,很完美了,可是我发现当生成的最终txt文件中第二列为空的话(就是图中蓝色框框的地方),股票软件就不会识读(真不智能。。。),能否再请老师出手帮后面为空的部份自动填为"0.00",真是麻烦老师了!
作者: terse    时间: 2014-7-13 22:46

回复 6# quartz123
  1. @echo off&setlocal enabledelayedexpansion
  2. set record=同期_不可用.txt
  3. for /f "delims=U" %%i in ('cmd /u /c echo 唉') do set "tab=%%i"
  4. (for /f "tokens=1,2*" %%i in ('findstr /i 2014中报 !record!') do (
  5.      if "%%k" == ""  (set "str=%%i%tab%0.00") else (set str=%%i%tab%%%k)
  6.      if "!str:~,1!" EQU "6" (echo SH!str:,=!) else (echo SZ!str:,=!)
  7. ))>同期.txt
  8. del /q "同期_不可用.txt"        
  9. pause
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2