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