groovy / java में csv से कॉलम हटाएं

Aug 18 2020

मैं डेटाबेस से डेटा को पुनः प्राप्त करने के लिए चयन क्वेरी का उपयोग कर रहा हूं और सीएसवी उत्पन्न कर रहा हूं जो ठीक काम कर रहा है।

मेरी FDataकक्षा में नीचे विधि है जहां मैं सीएसवी में सेल वैल्यू के लिए फॉर्मेट कर रहा हूं। ATYPEमेरे चयनित क्वेरी में मेरे पास कॉलम है जिसे मैं csv में लिखना नहीं चाहता हूं या लिखने के बाद हो सकता ATYPEहै कि csv से पूरा कॉलम फ़ील्ड को साफ़ करें ताकि इसे दिखाया नहीं जा सके।

क्या ऐसा तरीका है जो मैं इस तर्क को करने के लिए नीचे की विधि में कर सकता हूं?

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

जवाब

1 LiveandLetLive Aug 19 2020 at 08:36

नीचे दिए गए कोड में, सटीक वाक्यविन्यास गलत हो सकता है (मैं ग्रूवी में सिर्फ एक शुरुआती स्तर का ज्ञान है) लेकिन आपको यह विचार करना होगा कि इसे कैसे हल किया जाए:

  1. शामिल होने से पहले कॉलम नामों को फ़िल्टर करें

    writer.writeLine(columns.findAll({ it != 'ATYPE'}).join(CSV_SEPARATOR)) 
    
  2. लिखने से पहले डेटा को फ़िल्टर करें

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