使用opencsv reader解析具有分隔符作为列值一部分的txt文件

时间:2015-06-05 00:01:11

标签: java opencsv

我有一个制表符分隔的文本文件,我想使用openscsv进行解析并上传到数据库。我使用CSVReader()来解析文件。问题是,某些列值中包含选项卡。例如,列以标签结束,然后它有另一个标签,用于将其与下一列分开。

我在解析此文件时遇到问题。如何避免作为值的一部分的分隔符?

This是我尝试解析的文件。每行有2列,总共有5行。第一行是标题。但是,当我使用以下代码解析它时,我只得到3行:

CSVReader reader = new CSVReader(new FileReader("input.txt"), '\t');
String[] nextLine;
int cnt = 0;
while ((nextLine = reader.readNext()) != null) {
    if (nextLine != null) {
        cnt++;
        System.out.println("Length of row "+cnt+" = "+nextLine.length);
        System.out.println(Arrays.toString(nextLine));
    }
}

********更新********

执行如下所示的正常读取行打印5行:

BufferedReader br = new BufferedReader(new FileReader("input.txt"));
int lines = 0;
while(br.readLine() != null){
    lines++;
}
System.out.println(lines);

1 个答案:

答案 0 :(得分:0)

  1. 在您的数据上加上引号 - 这是来自CSVReaderTest的修改后的单元测试,显示引号有效:

    @Test
    public void testSkippingLinesWithDifferentEscape() throws IOException
    {
    
        StringBuilder sb = new StringBuilder(CSVParser.INITIAL_READ_SIZE);
        sb.append("Skip this line?t with tab").append("\n");   // should skip this
        sb.append("And this line too").append("\n");   // and this
        sb.append("a\t'b\tb\tb'\t'c'").append("\n");  // single quoted elements
        CSVReader c = new CSVReader(new StringReader(sb.toString()), '\t', '\'', '?', 2);
    
        String[] nextLine = c.readNext();
    
        assertEquals(3, nextLine.length);
    
        assertEquals("a", nextLine[0]);
        assertEquals("b\tb\tb", nextLine[1]);
        assertEquals("c", nextLine[2]);
    }
    
  2. 如果这不起作用,请从input.txt发布一些行。当我点击链接时,它会带我到某个网站试图向我推销一个Dropbox克隆。