gpt4 book ai didi

c++ - 在 C++ 中获取文本 CSV 文件中的字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:54:38 27 4
gpt4 key购买 nike

我有一个这样的大型 CSV(~75 MB):

1,3,4.1,5.4
-2,-4,-0.1,-11.3
...

我用这段代码存储我的数据(C 风格):

#include <iostream>
#include <cstdio>
#include <vector>

int main()
{
int s;
int x;
float y;
double z;

std::vector<int> t;
std::vector<int> u;
std::vector<float> v;
std::vector<double> w;

if (std::FILE *f = std::fopen("data.csv", "r")) {
while (std::fscanf(f, "%d,%d,%f,%lf", &s, &x, &y, &z) == 4) {
t.push_back(s);
u.push_back(x);
v.push_back(y);
w.push_back(z);
}
std::fclose(f);
}

return 0;
}

我花了这个大的 CSV (~75MB):

real        0m3.195s
user 0m3.032s
sys 0m0.148s

C 风格的速度太快了!

此代码的另一种方式(C++ 风格):

#include <iostream>
#include <fstream>
#include <vector>

int main()
{
char c; // to eat the commas. Not eat spaces :-(
int s;
int x;
float y;
double z;

std::vector<int> t;
std::vector<int> u;
std::vector<float> v;
std::vector<double> w;

std::ifstream file("data.csv");
while (file >> s >> c >> x >> c >> y >> c >> z) {
t.push_back(s);
u.push_back(x);
v.push_back(y);
w.push_back(z);
}

return 0;
}

我花了这个大的 CSV (~75MB):

real        0m4.766s
user 0m4.660s
sys 0m0.088s

C 风格更快!

我想读取第一列(或第二列)中的字符串并放入std::string 的 vector 中。

我尝试了很多可能性(char *、iostream 等),但我无法以快速而优雅的方式完成。

大型 CSV 文件类型的示例(是否有一种比另一种更容易阅读?):

a.csv:

hi,3,4.1,5.4
hello,-4,-0.1,-11.3
...

b.csv:

hi 3 4.1 5.4
hello -4 -0.1 -11.3
...

c.csv:

"hi",3,4.1,5.4
"hello",-4,-0.1,-11.3
...

d.csv:

"hi" 3 4.1 5.4
"hello" -4 -0.1 -11.3
...

非常感谢您的帮助! :)

最佳答案

所以您正在寻找一种更有效的方法来做到这一点?那么,您可以做的一件事就是考虑您是否真的需要 vector 。根据您的使用情况,使用某种链表结构可能会更好。

关于c++ - 在 C++ 中获取文本 CSV 文件中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21785538/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com