英文:
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<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
得分: 1
在下面给出的代码中,确切的语法可能有误(我只有初学者水平的 Groovy 知识),但您会了解如何解决它:
-
在连接之前筛选列名,即
writer.writeLine(columns.findAll({ it != 'ATYPE'}).join(CSV_SEPARATOR))
-
在写入之前筛选数据,即
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:
-
Filter the column names before joining i.e.
writer.writeLine(columns.findAll({ it != 'ATYPE'}).join(CSV_SEPARATOR))
-
Filter the data before writing i.e.
writer.writeLine(columns.findAll({ it != 'ATYPE'}).collect { columnName -> //... }
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论