2016-10-20 9 views
0

では動作しませんん、私は\tによって\nと値によって分離されているラインを持つタイプはなぜ、この文字列→リスト→地図の変換はGroovyの

abc 12d 
uy  76d 
ce  12a 

の入力データを持っています。

データは、シェルコマンドから来ている:

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]" 

なぜ入力データの最初の行だけがマップに残るのですか?

答えて

1

あなたのコードが入力された文字列brlistは、あなたはそれが言うことではないことを意味する、働く...

は、それはあなたが持っているものだあなたは確かにいますか?

brlist.split('\n')*.split('\t')*.toList().collectEntries() 

それともあなたは試みることができる

(それが空白でないタブだ包み、これは両方を期待します):さておき、これはあなたのコードと同じことをしたよう it

collectEntriesの内側に、その後 brlistを印刷してみますと、
brlist.split('\n')*.split(/\s+/)*.toList().collectEntries() 
+0

このコードは実行されません。私はJenkins Groovy Pipelineスクリプトを使用しています。 'groovy.lang.MissingMethodException:メソッドのシグネチャがありません:[Ljava.lang.String; .split()は引数型に適用できます:(java.lang.String)values:[\t] 可能な解決策:split(groovy.lang .Close)、wait()、init()、sort()、tail()、toList() –

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に問題があります。

関連する問題