逐行读取文件并存储不同的变量

时间:2016-03-05 07:07:01

标签: c++ readfile

我的文本文件如下所示:

    int a;
    int b;
    string c;
    string d;
    string e;
    int f;
    char g;
    string h;

有八列,由'标签'分隔,除了名字和姓氏用空格分隔。

我必须有八种不同类型的变量。

std::ifstream infile("text.txt");
int a;
int b;
string c;
string d;
string e;
int f;
char g;
string h;


while(infile>>a>>b>>c>>d>>e>>f>>g>>h)
{
    cout <<"C is: "<<c<<endl;   // just to see if the loop is working.

}

我需要逐行读取文件并cout每行a a,b,c,d,e,f。 我还需要这些变量供以后使用。

所以,我试过这个:

while(getline(infield, s)):

我不需要数组和向量来存储这些变量,我有一个链接结构。现在,我只需要一种方法来读取文件并将这些字符串和整数存储到变量中。 但它没有用,哈哈。不知道为什么。我也想过使用getline,就像这样:

{{1}}

但是,这不仅仅是给了我一条大胖线,所有的弦乐和整数都被打碎了。

1 个答案:

答案 0 :(得分:2)

在我的机器上进行测试时,您的方法完全符合您的要求,除非它会在第三个条目停止:

3     97    Peter Warrington    18:26   29  M   New haven

这是因为New haven中的空格,因为它无法在下一次迭代中被复制到整数字段a中,因此会失败。如果你想保留这个结构,也许可以用下划线代替空格。否则,可以使用std::regex库逐行解析它。

例如,更改要通过下划线而不是空格分隔的位置字符串会导致找到所有15个条目。要将下划线更改回空格,我们可以使用std::replace,因此while循环的主体看起来很简单:

std::cout <<a<<" "<<b<<" "<<c<<" "<<d<<" "<<e<<" "<<f<<" "<<g<<" ";
std::replace( h.begin(), h.end(), '_', ' ' );
std::cout<<h<<"\n";

(请务必加入algorithm

我们现在已经打印了所有的内容!

要直接回答您的原始问题,我猜测该文件不存在。

std::ifstream infile("text.txt");
if(!infile.is_open()) {
     std::cout<<"Couldn't find file";
     return 0;
}
// ..