java - 将for循环的结果写入groovy中的csv

标签 java groovy gate

目前我正在使用 Groovy 创建嵌套的 for 循环,将对象的内容打印到一个字符串中,该字符串旨在作为分隔数据行。然而,我想将这些字符串输出到 csv 文件而不是打印它们。

代码如下:

for (doc in docs) {
    AnnotationSet row = doc.getAnnotations("Final").get("Row")
    AnnotationSet BondCounsel = doc.getAnnotations("Final").get("Bond_Counsel")
    AnnotationSet PurchasePrice = doc.getAnnotations("Final").get("PurchasePrice")
    AnnotationSet DiscountRate = doc.getAnnotations("Final").get("DiscountRate")
    for (b in BondCounsel) {
        for (d in DiscountRate) {
            for (r in row) {
                for (p in PurchasePrice) {
    println(doc.getFeatures().get("gate.SourceURL") + "|"
    + "mat_amount|" + r.getFeatures().get("MatAmount") + "|"
    + "orig_price|" + p.getFeatures().get("VAL") + "|"
    + "orig_yield|" + r.getFeatures().get("Yield") + "|"
    + "orig_discount_rate|" + d.getFeatures().get("rate")+ "|"
    + "CUSIP|" + r.getFeatures().get("CUSIPVAL1") + r.getFeatures().get("CUSIPVAL2") + r.getFeatures().get("CUSIPVAL3") + "|"
    + "Bond_Counsel|" + b.getFeatures().get("value"))
                }
            }
        }
    }
}

其中输出只是一系列字符串,例如:

filename1|mat_amt|3|orig_price|$230,000.....
filename2|mat_amt|4|orig_price|$380,000.....

我知道我可以设置一个文件编写器,即

fileWriter = new FileWriter(fileName);
csvFilePrinter = new CSVPrinter(fileWriter, csvFileFormat);
csvFilePrinter.printRecord(FILE_HEADER);

<for loop here storing results>
csvFilePrinter.printRecord(forLoopResults)

但我不确定如何正确格式化和存储我当前在 for 循环中打印的内容,以便能够传递到 csvFilePrinter.printRecord()

任何帮助都会很棒。

最佳答案

printRecord() 方法接受一个 Iterable(根据 doc)。例如一个列表。

因此,在代码的内部循环中,我们将为该行创建一个列表,而不是打印。

具体来说,给定此设置:

def FILE_HEADER = ['Bond','Discount','Row','Price']    
def fileName = 'out.csv'

和此数据聚合(作为示例):

def BondCounsel = ['bc1','bc2']
def DiscountRate = ['0.1','0.2']
def row = ['r1','r2']
def PurchasePrice = ['p1','p2']

然后这个(编辑:现在变成了 Groovier):

new File(fileName).withWriter { fileWriter ->
    def csvFilePrinter = new CSVPrinter(fileWriter, CSVFormat.DEFAULT)
    csvFilePrinter.printRecord(FILE_HEADER)

    BondCounsel.each { b ->
        DiscountRate.each { d ->
            row.each { r ->
                PurchasePrice.each { p ->
                    csvFilePrinter.printRecord([b, d, r, p])
                }
            }
        }
    }
}

会将其生成到 out.csv:

Bond,Discount,Row,Price
bc1,0.1,r1,p1
bc1,0.1,r1,p2
bc1,0.1,r2,p1
... etc

关于java - 将for循环的结果写入groovy中的csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51994883/

相关文章:

Java在随机声明数组时出错

java - 内部类扩展

java - 在 GATE 中使用斯坦福解析器从 tokenID 获取 token 字符串

java - 在 eclipse 中运行门管道我得到这个错误 Java.lang.ClassNotFoundException : gate. 资源

Java:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径

java - Z3 for Java 中关于 check() 的性能

grails - Grails 的 InvokeDynamic

gradle - 当文档说它必须返回Parent类型时,为什么gradle Project API会为getParent()返回String?

java - Groovy 打包到 Jar 中,无法使用 Maven 工作。由 : java. lang.AbstractMethodError 引起

java - 解析 GATE 文档以获取共同引用文本