entfernen sie spalte aus csv in groovy / java

Aug 18 2020

Ich verwende die Select-Abfrage, um die Daten aus der Datenbank abzurufen und eine CSV zu generieren, die einwandfrei funktioniert.

In meiner FDataKlasse habe ich unten Methode, wo ich für Zellenwert in CSV formatiere. Ich habe eine Spalte ATYPEin meiner Auswahlabfrage, die ich nicht in CSV schreiben möchte oder nach dem Schreiben einfach das vollständige Spaltenfeld ATYPEaus CSV löschen möchte, damit es nicht angezeigt werden kann.

Gibt es eine Möglichkeit, wie ich das in der folgenden Methode tun kann, um diese Logik auszuführen?

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

Antworten

1 LiveandLetLive Aug 19 2020 at 08:36

In dem unten angegebenen Code ist die genaue Syntax möglicherweise falsch (ich habe nur Anfängerkenntnisse in Groovy), aber Sie werden die Idee bekommen, wie Sie sie lösen können:

  1. Filtern Sie die Spaltennamen vor dem Beitritt, z

    writer.writeLine(columns.findAll({ it != 'ATYPE'}).join(CSV_SEPARATOR)) 
    
  2. Filtern Sie die Daten vor dem Schreiben, dh

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