2012-02-03 15 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 
... 

を。各グループについて、累積結果は重症度が最も高い結果です(Red最も重度、Amber重症度が低い、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%