嗨,我需要读一个看起来像这样的文件......
1|Toy Story (1995)|Animation|Children's|Comedy
2|Jumanji (1995)|Adventure|Children's|Fantasy
3|Grumpier Old Men (1995)|Comedy|Romance
4|Waiting to Exhale (1995)|Comedy|Drama
5|Father of the Bride Part II (1995)|Comedy
6|Heat (1995)|Action|Crime|Thriller
7|Sabrina (1995)|Comedy|Romance
8|Tom and Huck (1995)|Adventure|Children's
9|Sudden Death (1995)|Action
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,每部电影的类型可以从1种变化到很多......我想知道在每行结束之前我怎么能读到这些?
我现在正在做:
void readingenre(string filename,int **g)
{
ifstream myfile(filename);
cout << "reading file "+filename << endl;
if(myfile.is_open())
{
string item;
string name;
string type;
while(!myfile.eof())
{
getline(myfile,item,'|');
//cout <<item<< "\t";
getline(myfile,name,'|');
while(getline(myfile,type,'|'))
{
cout<<type<<endl;
}
getline(myfile,type,'\n');
}
myfile.close();
cout << "reading genre file finished" <<endl;
}
}
Run Code Online (Sandbox Code Playgroud)
结果不是我想要的......它看起来像:
Animation
Children's
Comedy
2
Jumanji (1995)
Adventure
Children's
Fantasy
3
Grumpier Old Men (1995)
Comedy
Romance
Run Code Online (Sandbox Code Playgroud)
所以它并没有停在每一行的末尾......我怎么能解决这个问题呢?
尝试一次解析这个输入文件一个字段是错误的方法。
这是一个文本文件。文本文件由以换行符终止的行组成。getline()就其本身而言,它是您用来读取带有换行符终止行的文本文件的内容:
while (std::getline(myfile, line))
Run Code Online (Sandbox Code Playgroud)
并不是:
while(!myfile.eof())
Run Code Online (Sandbox Code Playgroud)
所以现在你有一个循环来读取每一行文本。Astd::istringstream可以在循环内部构造,包含刚刚读取的行:
std::istringstream iline(line);
Run Code Online (Sandbox Code Playgroud)
然后你可以使用std::getline(), 与std::istringstream可选的分隔符覆盖'|'来读取行中的每个字段。
| 归档时间: |
|
| 查看次数: |
30448 次 |
| 最近记录: |