opencsv从未知行读取但已知单词?

时间:2018-07-25 08:36:00

标签: java csv opencsv

好的,我有一个csv文件:

Summary
    heading1,heading2,heading3
    value1,value2,value2
    value1,value2,value2
    value1,value2,value2
    value1,value2,value2
Detail
    heading11,heading12,heading13
    value1,value2,value2
    value1,value2,value2
    value1,value2,value2
    value1,value2,value2

我正在使用com.opencsv.CSVReader库。

我需要从“详细信息”行中读取内容,但是我不知道它是哪一行,因为在它之前可能存在未定义的行数。摘要始于
第13行,但我知道该如何处理。

opencsv是否有一种简单的模式来查找“详细信息”行并从此处开始? 还是我需要以某种方式计数Detail之前的行并将其作为参数传递给OPENCSV?

1 个答案:

答案 0 :(得分:1)

由于将CSV分为几部分不是普遍的要求,并且库不一定支持,因此您应该找到自己感兴趣的行的起点并提取它们。一种方法可能是:

BufferedReader b = new BufferedReader(new FileReader(source));
String line = b.readLine();
StringBuilder build = new StringBuilder();
while(line != null && !line.equals("Detail")){
    line = b.readLine();
}
line = b.readLine();
while(line != null){
    build.append(line);
    build.append('\n');
    line = b.readLine();
}
System.out.println(build.toString());
Reader toBeParsed = new StringReader(build.toString());

基本上会读取文件,直到找到与Detail部分匹配的行,然后将所有剩余的行添加到String中。从该字符串中使用一个阅读器,该阅读器可以输入到CSVReader中。

我假设必须考虑所有剩余的行(如果不是这种情况,请考虑与另一个字符串匹配以停止该行),并且开始的行正好是“ Detail”(您可以使用正则表达式更灵活的方法)

Here is a live demo