Я пытаюсь прочитать в файле CSV, который содержит строки из 3 человек / пациентов, где столбец 1 - это идентификатор пользователя, столбец 2 - это имя, столбец 3 - это имя, столбец 4 - это страховка, а столбец 5 - это версия, которая выглядит что-то вроде ниже.
Редактировать: Извинения, я просто скопировал / вставил мою таблицу CSV сюда, чтобы раньше она не показывала запятые. Разве это не будет выглядеть как-то ниже? Джон ниже также указал, что после версии нет запятых, и это, похоже, решило проблему! Большое спасибо, Джон! (пытаясь понять, как я могу принять ваш ответ :))
nm92,Nate,Matthews,Aetna,1
sc91,Steve,Combs,Cigna,2
ml94,Morgan,Lands,BCBS,3
Я пытаюсь использовать getline () внутри цикла для чтения всего, и он отлично работает для первой итерации, но getline (), кажется, заставляет его пропустить значение на следующих итерациях. Любая идея, как я могу решить это?
Я также не уверен, почему вывод выглядит следующим образом, потому что я не вижу, где в коде печатаются строки w / "sc91" и "ml94". Вот как выглядит вывод текущего кода.
userid is: nm92
fname is: Nate
lname is: Matthews
insurance is: Aetna
version is: 1
sc91
userid is: Steve
fname is: Combs
lname is: Cigna
insurance is: 2
ml94
version is: Morgan
userid is: Lands
fname is: BCBS
lname is: 3
insurance is:
version is:
Я провел множество исследований различий между getline () и оператором >> stream, но большинство материалов getline (), похоже, вращаются вокруг получения ввода из cin, а не чтения из файла, как здесь, поэтому Я думаю, что что-то происходит с / getline () и как он читает файл, что я не понимаю. К сожалению, когда я попробовал >> operator, это заставляет меня использовать функцию strtok (), и я много боролся со строками c и присваивал их массиву строк C ++.
#include <iostream>
#include <string> // for strings
#include <cstring> // for strtok()
#include <fstream> // for file streams
using namespace std;
struct enrollee
{
string userid = "";
string fname = "";
string lname = "";
string insurance = "";
string version = "";
};
int main()
{
const int ENROLL_SIZE = 1000; // used const instead of #define since the performance diff is negligible,
const int numCols = 5; // while const allows for greater utility/debugging bc it is known to the compiler ,
// while #define is a preprocessor directive
ifstream inputFile; // create input file stream for reading only
struct enrollee enrollArray[ENROLL_SIZE]; // array of structs to store each enrollee and their respective data
int arrayPos = 0;
// open the input file to read
inputFile.open("input.csv");
// read the file until we reach the end
while(!inputFile.eof())
{
//string inputBuffer; // buffer to store input, which will hold an entire excel row w/ cells delimited by commas
// must be a c string since strtok() only takes c string as input
string tokensArray[numCols];
string userid = "";
string fname = "";
string lname = "";
string insurance = "";
string sversion = "";
//int version = -1;
//getline(inputFile,inputBuffer,',');
//cout << inputBuffer << endl;
getline(inputFile,userid,',');
getline(inputFile,fname,',');
getline(inputFile,lname,',');
getline(inputFile,insurance,',');
getline(inputFile,sversion,',');
enrollArray[0].userid = userid;
enrollArray[0].fname = fname;
enrollArray[0].lname = lname;
enrollArray[0].insurance = insurance;
enrollArray[0].version = sversion;
cout << "userid is: " << enrollArray[0].userid << endl;
cout << "fname is: " << enrollArray[0].fname << endl;
cout << "lname is: " << enrollArray[0].lname << endl;
cout << "insurance is: " << enrollArray[0].insurance << endl;
cout << "version is: " << enrollArray[0].version << endl;
}
}