【问题标题】:Searching and storing values from CSV从 CSV 搜索和存储值
【发布时间】:2018-08-02 09:48:17
【问题描述】:

我是一名 java 初学者,想学习如何以易于操作的方式读取文件和存储数据。

我有一个非常大的 csv 文件(18000 行)。数据代表利口酒店销售的所有不同饮料的分类。它由 16 列组成,标题为“文章编号、名称、生产商、酒精量等。这些列由“\t”分隔。

我现在想在此文件中进行一些搜索,以查找瑞典生产的产品数量以及查找最昂贵的利口酒/升等信息。

因为我真的想学习如何编程,而不仅仅是找到答案,所以我不在这里寻找任何确切的代码。相反,我正在寻找这背后的伪代码以及在处理大量数据时的一种良好思维方式以及最适合某项任务的数据结构。

让我们以“有多少产品来自瑞典”为例。 由于数据由字符串、整数和浮点数组成,我无法将所有内容都放在一个列表中。存储它以便以后可以操纵它的最佳方法是什么?或者我可以在解析后立即找到它,也许我根本不需要存储它?

【问题讨论】:

  • 当您事先知道您的问题时,您不必存储所有数据。只需逐行读取文件,拆分每一行并计算所需的列。但是如果你想操作数据,那么你需要存储所有的行。

标签: java csv data-manipulation


【解决方案1】:

如果你有 csv 文件,那么你可以使用数据库来存储这些数据。 你通过使用这个link.来阅读java中的csv

利用 ORM 框架,如 Hibernate 与 Spring 应用程序一起使用。使用此link 创建应用程序

通过使用它,您可以创建查询来获取诸如“瑞典有多少产品”之类的数据,并利用 Collection 框架。这个link 在同一应用程序中使用 HQL 查询。

创建 JSP 页面以在 UI 上显示结果。

对不起我的英语。

【讨论】:

    【解决方案2】:

    您似乎正在为您的 CSV 文件寻找内存中的 SQL 引擎。我建议使用CQEngine,它在Java 集合框架之上提供索引视图以及类似SQL 的查询。

    您基本上将 Java 集合视为数据库表。假设每个 CSV 行都映射到某个 POJO 类,例如 Beverage

    IndexedCollection<Beverage> table = new ConcurrentIndexedCollection<Beverage>();
    table.addIndex(NavigableIndex.onAttribute(Beverage.BEVERAGE_ID));
    table.add(new Beverage(...));
    table.add(new Beverage(...));
    table.add(new Beverage(...));
    

    您现在需要做的是读取 CSV 文件并将其加载到 IndexedCollection 中,然后在某些字段上建立适当的索引。之后,您可以像通常的 SQL 数据库一样查询该表。最后,将集合反序列化为新的 CSV 文件(如果您进行了任何修改)。

    【讨论】:

      【解决方案3】:

      如果您是 Java 和一般编程的新手,我建议您使用一个库来帮助您查看和使用数据,而无需进入数据库和学习 SQL。我过去使用过的一个是 Commons CSV。

      https://commons.apache.org/proper/commons-csv/user-guide.html#Parsing_files

      它可以让您轻松地将整个 CSV 文件解析为 CSVRecord 对象。例如:

      Reader in = new FileReader("path/to/file.csv");
      Iterable<CSVRecord> records = CSVFormat.EXCEL.parse(in);
      for (CSVRecord record : records) {
      String lastName = record.get("Last Name");
      String firstName = record.get("First Name");
      } 
      

      【讨论】:

      • 这很好!似乎是一个很好的开始方式,因为我还是新手。
      • 这是一个很棒的图书馆。很好,直截了当。我建议将它与 Majid 的方法结合使用。创建一个 POJO 来存储字段并将记录组合​​到 List 中。这样您就可以使用命名良好的方法轻松调用数据,例如 .getProducer() 或 .getAlcoholPercentage()
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-01
      • 2023-04-08
      • 2011-12-27
      • 1970-01-01
      • 2017-12-23
      • 2017-10-25
      相关资源
      最近更新 更多