首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取/排序大型.CSV文件

读取/排序大型.CSV文件
EN

Stack Overflow用户
提问于 2016-02-16 02:51:43
回答 1查看 705关注 0票数 1

因此,从概念上讲,我在一个文件中读取了大约200万行数据。我希望稍后对数据进行排序、存储和应用其他功能。

  1. 有人告诉我这被称为“桶”,但我不清楚这是预定义的数据类型还是用户定义的数据类型。所以我很好奇一个链表或者数组或者其他的组合是否合适?
  2. 我需要担心文件的大小吗?大多数编译器是否能够同时处理所有这些问题,还是我需要先对数据进行分区(即将数据划分为每个桶,存储在自己的文件中,然后使用另一段代码等等)?
  3. 如果需要#2,那么C++是否具有每次执行时保存多个文件的功能?意思是: a)创建bucket1 file.txt;b)填充bucket1文件;关闭bucket1文件;d)创建bucket2文件;
EN

回答 1

Stack Overflow用户

发布于 2016-02-16 03:00:00

好的,我从你的帖子中得知你是用C++写这篇文章的。但是,除了排序要求之外,细节还有点稀疏。但你在整理什么?所有字段都解释为文本吗?是一些数字吗?有多把钥匙吗?

如果您不完全需要用C++编写它,并且您是在Linux上,那么只需调用/bin/sort来进行排序。这看上去像是一种“条条框框”,但像Talend这样的商业软件甚至求助于此。

但是,如果您必须用C++编写新代码,那么以下是我的建议:

1) CSV文件是否已转义?换句话说,嵌入式引号和分隔符是否需要特殊处理?你得先想清楚。

2)看看这个:http://mybyteofcode.blogspot.com/2010/02/parse-csv-file-with-boost-tokenizer-in.html

3)扫描输入的简单表示为vector<vector<string> >。但它很难处理。相反,在vector<string>周围包装一个类,生成指向这些类的指针向量,每一行输入一个,然后对它们进行排序。

4)现在你应该能够在内存中对2M“中等”行进行排序。只需使用std::排序。但是,为了全面的通用性,您需要考虑,如果它不适合内存呢?对此最常见的解决方法是一次对块进行排序,将结果写入磁盘,然后使用优先级队列或类似的结构进行合并。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35422804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档