我正在使用Dell Boomi將數據從一個系統映射到另一個系統。我可以在地圖中使用groovy,但沒有經驗。我試圖用其他Boomi工具來做到這一點,但有人告訴我需要在腳本中使用groovy。我的入站數據是:Groovy csv到字符串
132265,布朗
132265,金
132265,灰色
132265,綠色
我想輸出:
「棕色,金色,灰色,綠色」
希望這是有道理的!對Groovy代碼的任何想法,使其工作?
我正在使用Dell Boomi將數據從一個系統映射到另一個系統。我可以在地圖中使用groovy,但沒有經驗。我試圖用其他Boomi工具來做到這一點,但有人告訴我需要在腳本中使用groovy。我的入站數據是:Groovy csv到字符串
132265,布朗
132265,金
132265,灰色
132265,綠色
我想輸出:
「棕色,金色,灰色,綠色」
希望這是有道理的!對Groovy代碼的任何想法,使其工作?
嗯,我不知道你是如何得到你的數據,但這是實現你的目標的一般方法。你可以使用一個庫,比如下面的庫來解析csv。
https://github.com/xlson/groovycsv
爲您的數據的例子是:
@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, 「紅,白」
它可與groupBy
被優雅的解決和spread operator:
@Grapes(
@Grab(group='org.apache.commons', module='commons-csv', version='1.2')
)
import org.apache.commons.csv.*
def csv = '''
132265,Brown
132265,Gold
132265,Gray
132265,Green
'''
def parsed = CSVParser.parse(csv, CSVFormat.DEFAULT.withHeader('code', 'color')
parsed.records.groupBy({ it.code }).each { k,v -> println "$k,\"${v*.color.join(',')}\"" }
上面打印:
132265,"Brown,Gold,Gray,Green"
非常好的解決方案。 – pczeus
你有使用腳本出於某種原因?這可以通過開箱即用的Boomi功能輕鬆實現。
創建一個映射函數,該函數將ID字段預先設置爲您選擇的字符串(即222_concat_fields)。然後使用該值來設置具有該值的動態過程支持。
process prop的值將包含連接名稱字段的結果。只需將此功能添加到您的地圖應該照顧它。然後使用最終值填充結果。
那它取決於數據是怎麼來的。 如果您在問題中發佈的數據來自單個文檔,那麼您可以使用常規腳本輕鬆處理該問題。
如果您曾經參與過的問題的數據來爲多個文件,即
DOC1:132265,布朗
DOC2:132265,金
doc3的:132265,灰色
DOC4:132265,綠色
在那種情況下,它不能被處理成地圖。您將需要使用自定義腳本進行數據處理步驟。
對於您要求在groovy中創建的代碼取決於您獲取數據的輸入配置文件。請提供更多信息,例如輸入配置文件,字段等。
您應該仔細閱讀Groovy:http://groovy-lang.org/documentation.html – cjstehno
輸入數據的格式或數據類型是什麼?它是一個CSV字符串嗎? – pczeus