从groovy / java中的csv中删除列

问题描述

我正在使用Select查询数据库中检索数据并生成可以正常工作的CSV。

在我的FData类中,我使用下面的方法在其中对csv中的单元格值进行格式化。我的选择查询中有ATYPE列,我不想用csv编写,或者可能在写完之后只是从csv中清除完整的列ATYPE字段,使其无法显示

我可以通过以下方法做到这一点吗?

private static void IFile(File output,sql sql,String query,List<String> columns) {
        output.withWriter { writer ->            
            writer.writeLine(columns.join(CSV_SEParaTOR))           
            sql.eachRow(query) { rec ->
                try {
                    writer.writeLine(columns.collect { columnName ->
                        def cell = rec[columnName]
                        // cell data processing for CSV output...If cell is empty then replace with "" else do the other formating
                        if (cell != null) {                                
                            if (cell.properties["class"] == Timestamp.class)
                                return IData.OUT_DATE_FORMAT.format(cell)                              
                            
                        }
                        else {
                            return ""
                        }
                        return cell
                    }.join(CSV_SEParaTOR))
                }                 }
            sql.close()
        }
    }

解决方法

在下面给出的代码中,确切的语法可能是错误的(我对groovy只是一个初学者的了解),但是您将了解如何解决它的想法:

  1. 在加入之前过滤列名称

    writer.writeLine(columns.findAll({ it != 'ATYPE'}).join(CSV_SEPARATOR)) 
    
  2. 在写入之前过滤数据

     writer.writeLine(columns.findAll({ it != 'ATYPE'}).collect { columnName ->
         //...
     }