高效读取带有可选列的 CSV 文件
Efficiently read CSV file with optional columns
我正在尝试编写一个在 CSV 文件中读取的程序(无需担心转义任何东西,它的格式严格,没有引号),但任何值为 0 的数字项都留空。因此,正常行如下所示:
12,字符串1,字符串2,3,,,字符串3,4.5
而不是
12,字符串1,字符串2,3,0,0,字符串3,4.5
我有一些使用向量的工作代码,但它太慢了。
int main(int argc, char** argv)
{
string filename("path\to\file.csv");
string outname("path\to\outfile.csv");
ifstream infile(filename.c_str());
if(!infile)
{
cerr << "Couldn't open file " << filename.c_str();
return 1;
}
vector<vector<string>> records;
string line;
while( getline(infile, line) )
{
vector<string> row;
string item;
istringstream ss(line);
while(getline(ss, item, ','))
{
row.push_back(item);
}
records.push_back(row);
}
return 0;
}
是否可以重载运算符<<的 ostream 类似于 如何使用C++读取.csv文件并以另一种形式输出? 何时字段可以为空?这会提高性能吗?
或者我还能做些什么来让它运行得更快吗?谢谢
从文件中读取字符串数据所花费的时间大于解析它所花费的时间。 在分析字符串时,您不会节省大量时间。
为了使程序运行得更快,请将更大的"块"读入内存;每次读取获得更多数据。 内存映射文件的研究。
处理此问题以获得更好性能的一种替代方法是将整个文件读入缓冲区。然后遍历缓冲区并设置指向值开始位置的指针,如果发现 或行尾放入 \0。
例如 https://code.google.com/p/csv-routine/
相关文章:
- 正在将csv文件读取为双精度矢量
- 如何选择在 csv 文件中输出的位置
- 有没有办法在不使用 getline() 的情况下从.csv文件中读取?
- 无法读取C++中的 CSV 文件
- 流:CSV 文件中的换行符
- 如何正确格式化csv文件?
- 正在分析CSV文件-C++
- 如何获取组件和搜索 CSV 文件
- C++ 中的 CSV 文件管理(特别是设置标头和每个标头将分别具有的值)
- 无法逐行读取.csv文件
- 非常快速地阅读 CSV 文件
- 该程序将.csv文件中的一系列单词放入数组中,然后随机生成句子.但它不起作用
- CSV文件之间的差异,使用getline()产生不同的结果
- 将 CSV 文件中的双倍值C++到矢量中
- C++ 将 CSV 文件的列写入向量
- 使用getline读取.csv文件时出现问题
- CSV文件未从缓冲区获取数据
- 错误的值是使用c++从CSV文件数据写入数组
- 将csv文件加载到MySQL C++中
- 读取C++中的大型CSV文件(~4GB)