【发布时间】:2021-05-25 06:38:32
【问题描述】:
我想在现有的 CSV 文件 (Template for Google Ads Offline Conversion Tracking) 中附加使用 Datagrip 从 PostgreSQL 查询的结果。 执行到文件可以很好地将查询结果导出为 CSV 文件。但显然这只是创建了一个只包含查询结果的新文件。 我正在考虑在 datagrip 中的 groovy 脚本中加载现有模板,然后将其内容添加到创建的文件的顶部,但我无法在如何执行此操作方面取得任何进展。
我发现(也许?)如何加载文件,但我不知道如何实际使用它并将其放在文件顶部,以便可以在其下方添加查询结果。
fh = new File("C:/1.csv")
def csv_content = fh.getText('utf-8')
这就是我加载文件所得到的全部内容,不知道如何继续使用它。
另外,我考虑只是手动将模板的信息手动添加到脚本中,因此它不必加载另一个文件,而只需获取该信息,然后再添加查询结果。如果您能告诉我如何直接添加这样的行也会很有帮助。
Datagrip 中包含的 groovy 脚本文件如下:
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
SEPARATOR = ","
QUOTE = "\""
NEWLINE = System.getProperty("line.separator")
def printRow = { values, valueToString ->
values.eachWithIndex { value, idx ->
def str = valueToString(value)
def q = str.contains(SEPARATOR) || str.contains(QUOTE) || str.contains(NEWLINE)
OUT.append(q ? QUOTE : "")
.append(str.replace(QUOTE, QUOTE + QUOTE))
.append(q ? QUOTE : "")
.append(idx != values.size() - 1 ? SEPARATOR : NEWLINE)
}
}
if (!TRANSPOSED) {
ROWS.each { row -> printRow(COLUMNS, { FORMATTER.format(row, it) }) }
}
else {
def values = COLUMNS.collect { new ArrayList<String>() }
ROWS.each { row -> COLUMNS.eachWithIndex { col, i -> values[i].add(FORMATTER.format(row, col)) } }
values.each { printRow(it, { it }) }
}
【问题讨论】:
标签: postgresql csv groovy datagrip