rimuovi la colonna da csv in groovy / java

Aug 18 2020

Sto usando Seleziona query per recuperare i dati dal database e generare CSV che funziona correttamente.

Nella mia FDataclasse ho il metodo seguente in cui sto eseguendo la formattazione per il valore della cella in CSV. Ho una colonna ATYPEnella mia query di selezione che non voglio scrivere in csv o potrebbe essere dopo aver scritto solo cancellare il ATYPEcampo della colonna completo da csv in modo che non possa essere mostrato.

C'è un modo per farlo nel metodo seguente per eseguire questa logica?

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

Risposte

1 LiveandLetLive Aug 19 2020 at 08:36

Nel codice riportato di seguito, la sintassi esatta potrebbe essere sbagliata (ho solo una conoscenza a livello di principiante in groovy) ma avrai l'idea di come risolverlo:

  1. Filtra i nomi delle colonne prima di unirti ad es

    writer.writeLine(columns.findAll({ it != 'ATYPE'}).join(CSV_SEPARATOR)) 
    
  2. Filtra i dati prima di scrivere, ad es

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