2016-06-27 10 views
1

複数行の文字列の値を置き換える次のスクリプトがあります。予想通りGroovyは、複数行の文字列に似たファイル内容のプレースホルダを置き換えます。

def param1 = 'Groovy' 
def param2 = 'Java' 
def multiline = """ 
${param1} is closely related to ${param2}, 
so it is quite easy to make a transition. 
""" 
//output shows with the replaced values for param1 and param2 
println multiline 

出力が示されています:

Groovy is closely related to Java, 
so it is quite easy to make a transition. 

問題:

は、今私は同じ使用してファイルの代わりに、複数行の文字列をやろうとしています。つまり、複数の行の文字列をファイルにコピーし、以下のスクリプトを使用して同じではあるが動作しない(目的の結果を出さない)。

私は確かに、それは私が紛失しているものでなければなりません。複数の方法を試しましたが、無駄になりました。

てみてください#1:スクリプト

def param1 = 'Groovy' 
def param2 = 'Java' 
def multiline = Eval.me(new File('test.txt').text) 
println multiline 

そして、それは実行に失敗しました。エラーは次のとおりです。

org.codehaus.groovy.control.MultipleCompilationErrorsException:起動に失敗しました: Script1.groovy:1:は、 '' が見つかり、EOF @ライン1を期待して、コラム42を sは密接に関連します$ {PARAM2}、 ^
1エラー

試行#2

def param1 = 'Groovy' 
def param2 = 'Java' 
def multiline = new File('test.txt').text 
def finalContent = """$multiline""" 
println finalContent 

出力に違いはなく、そのままファイルの内容を表示します。

出力:

${param1} is closely related to ${param2}, 
so it is quite easy to make a transition. 

任意のポインタ私が何をしないのですか?

現時点では、replace()メソッドを使用してファイルコンテンツの変更を避けたいと考えています。

答えて

1

なぜ機能しないのか分かりませんが、私がここで示唆していることは、templatingがここで一番うまくいくということです。どうぞご覧ください:

import groovy.text.SimpleTemplateEngine 

def f = new File('lol.txt') 
println f.text 

def binding = [ 
    param1: 'Groovy', 
    param2: 'Java', 
] 

def engine = new SimpleTemplateEngine() 
def template = engine.createTemplate(f.text).make(binding) 

println template.toString() 

ファイル内容が評価されない理由は、hereです。

+0

迅速な返信をありがとうございます。私は間違っていることがあるかもしれませんが。私が進める良いことである「テンプレート」を提案してくれてありがとう。誰かが私が試したことで間違っていることを説明するのを待つだろう。 – Rao

+1

@ラオここであなたは説明があります:https://issues.apache.org/jira/browse/GROOVY-2505 – Opal

+0

詳細に入り、問題の原因を参照していただきありがとうございます。テンプレート '。 @ Rao、確かに – Rao

関連する問題