C++ 从C+中带引号的CSV/文本文件读取+;

C++ 从C+中带引号的CSV/文本文件读取+;,c++,csv,double-quotes,C++,Csv,Double Quotes,我有一个从文本文件(CSV)中读取行的工作函数,但我需要修改它以能够读取双引号(我需要这些双引号,因为我的一些字符串值包含逗号,所以我使用双引号表示读取函数应该忽略双引号之间的逗号)。是否有一种相对简单的方法来修改下面的函数,以适应某些字段将用双引号括起来的事实 其他一些注意事项: 如果有帮助的话,我可以很容易地将所有字段都用双引号括起来(而不是像目前的情况那样,只使用字符串) 我还可以很容易地将分隔符从逗号改为其他字符(如管道),但如果很容易的话,我希望继续使用CSV 以下是我目前的职能: v

我有一个从文本文件(CSV)中读取行的工作函数,但我需要修改它以能够读取双引号(我需要这些双引号,因为我的一些字符串值包含逗号,所以我使用双引号表示读取函数应该忽略双引号之间的逗号)。是否有一种相对简单的方法来修改下面的函数,以适应某些字段将用双引号括起来的事实

其他一些注意事项:

  • 如果有帮助的话,我可以很容易地将所有字段都用双引号括起来(而不是像目前的情况那样,只使用字符串)

  • 我还可以很容易地将分隔符从逗号改为其他字符(如管道),但如果很容易的话,我希望继续使用CSV

  • 以下是我目前的职能:

    void ReadLoanData(vector<ModelLoanData>& mLoan, int dealnum) {
    
    // Variable declarations
    fstream InputFile;
    string CurFileName;
    ostringstream s1;
    string CurLineContents;
    int LineCounter;
    char * cstr;
    vector<string> currow;
    const char * delim = ",";
    
    s1 << "ModelLoanData" << dealnum << ".csv";
    CurFileName = s1.str();
    InputFile.open(CurFileName, ios::in);
    
    if (InputFile.is_open()) {
    
        LineCounter = 1;
        while (InputFile.good()) {
            // Grab the line
            while (getline (InputFile, CurLineContents)) {
    
                // Create a c-style string so we can tokenize
                cstr = new char [CurLineContents.length()+1];
                strcpy (cstr, CurLineContents.c_str());
    
                // Need to resolve the "blank" token issue (strtok vs. strsep)
                currow = split(cstr,delim);
    
                // Assign the values to our model loan data object
                mLoan[LineCounter] = AssignLoanData(currow);
    
                delete[] cstr;
                ++LineCounter;
            }   
        }
        // Close the input file
        InputFile.close();
    }
    else
        cout << "Error: File Did Not Open" << endl;
    
    void readloanadata(向量&mLoan,整数dealnum){
    //变量声明
    fstream输入文件;
    字符串文件名;
    ostringstream s1;
    字符串内容;
    内线计数器;
    char*cstr;
    矢量电流;
    常量字符*delim=“,”;
    
    s1以下内容适用于给定的输入:
    a,b,c,“a,b,c”,“a,b”,d,e,f

    #include <iostream>
    #include <sstream>
    #include <string>
    using namespace std;
    
    int main() {
        std::string line;
        while(std::getline(cin, line, '"')) {
            std::stringstream ss(line);
            while(std::getline(ss, line, ',')) {
                cout << line << endl;
            }
            if(std::getline(cin, line, '"')) {
                cout << line;
            }
        }
    }
    
    #包括
    #包括
    #包括
    使用名称空间std;
    int main(){
    std::字符串行;
    while(std::getline(cin,line,“,”)){
    std::stringstream ss(线路);
    while(std::getline(ss,line,,')){
    
    不能先用引号分析数据。我可以举一个带引号的行的例子吗?0,1,1.000,LNMLT06C01-1.000001A1,“北角购物中心”例如,5.74359.2006年,85,35,35,-999275,5,5,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,826E+07,2.722289E+077510764,1.971213E+07