remove column from csv in groovy/java

huangapple go评论72阅读模式
英文:

remove column from csv in groovy/java

问题

以下是翻译好的部分:

我正在使用Select查询从数据库中检索数据并生成CSV,这部分工作正常。

在我的FData类中,我有以下方法,在此方法中,我正在对CSV中的单元格值进行格式化。在我的选择查询中有一个名为ATYPE的列,我不想在CSV中写入它,或者在写入后直接清除整个ATYPE列,以便它不会显示出来。

在下面的方法中,是否有办法实现这个逻辑?

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]
                    // 对CSV输出进行单元格数据处理... 如果单元格为空,则替换为 "",否则进行其他格式化
                    if (cell != null) {
                        if (cell.properties["class"] == Timestamp.class)
                            return IData.OUT_DATE_FORMAT.format(cell)
                    } else {
                        return ""
                    }
                    return cell
                }.join(CSV_SEPARATOR))
            } catch (Exception e) {
                // 处理异常
            }
        }
        sql.close()
    }
}

请注意,由于代码中可能涉及到特定的变量、方法和类名,我已经保留了它们的原始英文表示。如果您需要进一步的帮助或解释,请随时提问。

英文:

I am using Select query to retrieve the data from database and generate CSV which is working fine.

In my FData class i have below method where i am doing formating for cell value in csv. I have column ATYPE in my select query which i dont want to write in csv or may be after writing just clear the complete column ATYPE field from csv so that it cant be shown.

Is there way i can do that in below method to do this logic?

private static void IFile(File output, Sql sql, String query, List&lt;String&gt; columns) {
        output.withWriter { writer -&gt;            
            writer.writeLine(columns.join(CSV_SEPARATOR))           
            sql.eachRow(query) { rec -&gt;
                try {
                    writer.writeLine(columns.collect { columnName -&gt;
                        def cell = rec[columnName]
                        // cell data processing for CSV output...If cell is empty then replace with &quot;&quot; else do the other formating
                        if (cell != null) {                                
                            if (cell.properties[&quot;class&quot;] == Timestamp.class)
                                return IData.OUT_DATE_FORMAT.format(cell)                              
                            
                        }
                        else {
                            return &quot;&quot;
                        }
                        return cell
                    }.join(CSV_SEPARATOR))
                }                 }
            sql.close()
        }
    }

答案1

得分: 1

在下面给出的代码中,确切的语法可能有误(我只有初学者水平的 Groovy 知识),但您会了解如何解决它:

  1. 在连接之前筛选列名,即

    writer.writeLine(columns.findAll({ it != 'ATYPE'}).join(CSV_SEPARATOR))

  2. 在写入之前筛选数据,即

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

英文:

In the code given below, the exact syntax may be wrong (I've just a beginner-level knowledge in groovy) but you will get the idea of how to solve it:

  1. Filter the column names before joining i.e.

    writer.writeLine(columns.findAll({ it != &#39;ATYPE&#39;}).join(CSV_SEPARATOR)) 
    
  2. Filter the data before writing i.e.

     writer.writeLine(columns.findAll({ it != &#39;ATYPE&#39;}).collect { columnName -&gt;
     	//...
     } 
    

huangapple
  • 本文由 发表于 2020年8月19日 00:59:41
  • 转载请务必保留本文链接:https://go.coder-hub.com/63473326.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定