将不同行的子串合并为一个循环的单行

我有一个带有一些数据的.txt文件,其中“BARREL-5,BODY-3”等是被测量的,“V”是测量值的小数点,date(没有确切的时间)正被用于识别测量属于哪个样本

4491 316 SS,BARREL-5,V,1.393,5/7/2015 7:47:05 AM,0,,,,13,... 4491 316 SS,BARREL-5,V,1.3865,2/17/2016 11:26:12 AM,0,,,,13,... 4491 316 SS,BODY-3,V,1.256,5/6/2015 6:45:42 PM,0,,,,13,... 4491 316 SS,BODY-3,V,1.2565,5/7/2015 7:46:16 AM,0,,,,13,... 4491 316 SS,BODY-3,V,1.246,2/17/2016 11:24:18 AM,0,,,,13,... 

只有每次我们对一批零件进行样品测量时,才会从.txt格式的(真正过时的)程序导出此数据。 数据需要在Excel中查看,以便快速确定批量零件是否在公差范围内。 更改扩展名并使用它的问题是,全部数据如下所示:

 4491 316 SS,BARREL-5,V,1.393,5/7/2015 7:47:05 AM,0,,,,13,Blow Pattern=1-1-1,Die Set=FN3,Forge=Erie,Heat #=E150058,Job #=I2928,Lube Type=Hydraforge,Operator=Paul & ,Revision=C,Run Temperature=2250,Shift=2nd,Shim bottom Die=X,Shim Top Die=X,Shim Trimmer=X,C 

在excel中,这个问题真的很混乱,有时候列的数量可能会有所不同+1(如果0代替1,它会在0,,,,之后添加一列)。

我希望的输出格式是txt格式,如下所示:

 Project Number: 4491,,,, Material: 316 SS ,5/7/2015,2/17/2016,5/6/2015 BARREL-5,1.393,1.3865,NA BODY-3,1.256,1.2565,1.246 

现在,我循环遍历所有行,提取所有date,删除任何重复项(向下到每个唯一date的列表),然后将它们转换为csv文件中的string,如,date1,date2,date3,etc

然后我再次循环访问数据文件,并将variables名称放在新行上,首先检查是否重复,如果是,则不回显variables名称。 我正在使用以下for循环来执行此操作(filePath是文件path和项目编号的组合,并根据需要添加文件扩展名或名称添加项):

  for /f "tokens=1 delims=," %%a IN (%filePath%.txt) DO ( set varname=%%a% find "!varname!" %filePath%Excel.csv if !errorlevel!==1 (echo !varname! >> %filePath%Excel.csv) ) 

我目前的输出基本上是这样的:

 Project Number: 4491,,,, Material: 316 SS ,5/7/2015,2/17/2016,5/6/2015 BARREL-5, BODY-3, 

正如你所看到的,我需要把实际的测量值放在适当的位置。 有没有简单的方法来批量做到这一点? 任何人都可以在任何计算机上轻松运行该代码(Win 7和XP)。 数据文件不可能很快改变,所以程序不需要非常强大。 我也受限于我尝试使用Powershell,但发现我不允许在任何计算机上运行任何脚本。

我不愿意深入研究的方法是沿着创build每一行的行号列表的方式,这些列号切换到一个新的度量名称,然后在文件中运行另一个循环,并在同一行上打印所有的值,打破他们基于行数。 然后将variables行连接到csv文件中的适当行。

谢谢你的帮助。 我编辑了这个包含更多相关的例子和细节。

你的描述很混乱,你没有显示什么是所需的输出,所以没有办法尝试写一个解决你的问题…但是,你的部分要求可以通过一个非常简单的方式batch file获得:

 @echo off setlocal EnableDelayedExpansion set "dates=" for /F "tokens=1-3 delims=," %%a in (test.txt) do ( rem Get a list of unique dates: set "dates=!dates:%%c,=!%%c," rem Take the values of the variables set "var[%%a]=!var[%%a]!,%%b" ) rem Show the results echo Dates: %dates:~1,-1% echo/ echo Variables: for /F "tokens=2* delims=[]=" %%a in ('set var[') do echo %%a%%b 

使用这个数据作为input文件:

 varname1,valueA,date1 varname1,valueB,date2 varname1,valueC,date3 varname2,valueD,date1 varname2,valueE,date2 varname2,valueF,date3 

这是输出:

 Dates: date1,date2,date3 Variables: varname1,valueA,valueB,valueC varname2,valueD,valueE,valueF 

编辑 :代码修改,以履行新的规范

 @echo off setlocal EnableDelayedExpansion set "max=0" set "dates=," for /F "tokens=1-4,6,7 delims=, " %%a in (test.txt) do ( rem Get header data set "project=%%a" & set "material=%%b %%c" rem Get a list of unique dates if "!dates:%%f=!" equ "!dates!" set "dates=!dates!%%f," rem Take the values of the variables set "var[%%d]=!var[%%d]!,%%e" rem Get data for variable equalization set "data=%%d" for /F %%D in ("!data:-=_!") do ( set /A "len[%%D]+=1" if !len[%%D]! gtr !max! set "max=!len[%%D]!" ) ) rem Equalize variables set /A max-=1 for /F "tokens=2,3 delims=[]=" %%i in ('set len[') do ( set "data=%%i" for /F %%D in ("!data:_=-!") do for /L %%I in (%%j,1,%max%) do ( set "var[%%D]=!var[%%D]!,NA" ) ) rem Show the results ( echo Project Number: %project%,,,, Material: %material% echo %dates:~0,-1% for /F "tokens=2* delims=[]=" %%a in ('set var[') do echo %%a%%b ) > output.txt 

这个程序生成的输出与问题中指定的完全一样

通过2个命令行解决你的问题的简单方法,请参见底部的截图。

 :: Extract all dates and get unqiue msr -p your-source.txt -t "^.*?,(\d+/\d+/\d+)\s+(\d+:\d+:\d+).*" -o "$1" -PAC | nin nul -uPAC | msr -S -t "(\S+)\s+" -o ",$1" -PAC >> result.csv :: Extract column2 like "BARREL-5" -> Auto classify -> Extract values like "1.393" -> Add "NA" if lack columns for /f "tokens=*" %%a in ('nin source.txt nul "^[^,]+,([^,]+)" -u -PAC') do @msr -p source.txt -t ".*?,%%a,V,(\d+\.\d+),.*" -o "$1" -PAC | msr -S -t "\s+(\S+)" -o ",$1" -PAC | msr -t "^\d+\.?\d*,\d+\.?\d*$" -o "$0,NA" -aPAC| msr -t ".+" -o "%%a,$0" -PAC >> result.csv 

但是我不知道你怎么一线出来: Project Number: 4491,,,, Material: 316 SS

以上使用了2个常用的单一exe工具(无依赖): msr.exeM atch / Sarch / R eplace)+ nin.exeN ot- In -latter:获得差异/交集)在我的打开项目中https:/ /github.com/qualiu/msr tools目录。

如果您在32位Windows上,请使用msr-Win32.exenin-Win32.exe

提取 - >分类 - >检查 - 添加 - 列