Apache Commons CSV |如何在字段中忽略/包括分号和逗号?

时间:2019-03-05 16:21:49

标签: java csv

我正在尝试解析日志文件并将其存储在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个不同的值。

enter image description here

我不知道解决此问题的理想方法。请在下面查看与我使用的库相关的代码的摘要:

  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吗?

感谢您的反馈。

1 个答案:

答案 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