У меня есть рабочая функция, которая читает строки из текстового файла (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;
}