如何在 C++ 中正确读取 CSV 文件中的数据
How to properly read data from CSV file in C++
我的输入文件 userinfo.csv 包含用户名和密码,格式如下所示 用户名,密码。
frierodablerbyo,Rey4gLmhM
pinkyandluluxo,7$J@XKu[
lifeincolorft,cmps9ufe
spirginti8z,95tcvbku
我想将所有用户名和密码存储在
vector<string> usernames;
vector<string> passwords;
我从来没有用过 C++ 来处理文件,只用过 python
EDIT1
#include <bits/stdc++.h>
using namespace std;
int main()
{
fstream myfile;
myfile.open("small.csv");
vector<string> data;
vector<string> usernames, passwords;
while(myfile.good()){
string word;
getline(myfile, word, ',');
data.push_back(word);
}
for(int i=0; i<8; i=i+2){
usernames.push_back(data[i]);
}
for(int i=1; i<8; i=i+2){
passwords.push_back(data[i]);
}
}
我知道上面的代码不好,我该如何改进它,因为我的实际 csv 文件包含 20000 行。
你可以试试这样的
std::vector <std::pair<std::string, std::string>> vec_credentials;
std::ifstream is("credentials.csv");
if(is.is_open())
{
std::string line;
while(getline(is, line))
{
std::stringstream ss(line);
std::string token;
std::vector <std::string> temp;
// this is good if in the future you will have more than 2 columns
while(getline(ss, token, ','))
{
temp.push_back(token);
}
vec_credentials.push_back(std::make_pair(temp[0], temp[1]));
}
is.close();
}
已经发布的代码片段很好,但请记住 CSV 分隔符是区域设置相关的,例如。 G。对于美国它是一个',',对于德国它会是';'等等。此外,如果您的 CSV 中的文本部分可能包含这些字符之一,则必须检查左引号和右引号。
最简单的做法是使用现成的库来解析 CSV,例如 https://github.com/d99kris/rapidcsv。
我的输入文件 userinfo.csv 包含用户名和密码,格式如下所示 用户名,密码。
frierodablerbyo,Rey4gLmhM
pinkyandluluxo,7$J@XKu[
lifeincolorft,cmps9ufe
spirginti8z,95tcvbku
我想将所有用户名和密码存储在
vector<string> usernames;
vector<string> passwords;
我从来没有用过 C++ 来处理文件,只用过 python
EDIT1
#include <bits/stdc++.h>
using namespace std;
int main()
{
fstream myfile;
myfile.open("small.csv");
vector<string> data;
vector<string> usernames, passwords;
while(myfile.good()){
string word;
getline(myfile, word, ',');
data.push_back(word);
}
for(int i=0; i<8; i=i+2){
usernames.push_back(data[i]);
}
for(int i=1; i<8; i=i+2){
passwords.push_back(data[i]);
}
}
我知道上面的代码不好,我该如何改进它,因为我的实际 csv 文件包含 20000 行。
你可以试试这样的
std::vector <std::pair<std::string, std::string>> vec_credentials;
std::ifstream is("credentials.csv");
if(is.is_open())
{
std::string line;
while(getline(is, line))
{
std::stringstream ss(line);
std::string token;
std::vector <std::string> temp;
// this is good if in the future you will have more than 2 columns
while(getline(ss, token, ','))
{
temp.push_back(token);
}
vec_credentials.push_back(std::make_pair(temp[0], temp[1]));
}
is.close();
}
已经发布的代码片段很好,但请记住 CSV 分隔符是区域设置相关的,例如。 G。对于美国它是一个',',对于德国它会是';'等等。此外,如果您的 CSV 中的文本部分可能包含这些字符之一,则必须检查左引号和右引号。
最简单的做法是使用现成的库来解析 CSV,例如 https://github.com/d99kris/rapidcsv。