remover coluna de csv em groovy / java

Aug 18 2020

Estou usando a consulta Select para recuperar os dados do banco de dados e gerar CSV, que está funcionando bem.

Na minha FDataaula, tenho o método abaixo em que estou fazendo a formatação para o valor da célula em csv. Eu tenho uma coluna ATYPEna minha consulta de seleção que não quero escrever em csv ou pode ser depois de escrever apenas limpe o ATYPEcampo de coluna completo do csv para que não possa ser mostrado.

Existe uma maneira de fazer isso no método abaixo para fazer essa 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()
        }
    }

Respostas

1 LiveandLetLive Aug 19 2020 at 08:36

No código fornecido a seguir, a sintaxe exata pode estar errada (tenho apenas um conhecimento de nível iniciante em groovy), mas você terá uma ideia de como resolvê-lo:

  1. Filtre os nomes das colunas antes de entrar, ou seja

    writer.writeLine(columns.findAll({ it != 'ATYPE'}).join(CSV_SEPARATOR)) 
    
  2. Filtre os dados antes de escrever, ou seja

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