如何在 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