gpt4 book ai didi

c++ - 如何处理 csv 文件输入流,我需要将文件每一行中的数据划分为 6 个不同的变量(字符串和 int 类型)

转载 作者:行者123 更新时间:2023-11-28 05:30:34 25 4
gpt4 key购买 nike

我有一个 CSV 文件,其中的数据以逗号分隔。该文件如下所示:

1998,MALE,United States,45,566
1993,FEMALE,......

我将有一个 ROW 类的 vector ,数据文件中的每一行都将存储在那里。我的 ROW 有 5 个变量,我需要将它们分开,以便我可以使用 set 函数来 row.set(year,sex, country, score, result)

知道如何读入数据吗?

据我所知,我应该尽量避免使用 getline。我不想将 string 转换为 int

有什么想法吗?

最佳答案

我可能会从一个小运算符开始,以验证(否则忽略)字符串的存在,如下所示:

std::istream &operator>>(std::istream &is, char const *pat) {

char ch;
while (isspace(static_cast<unsigned char>(is.peek())))
is.get(ch);

while (*pat && is && *pat == is.peek() && is.get(ch)) {
++pat;
}

// if we didn't reach the end of the pattern, matching failed (mismatch, premature EOF, etc.)
if (*pat) {
is.setstate(std::ios::failbit);
}

return is;
}

我们可以使用它来验证逗号在需要的地方是否存在,否则可以相当轻松地忽略它们。然后我会为 ROW 类型重载 operator>> 以适本地读取数据:

class ROW { 
int year;
enum { MALE, FEMALE} sex;
std::string country;
int foo;
int bar;

friend std::istream &operator>>(std::istream &is, ROW &r) {
is >> r.year >> ",";
std::string s;
is >> s >> ",";
if (s == "MALE")
r.sex = MALE;
else if (s == "FEMALE")
r.sex = FEMALE;
else
error("bad sex");
std::getline(is, r.country, ',');
return is >> r.foo >> "," >> r.bar;
}
};

从那里,我们可以相当直接地创建一个 vector :

// Open the file
std::ifstream in("data.txt");

// Read all the data
std::vector<ROW> rows { std::istream_iterator<ROW>(in), {}};

关于c++ - 如何处理 csv 文件输入流,我需要将文件每一行中的数据划分为 6 个不同的变量(字符串和 int 类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39649244/

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