2016-06-27 4 views
1

Erhalten Sie das folgende Skript, das Werte in der mehrzeiligen Zeichenfolge ersetzt.Groovy ersetzt Platzhalter von Dateiinhalt ähnlich wie Multiline-String

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

Ausgabe::

ich das gleiche mit Datei-Zeichenfolge anstelle von mehreren Leitungen zu tun, ich versuche jetzt

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 

Die Ausgabe wird wie erwartet gezeigt. d. h., kopierte die mehrzeilige Zeichenfolge in eine Datei und verwendete das folgende Skript, um dasselbe zu tun, aber nicht zu arbeiten (wobei das gewünschte Ergebnis nicht erhalten wurde).

Ich bin sicher, es muss etwas sein, das ich vermisse. Mehrweg versucht, aber vergeblich.

Versuch # 1: Script

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

Und es wird nicht ausgeführt. Fehler folgen:

org.codehaus.groovy.control.MultipleCompilationErrorsException: Start nicht gestartet: Script1.groovy: 1: erwartetes EOF, gefunden '' @ Zeile 1, Spalte 42 s eng mit $ im Zusammenhang {param2} ^
1 Fehler

Versuch # 2

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

Und es gibt keinen Unterschied in der Ausgabe, zeigt nur den Dateiinhalt wie er ist.

Ausgang:

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

Alle Hinweise, was bin ich dabei?

Bitte beachten Sie, dass im Moment möchte ich Datei Inhalt Änderung mit replace() Methode zu vermeiden.

Antwort

1

Nicht sicher, warum es nicht funktioniert, aber was ich hier vorschlagen kann ist, dass templating am besten hier passt. Bitte haben Sie einen Blick:

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() 

Eine Erklärung, warum Dateiinhalt wird nicht ausgewertet here gefunden werden kann.

+0

Vielen Dank für die schnelle Antwort. Ich könnte etwas falsch machen. Danke für die vorgeschlagene "Vorlage", die mir gut ist, fortzufahren. Werde warten, wenn jemand erklärt, was mit dem, was ich versucht habe, falsch ist. – Rao

+1

@Rao, hier haben Sie eine Erklärung: https://issues.apache.org/jira/browse/GROOVY-2505 – Opal

+0

Vielen Dank für Ihre Zeit, ins Detail zu gehen und auf die Problemursache zu verweisen, und glücklich zu 'verwenden Vorlage ". – Rao