C++ 从csv文件读取重载运算符

C++ 从csv文件读取重载运算符,c++,operator-overloading,istream,C++,Operator Overloading,Istream,我有一个csv文件,其中包含如下数据:03/10/2016 09:10:10 PM,名称,类型 我加载了一些操作符,它们将日期作为整数(DD/MM/YY)读取,时间作为整数(HH:MM:SS)读取,将PM作为字符、名称和类型作为字符串读取。这是我的密码: 在我的时间课上: istream & operator >> (istream & is, Time & time) { char colon; is >> time.hour

我有一个csv文件,其中包含如下数据:
03/10/2016 09:10:10 PM,名称,类型

我加载了一些操作符,它们将日期作为整数(DD/MM/YY)读取,时间作为整数(HH:MM:SS)读取,将PM作为字符、名称和类型作为字符串读取。这是我的密码:

在我的时间课上:

istream & operator >> (istream & is, Time & time)

{
    char colon;
    is >> time.hour >> colon >> time.minute >> colon >> time.second >> time.PM;

    return is;
}
还有我的约会课

    istream & operator >> (istream & is, Date & date)

{
    char slash;
    is >> date.day >> slash >> date.month >> slash >> date.year;
    return is;
}
我在另一节课上阅读了我的文件,如下所示:

string line; //declaration
Show show; //declaration

while (!inFile.eof())
{
    inFile >> date;

    cout << "Date = " << date.getDay() << "/" << date.getMonth() << "/" << date.getYear()<< endl;

    inFile >> time;

    cout << "Time = " << time.getHour() << ":" << time.getMinute() << ":" << time.getSecond() << " " << time.getPM() << " " << endl;


    getline(inFile, line, ',');
    show.setName(line);

    cout << "Name = " << line << endl;

    getline(inFile, line, ',');
    show.setGenre(line);

    cout << "Genre = " << line << endl;

    showVector.push_back(show) //pushback the objects into a vector<Show> showVector
}

为什么要跳过PM中的M并将其分配给名称?

问题在于这一行没有使用足够的字符:

is >> time.hour >> colon >> time.minute >> colon >> time.second >> time.PM;
在运行该行之前,您的输入流包含
09:10:10 PM、名称、流派
。然后按如下方式读取字段:

"09" >> time.hour (int)
":"  >> colon (char)
"10" >> time.minute (int)
":"  >> colon (char)
"10" >> time.second (int)
"P"  >> time.PM (char)
读取这些字符后,剩下的流是
M,Name,Genre
getline()
调用从这个逗号的开头读取到下一个逗号,将字符串
存储在
Name

为了从流中删除完整的字符串“PM”,您需要读取两个字符。一种方法是读取并丢弃结尾的一个额外字符

is >> time.hour >> colon >> time.minute >> colon >> time.second >> time.PM >> colon;

问题是这一行没有使用足够的字符:

is >> time.hour >> colon >> time.minute >> colon >> time.second >> time.PM;
在运行该行之前,您的输入流包含
09:10:10 PM、名称、流派
。然后按如下方式读取字段:

"09" >> time.hour (int)
":"  >> colon (char)
"10" >> time.minute (int)
":"  >> colon (char)
"10" >> time.second (int)
"P"  >> time.PM (char)
读取这些字符后,剩下的流是
M,Name,Genre
getline()
调用从这个逗号的开头读取到下一个逗号,将字符串
存储在
Name

为了从流中删除完整的字符串“PM”,您需要读取两个字符。一种方法是读取并丢弃结尾的一个额外字符

is >> time.hour >> colon >> time.minute >> colon >> time.second >> time.PM >> colon;

ostream&operator>
——这是打字错误吗?如果是,你应该复制并粘贴你的实际代码,而不是从头开始键入。你应该显示你的时间类定义,但它看起来像你说的PM字段是一个字符。你不能读入2个字符。也许你应该把它做成一根绳子。保罗·麦肯齐-是的,对不起。修正了。发布时间的定义。这可能与
Time::PM
的类型有关。非主题:
,而(!infle.eof())
是您很快就会遇到的常见错误源。更多信息:
ostream&operator>
——这是打字错误吗?如果是,你应该复制并粘贴你的实际代码,而不是从头开始键入。你应该显示你的时间类定义,但它看起来像你说的PM字段是一个字符。你不能读入2个字符。也许你应该把它做成一根绳子。保罗·麦肯齐-是的,对不起。修正了。发布时间的定义。这可能与
Time::PM
的类型有关。非主题:
,而(!infle.eof())
是您很快就会遇到的常见错误源。详情如下: