我有一个制表符分隔的文本文件,我想使用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);
答案 0 :(得分:0)
在您的数据上加上引号 - 这是来自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]);
}
如果这不起作用,请从input.txt发布一些行。当我点击链接时,它会带我到某个网站试图向我推销一个Dropbox克隆。