Groovy csv到字符串

Groovy csv到字符串,csv,groovy,mapping,boomi,Csv,Groovy,Mapping,Boomi,我正在使用Dell Boomi将数据从一个系统映射到另一个系统。我可以在地图中使用groovy,但没有使用它的经验。我试图用其他Boomi工具来实现这一点,但有人告诉我需要在脚本中使用groovy。我的入站数据是: 132265,布朗 132265,黄金 132265,灰色 132265,绿色 我想输出: 132265,棕色、金色、灰色、绿色 希望这是有意义的!关于groovy代码有什么想法可以让它工作吗?嗯,我不知道您是如何获得数据的,但这里有一个实现目标的一般方法。您可以使用一个库(如下面的

我正在使用Dell Boomi将数据从一个系统映射到另一个系统。我可以在地图中使用groovy,但没有使用它的经验。我试图用其他Boomi工具来实现这一点,但有人告诉我需要在脚本中使用groovy。我的入站数据是:

132265,布朗

132265,黄金

132265,灰色

132265,绿色

我想输出:

132265,棕色、金色、灰色、绿色


希望这是有意义的!关于groovy代码有什么想法可以让它工作吗?

嗯,我不知道您是如何获得数据的,但这里有一个实现目标的一般方法。您可以使用一个库(如下面的库)来解析csv

您的数据示例如下:

@Grab('com.xlson.groovycsv:groovycsv:1.1')
import static com.xlson.groovycsv.CsvParser.parseCsv

def csv = '''
132265,Brown
132265,Gold
132265,Gray
132265,Green
'''

def data = parseCsv(csv)
我相信你想把数字和各种颜色的值联系起来。因此,对于每一行,您可以创建一个编号和与该编号关联的颜色的地图,将该行拆分为:

map = [:]
for(line in data) {
    number = line.split(',')[0]
    colour = line.split(',')[1]

    if(!map[number])
       map[number] = []

    map[number].add(colour)
}
println map
因此,地图应包含:

[132265:["Brown","Gold","Gray","Green"]]

好吧,如果不是你想要的,你可以提取大概的想法。

好吧,我不知道你是如何获得数据的,但这里有一个实现目标的一般方法。您可以使用一个库(如下面的库)来解析csv

您的数据示例如下:

@Grab('com.xlson.groovycsv:groovycsv:1.1')
import static com.xlson.groovycsv.CsvParser.parseCsv

def csv = '''
132265,Brown
132265,Gold
132265,Gray
132265,Green
'''

def data = parseCsv(csv)
我相信你想把数字和各种颜色的值联系起来。因此,对于每一行,您可以创建一个编号和与该编号关联的颜色的地图,将该行拆分为:

map = [:]
for(line in data) {
    number = line.split(',')[0]
    colour = line.split(',')[1]

    if(!map[number])
       map[number] = []

    map[number].add(colour)
}
println map
因此,地图应包含:

[132265:["Brown","Gold","Gray","Green"]]

好吧,如果它不是您想要的,您可以提取总体思路。

假设您的数据是以逗号分隔的数据字符串形式输入的,如下所示:

132265,棕色132265,金色132265,灰色132265,绿色122222,红色122222,白色

下面的Groovy脚本代码应该可以做到这一点

def csvString = "132265,Brown 132265,Gold 132265,Gray 132265,Green 122222,Red 122222,White"

LinkedHashMap.metaClass.multiPut << { key, value ->
    delegate[key] = delegate[key] ?: []; delegate[key] += value
}

def map = [:]
def csv = csvString.split().collect{ entry -> entry.split(",") }
csv.each{ entry -> map.multiPut(entry[0], entry[1]) }

def result = map.collect{ k, v -> k + ',"' + v.join(",") + '"'}.join("\n")
println result
将打印:

132265,棕色、金色、灰色、绿色 122222,红色,白色


假设您的数据是以逗号分隔的数据字符串形式输入的,如下所示:

132265,棕色132265,金色132265,灰色132265,绿色122222,红色122222,白色

下面的Groovy脚本代码应该可以做到这一点

def csvString = "132265,Brown 132265,Gold 132265,Gray 132265,Green 122222,Red 122222,White"

LinkedHashMap.metaClass.multiPut << { key, value ->
    delegate[key] = delegate[key] ?: []; delegate[key] += value
}

def map = [:]
def csv = csvString.split().collect{ entry -> entry.split(",") }
csv.each{ entry -> map.multiPut(entry[0], entry[1]) }

def result = map.collect{ k, v -> k + ',"' + v.join(",") + '"'}.join("\n")
println result
将打印:

132265,棕色、金色、灰色、绿色 122222,红色,白色


它可以通过以下方式优雅地解决:

上述印刷品:

132265,"Brown,Gold,Gray,Green"

它可以通过以下方式优雅地解决:

上述印刷品:

132265,"Brown,Gold,Gray,Green"

出于某种原因,您必须使用脚本吗?这可以通过现成的Boomi功能轻松实现

创建一个映射函数,将ID字段前置到您选择的字符串,即222_concat_字段。然后使用该值设置具有该值的动态流程道具


进程属性的值将包含连接名称字段的结果。只需将此函数添加到地图中,即可解决此问题。然后使用最终值填充结果。

出于某种原因,您必须使用脚本吗?这可以通过现成的Boomi功能轻松实现

创建一个映射函数,将ID字段前置到您选择的字符串,即222_concat_字段。然后使用该值设置具有该值的动态流程道具


进程属性的值将包含连接名称字段的结果。只需将此函数添加到地图中,即可解决此问题。然后使用最终值填充结果。

这取决于数据的来源。 如果您在问题中发布的数据来自单个文档,那么您可以使用groovy脚本在映射中轻松地处理这些数据

如果您在问题中发布的数据进入多个文档,即。 doc1:132265,布朗 doc2:132265,黄金 doc3:132265,灰色 doc4:132265,绿色 在这种情况下,无法将其处理为映射。您需要将数据处理步骤与自定义脚本一起使用。
因为请求在groovy中创建的代码取决于获取数据的输入配置文件。请提供更多信息,即输入配置文件、字段等。

这取决于数据的来源。 如果您在问题中发布的数据来自单个文档,那么您可以使用groovy脚本在映射中轻松地处理这些数据

如果您在问题中发布的数据进入多个文档,即。 doc1:132265,布朗 doc2:132265,黄金 doc3:132265,灰色 doc4:132265,绿色 在这种情况下,无法将其处理为映射。您需要将数据处理步骤与自定义脚本一起使用。
因为请求在groovy中创建的代码取决于获取数据的输入配置文件。请提供更多信息,例如输入配置文件、字段等。

您可能应该阅读一下Groovy:您的传入数据是什么格式或数据类型?它是CSV字符串吗?您可能应该仔细阅读一下Groovy:传入的数据是什么格式或数据类型?是CSV字符串吗?非常好的解决方案。非常好的解决方案。