2013-03-27 132 views
1

我有一个程序,它使用text_file来存储大量的数字。 当我必须加载这些数字时,我必须一次加载2500个数字。 我有一个while循环来一次又一次地加载它...多次读取txt

现在,问题发生在while循环我猜。

ifstream mfile("abc.txt", ifstream::out); 
if(mfile.is_open()) 
{ 
    getline(mfile, b); 
    char* ch = new char[b.length() + 1]; 
    strcpy(ch, b.c_str()); 
    result = atof(strtok (ch,";")); 
    while(i<125) 
    { 
     cout<< strtok (NULL,";")<<" "; 
     i++; 
    } 
    i=0; 
} 
else 
{ 
    cout<<"probleem"; 
} 
mfile.close(); 

这是一个简短而简单的例子,它是更复杂的代码,它是问题所在。

请注意,这段代码必须在while循环中。

但它只运行一次代码,可能是因为mfile不能使用多次。 当我想多次读取文件时,必须从上一次读取结束开始读取。

+0

存储你离开的地方,并从那里继续? – DiegoNolan

+0

是的,但我仍然必须使用while循环,因为我必须继续 – abcdef

+0

我不明白这个问题。你为什么不打开和关闭文件_outside_ while循环?在循环中,第一个'getline()'将读取第一行,第二行读取第二行,依此类推。 (在另一个注释中,'strtok(NULL,';')'应该完成什么?) – jogojapan

回答

1
ifstream mfile("abc.txt", ifstream::out); // why out ?? 

--->

ifstream mfile("abc.txt"); 
    if(mfile.is_open()) 
{ while(getline(mfile, b)) 
    { char* ch = new char[b.length() + 1]; 
     strcpy(ch, b.c_str()); 
     result = atof(strtok (ch,";")); 
     while(i<125) 
     { cout<< strtok (NULL,";")<<" "; 
      i++; 
     } 
     i=0; 
    } 
} 
else  {  cout<<"probleem";  } 
mfile.close(); 

您也可以ESA的streampos tellg();组合和seekg(pos)

编辑:

istream& getline (istream& is, string& str);

将返回mfile,里面的while(mfile)将被隐含地转换为bool,因此有效地迭代,直到读取任何字符串为止,直到文件结束为止。

+0

谢谢,它认为它可以工作,但get(getline(...))是什么意思?阅读直到文件结束? – abcdef

+1

@abcdef。查看编辑和链接。 – qPCR4vir

+0

非常感谢,但你能解释一下更多的编辑吗? – abcdef