【问题标题】:Reading very large CSV and JSON files读取非常大的 CSV 和 JSON 文件
【发布时间】:2017-02-05 19:34:35
【问题描述】:

我目前正在用 C# 为游戏编写一个“搜索引擎”,我从中得到非常大的(3GB 甚至更多!).csv 和 .json(l) 文件,我需要解析它们,但它占用了非常大量的 RAM...有什么好的方法来解析它们(我需要将所有数据传输到数据库中)?

示例 csv:

id,station_id,commodity_id,supply,buy_price,sell_price,demand,collected_at
1,1,5,0,0,315,532,1486247405
2,1,6,0,0,6795,38,1486247405
3,1,7,0,0,527,318,1486247405

遗憾的是没有 json 示例,但它是一个保存数据的 OBJ 数组。

【问题讨论】:

  • 您能否提供csvjson 文件的简短示例?还有一些你已经拥有的代码。
  • @stackoverflow.com/users/283606/aleksandr-ivanov csv 的第一行是订单(根据文档,这个订单可能会改变!),其他行是数据:
  • id,station_id,commodity_id,supply,buy_price,sell_price,demand,collected_at 1,1,5,0,0,315,532,1486247405 2,1,6,0,0,6795,38,1486247405 3 ,1,7,0,0,527,318,1486247405
  • 您需要使用基于流的 API,您可以在其中读取单行或标记,解析它,然后丢弃它并读取下一个。例如 JSON.NET JsonTextReader.
  • 对于 csv 你可以使用StreamReader.ReadLine 然后自己解析。

标签: c# json csv memory


【解决方案1】:

我使用了 Microsoft.VisualBasic.FileIO.TextFieldParser,它对于 2 GB 的 .CSV 文件来说已经足够快了。

using (TextFieldParser sr = new TextFieldParser(datapath)
        {
            Delimiters = new string[1] { "," },
            HasFieldsEnclosedInQuotes = true;
        })
{
     string[] values = sr.ReadFields();
     while (values != null)
     {
      // ....
      values = sr.ReadFields();
     }
}

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 2019-04-30
    • 2011-11-11
    相关资源
    最近更新 更多