我正在尝试解析日志文件并将其存储在CSV文件中。这是下面的示例行:
218.1.111.50 - - [13/Mar/2005:10:36:11 -0500] "GET http://www.yahoo.com/ HTTP/1.1" 403 2898 "-" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)"
为此,我正在使用 Apach Commons CSV 库。问题在于某些字段的特殊字符;
具有其值,并且它们被解释为分隔符。
例如,如果我们查看字段值Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)
。由于;
,此单个字段被分配给3个不同的值。
我不知道解决此问题的理想方法。请在下面查看与我使用的库相关的代码的摘要:
CSVPrinter printer = new CSVPrinter(writer, CSVFormat.DEFAULT
.withHeader(HEADERS));
//
//
Matcher m = p.matcher(line);
Date date=formatter.parse(m.group("Time"));
try {
printer.printRecord(date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), m.group("NetworkSrcIpv4"),
m.group("ApplicationHttpStatus"),m.group("ApplicationLen"),m.group("ApplicationHttpUserAgent"),
m.group("ApplicationHttpQueryString"));
printer.flush();
} catch (IOException e) {
e.printStackTrace();
}
//
是否有可能自动忽略;
,或者用不影响期望结果的某些值替换它们?我可以添加我的CSVprinter
吗?
感谢您的反馈。
答案 0 :(得分:0)
您可以将TAB配置为定界符,而不是使用DEFAULT定界符-
CSVPrinter printer = new CSVPrinter(writer, CSVFormat.TDF.withHeader(HEADERS));
https://commons.apache.org/proper/commons-csv/apidocs/org/apache/commons/csv/CSVFormat.html#TDF