我希望我能在这里找到一些帮助。我有一个下周到期的作业,其中涉及从 txt 文件中读取一堆数据到一个数组中,然后打印出结果。数据格式如下:
"麦克白","威廉莎士比亚","41.04","161","23","978-88-5985-004-5"
“圣诞颂歌”、“查尔斯狄更斯”、“98.74”、“167”、“547”、“978-26-2885-780-7”。.
.
.
每行有六条我需要存储以备后用的信息。我应该编写代码来计算我们拥有的文本行数,以便创建正确大小的动态数组。我已经覆盖了。我有 39 行条目。然后我应该创建一个函数来读取 txt 文件并将所有数据保存到我创建的数组中的相应对象中。
不知道用什么方法,这几天一直在找教程和解释。我在文件和解析方面的经验非常有限,如果我有点缺乏经验,请见谅。到目前为止,这是我的代码:
#include <fstream>
#include <iomanip>
#include <iostream>
#include <string>
using namespace std;
class Author
{
public:
private:
string fname, lname;
};
class Book
{
friend ofstream& operator<<(ofstream&, Book);
public:
Book();
private:
string bookName;
Author author;
double price;
int qtyOnHand;
int qtySold;
double revenue;
string ISBN;
};
Book :: Book()
{
}
int getLineNumber(ifstream &);
void parseData(ifstream &, Book []);
//void sortBookList(Book[], int, int);
int main()
{
int numberOfBooks;
//open the file from which to read the data
ifstream myFile;
myFile.open("Book List.txt");
//function to find out how many objects to create
numberOfBooks = getLineNumber(myFile);
//create an array with that many objects
Book *bptr;
bptr = new Book[numberOfBooks];
//function to read information from file into array of objects
parseData(myFile, bptr);
//loop to call sorting function and output function based on 4 different criteria
//close the file explicitly
return 0;
}
int getLineNumber(ifstream &myFile)
{
int counter = 0;
string myString;
while(!myFile.eof())
{
getline(myFile, myString);
counter++;
}
myFile.close();
counter --;
return counter;
}
void parseData(ifstream &myFile, Book bookPtr[])
{
}
所以,总结一下我的问题,我不明白如何将文本文件中的数据解析到我的数组中。非常感谢任何可以提供帮助的人!干杯。
编辑:我试过玩弄代码,我认为我朝着正确的方向迈出了一步,但我还是有点迷茫。这是我为 parseData 函数提供的内容。
void parseData(ifstream &myFile, Book bookPtr[])
{
string dummyLine;
string word, line;
myFile.open("Book List.txt");
getline(myFile, dummyLine);
string data[6];
while(!myFile.eof())
{
getline(myFile, line, '\n');
for (size_t i = 0; i < line.size(); ++i)
{
char c = line[i];
if(c == ',' || c == '\n')
{
if(!word.empty())
{
data[i] = word;
word.clear();
}
}
else
{
word += c;
}
}
if(!word.empty())
{
//cout << word << endl;
}
}
}