Board logo

标题: [文本处理] 批处理获取文本特定行中的数值并根据后续行内容长度判定该数值是否加1 [打印本页]

作者: keathaly    时间: 2016-7-10 16:46     标题: 批处理获取文本特定行中的数值并根据后续行内容长度判定该数值是否加1

本帖最后由 pcl_test 于 2016-7-11 21:06 编辑

有多个文本,比如内容如下:
文本1:                                                                                       文本2:                                                                                             文本3:                                                       文本......
pallet                                                                                         pallet                                                                                                pallet
:fra                                                                                           :fra                                                                                                    :fra
keys=0                                                                                      keys=100                                                                                          keys=386
mura:position                                                                             ,ns,dnfkwehrjnweoiru                                                                         l
[url:]sdffjhgjghjyuiyuiyukjhkjhkjhkbnmhjgjfg                                ty                                                                                                      767
pat                                                                                            sdhfksjhfksjhkljg.,m.,mdfg;lkiopdfg./,m.kfgpoieprt,mfdg                       vcnm,ygyuytu.,.yu;rerteropt
sfdsfghjhghjgyhkjk                                                                     po                                                                                                     iuworieuo98798734kn..f.sdf
fghgjhgjhkhkjllkjbnfghesrtttytr                                                    /.m,vujiorkjoiwerhnkdjsfnkjshnfk                                                         .,.,pomsldjfiowuer0849///dfrt/y,/.,sdfsewr
go                                                                                            weuriouwklsjdfoisdfhkjsfhsdksdf                                                          08934lkjlskdufweklrnmlke..,sfisdijf
sdfsdf5yrtuytt4354sdfxvcxcvcvnvbnbvmnbmn,n,nm,bnvbdfdf        mpsdf                                                                                               sdlkjflskj4435345/45l34l;5

现在要获取每个文本第3行的“keys=”之后的数值N,比如文本1的值是0,文本2是100,文本3是386......
获取每个文本第3行的“keys=”后的数值N之后,然后从第4行开始对后续每行文本的长度进行判定,凡是单行长度>5(假设为5)的就在先前获取的“keys=”数值N上+1,最后将相应的文件名和对应最终的N值输出到EXCEL表中
比如文本1“keys=”之后的数值N=0,后续有第4,5,7,8,10共5行的内容长度>5,故最终N值为0+5=5
文本2 N值=100,有第4,6,8,9共4行长度>5,最终N值为100+4=104
求各位热心高手帮忙!!!
作者: pcl_test    时间: 2016-7-10 17:37

  1. //&cls&dir /a-d/b *.txt|cscript -nologo -e:jscript "%~f0"&pause&exit
  2. var fso = new ActiveXObject('Scripting.Filesystemobject'), s='';
  3. function CoutN(file){
  4.     var f = fso.OpenTextFile(file, 1);
  5.     try{
  6.         var txt = f.ReadAll().split(/\r\n/)
  7.         if(/^\s*?keys=(\d+)\s*$/.test(txt[2])){
  8.             var n=RegExp.$1;
  9.             for(var i=3; i<txt.length; i++){
  10.                 if(txt[i].length > 5)n++;
  11.             }
  12.             s+=fso.GetFile(file).Name+','+n+'\r\n';
  13.         }
  14.     }catch(e){}
  15.     f.Close();
  16. }
  17. while(!WSH.StdIn.AtEndOfStream)CoutN(WSH.StdIn.ReadLine());
  18. WSH.echo(s);
复制代码

作者: pcl_test    时间: 2016-7-10 18:05

本帖最后由 pcl_test 于 2016-7-11 21:15 编辑
  1. @echo off&
  2. for /f "delims=" %%a in ('dir /a-d/b *.txt') do (
  3.     setlocal enabledelayedexpansion
  4.     for /f "delims=" %%b in ('type "%%a"') do (
  5.         set /a n+=1
  6.         set "str=%%b"
  7.         if !n! equ 3 (
  8.             if "!str!" neq "!str:*keys=!" set %%b
  9.         ) else if !n! geq 4 (
  10.             if defined keys if "!str:~5!" neq "" set /a keys+=1
  11.         )
  12.     )
  13.     if defined keys echo;%%~nxa,!keys!
  14.     endlocal
  15. )
  16. pause
复制代码

作者: keathaly    时间: 2016-7-10 19:11

回复 3# pcl_test
咋看不到输出的结果啊?
作者: pcl_test    时间: 2016-7-10 19:40

回复 4# keathaly

什么意思,cmd窗口没显示结果?还是说结果没有导出到表格文件?
作者: keathaly    时间: 2016-7-10 20:17

回复 5# pcl_test
没见到表格,呵呵... ...
作者: pcl_test    时间: 2016-7-10 20:40

回复 6# keathaly

把你测试txt文本打包发附件或网盘传上来
作者: keathaly    时间: 2016-7-10 20:54

回复 7# pcl_test
经你一说传文件的事,我突然想起来了,因为帖子是我手动一个字一个字的敲的,和我测试的文本字母有点差别,不好意思,你帮忙写的代码没有问题,我自己疏忽了,感谢!!!
作者: keathaly    时间: 2016-7-10 21:31

回复 8# keathaly
再向你请教一下,你写的代码的第2行我想改为:for /f "delims=" %%a in ('dir /a-d/b E:\acp\rep\*.txt') do (
目的是想该批处理文件放在任意位置均能执行,但我这样改,文件放在桌面好像就不行了,请指点下
作者: pcl_test    时间: 2016-7-10 21:55

回复 9# keathaly

cd /d "E:\acp\rep\"
作者: keathaly    时间: 2016-7-10 22:14

回复 10# pcl_test
你说的已经试过,可以执行。有没有BAT文件放哪,执行的结果就直接存放在同一个目录下的方案?呵呵...
作者: GNU    时间: 2016-7-11 10:41

回复 11# keathaly


if defined keys echo;%%~nxa,!keys!>>"%~dp0Result.csv"




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