У меня есть окончательная полезная нагрузка в формате csv с некоторым количеством записей о сотрудниках. У меня есть 2 основных значения для работы:
-Последовательное поле (добавляется для каждой записи) -personal_id (уникально для каждого сотрудника)
Из-за того факта, что каждый сотрудник может иметь несколько записей, необходимо иметь соответствующий порядковый номер для каждого идентификатора. Другими словами, если у сотрудника с идентификатором «123» 5 записей, значение последовательности должно быть 1,2,3,4,5 вместо 1,1,1,1,1. Все записи сгруппированы по идентификатору. Также полезная нагрузка ниже показывает только 2 поля, необходимые для описания, обычно она имеет гораздо больше полей и является примером stati c полезной нагрузки. Обычно это будет динамически.
вот входная полезная нагрузка:
Sequence;ID
123456
232323
232323
232323
111111
111111
222222
222222
222222
222222
222222
222222
222222
и здесь ожидается полезная нагрузка
Sequence;ID
1;123456
1;232323
2;232323
3;232323
1;111111
2;111111
1;222222
2;222222
3;222222
4;222222
5;222222
6;222222
7;222222
Вот фактическая полезная нагрузка после использования сценария groovy:
1;Sequence;ID
1;123456
1;232323
2;232323
3;232323
1;111111
2;111111
1;222222
2;222222
3;222222
4;222222
5;222222
6;222222
7;222222
Я использую следующий скрипт groovy, но проблема в том, что первая строка полезной нагрузки также пронумерована 1. Можете ли вы показать мне, как пропустить первую строку полезной нагрузки? Скрипт добавляет число в каждую запись, чтобы его подсчитать. Подсказка состоит в том, чтобы все записи с одинаковым идентификатором отсчитывались от 1 постепенно. Сценарий делает это отлично, но проблема в том, как я уже сказал, хотя я хочу пропустить первую строку полезной нагрузки "Sequence; ...", чтобы она не учитывалась.
import com.sap.gateway.ip.core.customdev.util.Message
def Message processData(Message message) {
def payload = message.getBody(java.lang.String)
def prevId = ''
def sequence = 1
def sb = new StringBuilder()
def line = new StringReader()
payload.eachLine { line ->
def values = line.split(';')
if (values[1] != prevId) {
// New personal ID
sequence = 1
prevId = values[1]
} else {
// Another line of the same personal ID
sequence += 1
}
line = readLine()
values[0] = sequence
sb.append(values.join(';')).append(System.lineSeparator())
}
message.setBody(sb.toString())
return message
}