我想將我的一箇舊程序從C移植到C++。我無法提供代碼來完成解析文件的每一行(用分號分隔)的任務。我知道要將每行讀入一個字符串,我應該使用std :: getline()並且還讀取涉及stringstream的解決方案。但是,就解析行爲單個變量而言,我已經失去了。以前,在C中,我使用了sscanf()。這是我的舊代碼...如何在C++中「sscanf」?
void loadListFromFile(const char *fileName, StudentRecordPtr *studentList) {
FILE *fp; // Input file pointer
StudentRecord student; // Current student record being processed
char data[255]; // Data buffer for reading line of text file
// IF file can be opened for reading
if ((fp = fopen(fileName, "r")) != NULL) {
// read line of data from file into buffer 'data'
while (fgets(data, sizeof(data), fp) != NULL) {
// scan data buffer for valid student record
// IF valid student record found in buffer
if (sscanf(data, "%30[^,], %d, %d, %d, %d, %d, %d, %d", student.fullName, &student.scoreQuiz1,
&student.scoreQuiz2, &student.scoreQuiz3, &student.scoreQuiz4, &student.scoreMidOne,
&student.scoreMidTwo, &student.scoreFinal) == 8) {
// Process the current student record into the student record list
processStudentToList(student, studentList);
}
}
}
else {
// Display error
puts("**********************************************************************");
puts("Could not open student record file.");
puts("**********************************************************************");
}
// Close file
fclose(fp);
}
而我目前的代碼,因爲我在這個問題上停滯不前。
void Database::loadFromFile(const string filename) {
ifstream file(filename);
string data;
if (file.is_open()) {
cout << "Sucessfully loaded " << filename << ".\n" << endl;
while (getline(file, data)) {
//
}
}
else {
cerr << "Error opening input file.\n" << endl;
}
}
我非常感謝C++的任何洞察力等同於這種方法。
編輯:這被標記爲重複的帖子不回答我的問題。該解決方案不考慮分號(或任何字符)分隔的字符串。
我已閱讀此解決方案,但不確定如何使用此字符串由分號和非空格分隔。 – Cam
哦,我現在看到了問題。好吧,讓我試試幾件事:) – ddeunagomez
@Cam也許這就是你要找的東西? http://stackoverflow.com/questions/11719538/how-to-use-stringstream-to-separate-comma-separated-strings – yano