我输入的数据类型为
abc 12d
uy 76d
ce 12a
线条由\n
分隔,值由\t
分隔。
数据来自shell命令:
brlist = 'mycommand'.execute().text
然后我想把它变成一张地图:
brmap = brlist.split("\n").collectEntries {
tkns = it.tokenize("\t")
[ (tkns[0]): tkns[1] ]
}
我也试过
brmap = brlist.split("\n").collectEntries {
it.tokenize("\t").with { [ (it[0]): it[1] ] }
}
两种方式都给出了相同的结果,即带有单个条目的地图:
brmap.toString()
# prints "[abc:12d]"
为什么只有输入数据的第一行最终出现在地图中?
答案 0 :(得分:1)
您的代码有效,这意味着输入字符串brlist
不是您所说的......
你确定你拥有的是什么吗?尝试在brlist
it
,然后collectEntries
顺便说一句,这与你的代码完全相同:
brlist.split('\n')*.split('\t')*.toList().collectEntries()
或者你可以尝试(包括它的空格而不是制表符,这两者都是期望的)
brlist.split('\n')*.split(/\s+/)*.toList().collectEntries()
答案 1 :(得分:1)
此代码有效
// I use 4 spaces as tab.
def text = 'sh abc.sh'.execute().text.replaceAll(" " * 4, "\t")
brmap = text.split("\n").collectEntries {
tkns = it.tokenize("\t")
[(tkns[0]) : tkns[1]]
}
assert[abc:"12d", uy:"76d", ce:"12a"] == brmap
abc.sh
#!/bin/sh
echo "abc 12d"
echo "uy 76d"
echo "ce 12a
另外,我认为你的常规代码是正确的。也许你的mycommand
有问题。
答案 2 :(得分:0)
好的,感谢提示,这是Jenkins的一个错误:https://issues.jenkins-ci.org/browse/JENKINS-26481。