从 groovy/java 中的 csv 中删除列

remove column from csv in groovy/java

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

在我的 FData class 中,我使用以下方法对 csv 中的单元格值进行格式化。我的 select 查询中有列 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 中只有 beginner-level 知识)但是你会知道如何解决它:

  1. 在加入之前过滤列名,即

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

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