在 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{,它迭代注释具有的所有特征,并针对每个特征将行打印到输出。您只需要为每个注释打印行,而不是为每个注释特征打印行。