xóa cột khỏi csv trong groovy / java

Aug 18 2020

Tôi đang sử dụng truy vấn Chọn để truy xuất dữ liệu từ cơ sở dữ liệu và tạo CSV đang hoạt động tốt.

Trong FDatalớp của tôi, tôi có phương pháp dưới đây, nơi tôi đang thực hiện định dạng cho giá trị ô trong csv. Tôi có cột ATYPEtrong truy vấn đã chọn của mình mà tôi không muốn viết bằng csv hoặc có thể sau khi viết, chỉ cần xóa trường cột hoàn chỉnh ATYPEkhỏi csv để nó không được hiển thị.

Có cách nào tôi có thể làm điều đó trong phương pháp dưới đây để thực hiện logic này không?

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

Trả lời

1 LiveandLetLive Aug 19 2020 at 08:36

Trong đoạn mã được đưa ra bên dưới, cú pháp chính xác có thể sai (tôi chỉ là người mới bắt đầu kiến ​​thức về Groovy) nhưng bạn sẽ có ý tưởng về cách giải quyết nó:

  1. Lọc tên cột trước khi tham gia tức là

    writer.writeLine(columns.findAll({ it != 'ATYPE'}).join(CSV_SEPARATOR)) 
    
  2. Lọc dữ liệu trước khi viết tức là

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