Выбор значения с наибольшей серьезностью с использованием пакета - PullRequest
2 голосов
/ 03 февраля 2012

У меня есть файл 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 цикл будет участвовать.

1 Ответ

3 голосов
/ 03 февраля 2012
@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%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...