2012-02-03 107 views
2

严重性最高值我有一个CSV文件格式如下:采摘使用批量

Group Test Result 
---------------------- 
GROUP1 Test1 Amber 
GROUP1 Test1 Amber 
GROUP1 Test2 Red 
Group1 Test3 Amber 
Group1 Test4 Green 
Group2 Test1 Amber 
Group2 Test2 Amber 
Group3 Test1 Green 
Group3 Test2 Amber 
... 

使用批处理文件,我想确定上面列出的每个组的累积结果。对于每个组,累积结果是严重程度最高的结果(最严重的为RedAmber较不严重,Green最不严重)。按照这样的逻辑可以预期:

Group1 cumulative result = Red 
Group2 cumulative result = Amber 
Group3 cumulative result = Amber 
... 

文件可以有多个这样的组(而不仅仅是3)

现在我想的批处理文件输出到包含以下格式的文本文件:

Group1,Group2,Group3 
Red,Amber,Amber 

有没有人有关于我如何做这件事的建议?我正在考虑一个for /f循环会涉及。

回答

3
@echo off 
setlocal EnableDelayedExpansion 
set Green=1 
set Amber=2 
set Red=3 
rem Read file lines and process they 
for /F "tokens=1-3" %%a in (thefile.csv) do (
    rem Initialize this "group" vector element with zero 
    if not defined group[%%a] set group[%%a]=0 
    rem Convert "word" severity to a number between 1 and 3 
    set severity=!%%c! 
    rem Store the cumulative result for this group 
    if !severity! gtr !group[%%a]! set group[%%a]=!severity! 
) 
rem Convert cumulative group numeric results to "word" results 
set Severity[1]=Green 
set Severity[2]=Amber 
set Severity[3]=Red 
for /F "tokens=2,3 delims=[]=" %%a in ('set group[') do (
    set group[%%a]=!Severity[%%b]! 
) 
rem Assemble group names in one line and show they: 
set result= 
for /F "tokens=2 delims=[]=" %%a in ('set group[') do (
    set result=!result!%%a, 
) 
echo %result:~0,-1% 
rem Assemble group cumulative results in one line and show they: 
set result= 
for /F "tokens=3 delims=[]=" %%a in ('set group[') do (
    set result=!result!%%a, 
) 
echo %result:~0,-1%