supprimer la colonne de csv dans groovy / java

Aug 18 2020

J'utilise la requête Select pour récupérer les données de la base de données et générer un CSV qui fonctionne bien.

Dans ma FDataclasse, j'ai la méthode ci-dessous où je fais le formatage pour la valeur de la cellule en csv. J'ai une colonne ATYPEdans ma requête de sélection que je ne veux pas écrire en csv ou peut-être après l'écriture, effacez simplement le ATYPEchamp de colonne complet de csv afin qu'il ne puisse pas être affiché.

Existe-t-il un moyen de le faire dans la méthode ci-dessous pour faire cette logique?

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

Réponses

1 LiveandLetLive Aug 19 2020 at 08:36

Dans le code ci-dessous, la syntaxe exacte peut être erronée (je n'ai qu'une connaissance de niveau débutant en groovy) mais vous aurez une idée de la façon de la résoudre:

  1. Filtrer les noms de colonnes avant de rejoindre ie

    writer.writeLine(columns.findAll({ it != 'ATYPE'}).join(CSV_SEPARATOR)) 
    
  2. Filtrer les données avant d'écrire ie

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