如何跳过有效载荷的第一行-常规

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何跳过有效载荷的第一行-常规相关的知识,希望对你有一定的参考价值。

我有csv格式的最终​​有效负载,并带有一定数量的员工记录。我有2个主要的价值可以使用:

-序列字段(为每个记录添加)-personal_id(每位员工唯一)

由于每个员工可以有多个记录,因此需要为每个ID具有相应的序号。换句话说,如果ID为“ 123”的员工有5条记录,则序列值应为1,2,3,4,5,而不是1,1,1,1,1。所有记录均按ID分组。另外,下面的有效负载仅显示描述所需的2个字段,通常它具有更多的字段。

这里是输入有效载荷:

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

这是使用常规脚本后的实际有效载荷:

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编号。您能告诉我如何跳过有效载荷的第一行吗?该脚本在每条记录中添加一个数字以对其进行计数。提示是将具有相同id的所有记录从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

}
答案

您可以执行以下操作:

def payload = '''Sequence;ID
1;123456
1;232323
1;232323
1;232323
1;111111
1;111111
1;222222
1;222222
1;222222
1;222222
1;222222
1;222222
1;222222'''

def input = payload.lines().toList()
def output = [input.head()]
input.tail().inject([:].withDefault { 1 }) { lookup, line ->
    def id = line.split(';')[1]
    output << "${lookup[id]++};$id"
    lookup
}

println output.join(System.lineSeparator())

以上是关于如何跳过有效载荷的第一行-常规的主要内容,如果未能解决你的问题,请参考以下文章

DataReader.Read() 跳过记录集的第一行

使用streamreader读取csv时如何跳过第一行

用python如何跳过文件的第一行并且统计剩下部分的某一个字符串的个数

如何从 jwt 策略中获取有效载荷?

从串口写入数据时如何跳过第一行?

如何从sql中跳过一行?