在Groovy中使用writeLine复制输出

时间:2019-07-10 22:38:22

标签: groovy gate

我正在使用以下代码将注释输出到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个重复项。我似乎无法在脚本中的任何地方看到为什么会发生这种情况。有指针吗?

1 个答案:

答案 0 :(得分: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{,它会迭代注释所具有的所有功能,并针对每个功能将行打印到输出。您只需要为每个注释而不是每个注释功能打印行。