Как добиться объединения записей из плоского файла? - PullRequest
0 голосов
/ 16 мая 2019

У меня есть два кода в текстовом файле (001 и 002), если строка начинается с кода 002, к сумме строки следует добавить следующую сумму строки кода 001.Последовательность должна повторяться для каждой строки кода 001.означает, что каждое количество строк кода 001 должно быть суммой с предыдущим количеством строк 002 (т. е. ч / б каждая строка кода 001 должно объединять сумму со следующим количеством строк 001)

Фактические строки из входного файла

001 | 0.00

002 | 10.5

002 | 5.0

001 | 0.00

002 | 15.0

001 | 5

002 | 7

001 | 2

Ожидаемые выходные строки из входного файла

001 | 0.00

002 | 10.5

002 | 5.0

001 | 15.5 ( adding amount with 2nd, 3rd-row amount)

002 | 15.0

001 | 20.0 (adding amount with previous 002 code amount)

002 | 7.0

001 | 9.0  (adding amount with previous 002 code amount)

1 Ответ

0 голосов
/ 16 мая 2019

Компонент скрипта (преобразование): Отметить Col1 как только для чтения Отметить Col2 как Чтение / Запись

Хитрость в том, что вам нужно хранить информацию вне обработки строк, поэтому вам нужно объявлять переменные вне обработки строк.

Вне обработки строк

//these are established on the first pass and used on every row moving forward.
decimal first002;
decimal last002;
int ctr=0;

обработка строк внутри:

if(Row.Col1=="001")
{
    //Do something with COl2 based on ctr
    switch(ctr)
    { 
        case 0:
             break; //don't do anything
        case 1:
             Row.Col2 = first002;
             break;
        case 2:
             Row.Col2 = first002+last002;
             break;
        default:
             Row.Col2 += last002;
             break;
    }
}
else
{
   //this is a 002 and need to update variables.
   ctr++
   if(ctr==1)
   {first002 = Row.Col2;}
   else
   {last002 = Row.Col2;}
}
...