2013-03-27 55 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