eliminar columna de csv en groovy / java

Aug 18 2020

Estoy usando la consulta Seleccionar para recuperar los datos de la base de datos y generar CSV que funciona bien.

En mi FDataclase, tengo el método siguiente donde estoy formateando el valor de la celda en csv. Tengo una columna ATYPEen mi consulta de selección que no quiero escribir en csv o puede ser después de escribir, simplemente borre el ATYPEcampo de columna completo de csv para que no se pueda mostrar.

¿Hay alguna manera de que pueda hacer eso en el método siguiente para hacer esta lógica?

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()
        }
    }

Respuestas

1 LiveandLetLive Aug 19 2020 at 08:36

En el código que se proporciona a continuación, la sintaxis exacta puede ser incorrecta (solo tengo un conocimiento de nivel principiante en groovy), pero obtendrá una idea de cómo resolverlo:

  1. Filtrar los nombres de las columnas antes de unirse, es decir

    writer.writeLine(columns.findAll({ it != 'ATYPE'}).join(CSV_SEPARATOR)) 
    
  2. Filtrar los datos antes de escribir, es decir

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