${reports.join('\n')}报错:No such property: reports for class
时间: 2024-02-27 21:53:57 浏览: 114
Stimulsoft Reports.JS试用版:一款功能强大的JavaScript和HTML5报表控件
非常抱歉,是我的疏忽,我漏掉了一个地方。在定义`reports`数组之前,需要先定义一个空的`reports`字符串,然后在比较每个文件的内容后,将报告添加到`reports`字符串中。最后,将`reports`字符串拼接到HTML报告模板中。以下是更新后的代码:
```groovy
@Grab(group='com.googlecode.java-diff-utils', module='diffutils', version='1.3.0')
import difflib.*
import java.nio.file.*
// 定义两个文件夹的路径
def dir1 = Paths.get("path/to/first/directory")
def dir2 = Paths.get("path/to/second/directory")
// 遍历两个文件夹中的所有csv文件
def files1 = findFiles(dir1, "csv")
def files2 = findFiles(dir2, "csv")
// 定义HTML报告的模板
def htmlTemplate = """
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>CSV文件比较报告</title>
<style>
table {
border-collapse: collapse;
width: 100%;
}
th, td {
text-align: left;
padding: 8px;
}
tr:nth-child(even) {
background-color: #f2f2f2;
}
.added {
background-color: #aaffaa;
}
.deleted {
background-color: #ffaaaa;
}
.changed {
background-color: #ffffaa;
}
</style>
</head>
<body>
<h1>CSV文件比较报告</h1>
${reports}
</body>
</html>
"""
// 定义报告字符串
def reports = ""
// 对于每一个csv文件,比较其在两个文件夹中的内容
(files1 + files2).unique().each { file ->
def path1 = dir1.resolve(file)
def path2 = dir2.resolve(file)
if (Files.exists(path1) && Files.exists(path2)) {
// 如果文件在两个文件夹中都存在,则比较文件内容
def lines1 = Files.readAllLines(path1)
def lines2 = Files.readAllLines(path2)
def patch = DiffUtils.diff(lines1, lines2)
reports += "<h2>${file}</h2>\n"
reports += "<table>\n"
reports += "<tr><th>行号</th><th>内容</th></tr>\n"
def lineNum = 1
patch.getDeltas().each { delta ->
// 对于每一个差异,将其以HTML格式呈现,并将差异字段高亮显示
delta.getOriginal().each { line ->
reports += "<tr class='deleted'><td>${lineNum++}</td><td>${line}</td></tr>\n"
}
delta.getRevised().each { line ->
reports += "<tr class='added'><td>${lineNum++}</td><td>${line}</td></tr>\n"
}
delta.getOriginal().size().upto(delta.getOriginal().size() + delta.getRevised().size() - 1) { i ->
reports += "<tr class='changed'><td>${i+1}</td><td>${delta.getRevised().get(i - delta.getOriginal().size())}</td></tr>\n"
}
}
reports += "</table>\n"
} else {
// 如果文件只在一个文件夹中存在,则将其标记为“文件不存在”
reports += "<h2>${file} (文件不存在)</h2>\n"
}
}
// 输出HTML报告
def reportFile = new File("report.html")
reportFile << htmlTemplate.replace("${reports}", reports)
// 定义一个函数,用于遍历一个文件夹中的所有指定扩展名的文件
def findFiles(dir, ext) {
def files = []
Files.walk(dir).forEach { path ->
if (Files.isRegularFile(path) && path.getFileName().toString().endsWith(".${ext}")) {
files.add(dir.relativize(path).toString())
}
}
return files
}
```
现在,`${reports}`就可以正确地输出了。
阅读全文