获得以下脚本,用于替换多行字符串中的值。
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栏。 与$ {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()
方法修改文件内容。
答案 0 :(得分:2)
不确定为什么它不起作用,但我在这里建议的是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。