当前位置: 首页 > 知识库问答 >
问题:

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

勾起运
2023-03-14

好的,我有一个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库。

我需要从行“Detail”中读取,但是我不知道它是哪一行,因为它前面可能有未定义的行数。摘要从第13行开始,但我知道如何使用它。

有没有一个简单的模式,让opencsv找到“细节”行并从那里开始?或者我需要以某种方式计算详细信息之前的行并将其作为参数传递到OPENCSV中吗?

共有1个答案

南门鸿哲
2023-03-14

由于将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());

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

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

这是一个现场演示

 类似资料:
  • 问题内容: 我已经通过FCM在我的两个相关应用程序中成功实现了推送通知,同时尝试实现一些逻辑以在接收到通知时增加徽章编号。 我意识到完全没有调用委托方法,因为我没有得到任何印刷品,但是我确实从和获得印刷品。因此,设置在没有任何效果,但在设置它一样。 应该调用文档后的内容,但是通知到达时我永远不会从中得到打印结果。 我尝试注释掉整个方法,并且通知仍在传递。 为什么会这样呢?我想我不太了解在此设置中谁

  • 我对java librairie OpenCSV有问题。我没有读完我的CSV文件的所有行,我只读了第二行,我不知道为什么... 我的CSV文件: 我使用OpenCSV创建一个android列表,只有“Julie”“Julie”这一行被添加了3次...

  • 我有一个相当简单的映射器 我的域类: 我的DTO类: 我在mvn干净安装上收到的错误: [错误]/C:/code报告/work/github/symphony票证/src/main/java/com/ticket/mappers/TicketLocationDetailsMapper。java:[33,48]结果类型TicketLocationDetails中的未知属性“locationId”。你

  • 知识词库 1.知识词库类型 爱客服知识库系统支持多种知识词库,包括同义词库、敏感词库、专业词库、变量词库等,支持用户高度自定义自身词库,从而完善机器人问答能力,词库类型如下: 同义词库:同义词是用于多义词、同义词的优先识别,例如:订单、定单,同义词既可以是日常包含的同义词,也可以是易识别错的同音词 敏感词库:敏感词库的设立是用于将返回给用户的答案进行过滤,敏感词库中的词语将在最后的会话中进行过了,

  • 我正在编写一个Java应用程序,它使用Spring Cloud Stream从输入RabbitMQ队列读取消息,处理消息,然后将新消息写入输出RabbitMQ交换。当输入队列名称在编译时已知时,这将非常有效。 我现在有一个新的需求,即应用程序需要支持在运行时发现新的RabbitMQ队列,然后将那些新队列用于输入(从新队列中读取消息)。通过RabbitMQ中的REST API获取队列列表是很简单的,