在 Groovy 中使用 writeLine 重复输出
duplicate output using writeLine in Groovy
我正在使用以下代码将注释输出到 csv:
new File(scriptParams.outputFile).withWriterAppend{ out ->
([Default:(doc.getAnnotations("MS").get("EDSS"))]).each{setName, set ->
set.each{ anno ->
anno.getFeatures().each{
def f = anno.getFeatures()
out.writeLine(/"${doc.getName()}",${anno.getId()},"${anno.getType()}",${anno.start()},${anno.end()},"${f.get('value')}","${f.get('valueLower')}","${f.get('valueUpper')}"/)
}
}
}
}
效果很好,但是对于找到的每个注释,我正好得到 2 行。即每个注释有 1 个重复项。我似乎无法在脚本的任何地方看到为什么会发生这种情况。有什么指点吗?
怎么样:
new File(scriptParams.outputFile).withWriterAppend{ out ->
doc.getAnnotations("MS").get("EDSS").each{
anno ->
def f = anno.getFeatures()
out.writeLine(/"${doc.getName()}",${anno.getId()},"${anno.getType()}",${anno.start()},${anno.end()},"${f.get('value')}","${f.get('valueLower')}","${f.get('valueUpper')}"/)
}
}
主要问题是 anno.getFeatures().each{
,它迭代注释具有的所有特征,并针对每个特征将行打印到输出。您只需要为每个注释打印行,而不是为每个注释特征打印行。
我正在使用以下代码将注释输出到 csv:
new File(scriptParams.outputFile).withWriterAppend{ out ->
([Default:(doc.getAnnotations("MS").get("EDSS"))]).each{setName, set ->
set.each{ anno ->
anno.getFeatures().each{
def f = anno.getFeatures()
out.writeLine(/"${doc.getName()}",${anno.getId()},"${anno.getType()}",${anno.start()},${anno.end()},"${f.get('value')}","${f.get('valueLower')}","${f.get('valueUpper')}"/)
}
}
}
}
效果很好,但是对于找到的每个注释,我正好得到 2 行。即每个注释有 1 个重复项。我似乎无法在脚本的任何地方看到为什么会发生这种情况。有什么指点吗?
怎么样:
new File(scriptParams.outputFile).withWriterAppend{ out ->
doc.getAnnotations("MS").get("EDSS").each{
anno ->
def f = anno.getFeatures()
out.writeLine(/"${doc.getName()}",${anno.getId()},"${anno.getType()}",${anno.start()},${anno.end()},"${f.get('value')}","${f.get('valueLower')}","${f.get('valueUpper')}"/)
}
}
主要问题是 anno.getFeatures().each{
,它迭代注释具有的所有特征,并针对每个特征将行打印到输出。您只需要为每个注释打印行,而不是为每个注释特征打印行。