[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理如何从文本文件中提取6位数字

有文本文件a.txt,内容为:

601600中铝业600595中孚实业000807云铝股份600362江西铜业000878云南铜业000630铜陵有色601168西部矿业
600019宝钢份000898股份600808马钢  股份600005武钢股份000825太不锈000932华菱钢铁000709唐份600010包钢股份

运行批处理后得到结果后储存以b.txt中,结果为:

601600
600595
000807
600362
000878
000630
601168
600019
000898
600808
600005
000825
000932
000709
600010

[ 本帖最后由 RuiIsRui 于 2009-7-13 23:35 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2
天行健  君子以自强不息

  同一行中没有任何分隔符吗?
  数据格式决定了代码的编写,请在顶楼上传原始数据的部分内容,以便分析。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

同一行中没有任何分隔符,且无规律,只能考批处理识别数字来完成,但不知道批处理如何识别数字。
天行健  君子以自强不息

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (0 1 9) do set #%%a=a
  3. for /f "delims=" %%i in (a.txt) do (
  4.    set "str=%%i"
  5.    set "str=!str:,=!"
  6.    set "str=!str:;=!"
  7.    set "str=!str: =!"
  8.    set n=0&set "var="
  9.    for /l %%a in (0 1 9) do set str=!str:%%a= %%a !
  10.    for %%a in (!str!) do (
  11.       if defined #%%a (set var=!var!%%a&set /a n+=1) else set var=&set n=0
  12.       if !n! equ 6 echo !var!&set var=&set n=0
  13. ))
  14. pause
复制代码
技术问题请到论坛发帖求助!

TOP

哇~
不愧为超版啊!

谢谢~谢谢~谢谢~谢谢~谢谢~谢谢!

太谢谢你拉~

我搞了一天了!要大量获取、分类很多股票代码手动根本不可能,今天可以睡个安稳觉了!

我太高兴拉~
天行健  君子以自强不息

TOP

这个帖子的方法
http://www.cn-dos.net/forum/viewthread.php?tid=47506#pid333351
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "tokens=*" %%a in (a.txt) do (
  3.   set str=#%%a
  4.   set str=!str:"=!
  5.   set var=!str!
  6.   for /l %%a in (0 1 9) do set var=!var:%%a=" "!
  7.   for %%a in ("!var:""=!") do (
  8.     set str=1!str:*%%~a=!
  9.     set /a n=str
  10.     if !n! geq 1000000 if !n! lss 10000000 echo !n:~1!
  11.   )
  12. )
  13. pause
复制代码
1

评分人数

TOP

用三方工具sed.exe
  1. @echo off
  2. for /f "delims=" %%a in ('sed "s/[^0-9]/,/g" a.txt') do (
  3. for %%b in (,%%a,) do echo %%b>>b.txt
  4. )
  5. start b.txt
复制代码


或:

sed -e "s/[^0-9]\{1,\}/\n/g" a.txt | sed "/^$/d">b.txt

[ 本帖最后由 inittab 于 2009-7-12 22:45 编辑 ]
1

评分人数

TOP

尼古拉斯凯奇大哥能不能解释下代码啊?
Still with wax

TOP

回复 8楼 的帖子

大概解释,有问题再问:
  1. @echo off&setlocal enabledelayedexpansion  
  2. for /l %%a in (0 1 9) do set #%%a=a    //定义变量#0--#9
  3. for /f "delims=" %%i in (a.txt) do (
  4.    set "str=%%i"
  5.    set "str=!str:,=!"                                //去掉每一句中的,号
  6.    set "str=!str:;=!"                               //去掉每一句中的;号
  7.    set "str=!str: =!"                               //去掉每一句中的空格
  8.    set n=0&set "var="
  9.    for /l %%a in (0 1 9) do set str=!str:%%a= %%a !        //给文本中的每一个数字两旁加上空格
  10.    for %%a in (!str!) do (
  11.       if defined #%%a (set var=!var!%%a&set /a n+=1) else set var=&set n=0       //查看是否定义过#%%a,也就是看是否是数字,是数字就赋值给var;
  12.       if !n! equ 6 echo !var!&set var=&set n=0                //当n为6时,显示var中的值。
  13. ))
  14. pause
复制代码
(*^_^*)

TOP

好强大 看来还是得多学习学习
o(∩_∩)o...~~~
空间:http://hi.baidu.com/fair_jm
喜欢批处理的没事的话去逛逛哦~~

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3.    set "str=%%i"
  4.    set "str=!str:股份= !" &rem 所有“股份”变格
  5.    set "sts=!str!" &rem 复制一份数据
  6.    for /l %%a in (0 1 9) do set "str=!str:%%a= !"&rem 其中一份所有数据变空格
  7.    for %%a in (!str!) do set "sts=!sts:%%a= !" &rem 另外一份数据外的窜变空格
  8.    for %%a in (!sts!) do (
  9. set var=%%a
  10. set "var=!var:~,5!!var:~-1,1!" &rem 则另外一份数据得到的就全为数据了
  11. if "!var!" equ "%%a" echo !var! &rem 只有为6位数的才提取
  12. ))
  13. pause
复制代码

TOP

回复 9楼 的帖子

多谢巡查解释啦,怪自己太懒,经过你标示下再看其实就很简单了,不过随风兄代码里最后一个if句中的set var=&set n=0有些多余吧,前面的if defined里面不是有了么。还有啊,set n=0是定义数字,为什么不用格式 sep /a呢?这样不会出错的么?
Still with wax

TOP

回复 12楼 的帖子

1、要判断它是否多余,很简单,把它删掉,看看代码还能正常工作么?
2、set命令的帮助里面没有提到定义数字必要使用/a开关吧?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 13楼 的帖子

亲爱的管理员batcher兄,我又对了,确实是不写那个句命令也可以,但是我不敢说是多余的,也许处于代码严谨性的考虑,是吧?呵呵,两次都是你让我自己删除去测试,你就不能直接告诉我啥,省的麻烦了,再说,你们技术那么好,有你们亲口肯定的话,比我自己去测试得出的结果更让人心定。
Still with wax

TOP

有句话:
“授人鱼,不如授人以渔”
自己做过,学会方法才是最重要的,不是吗?

TOP

返回列表