2012-06-12 35 views
0

程序讀文件和分裂行成單個變量

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

int main() { 
    string line,p1,p2,p3; 
    ifstream myfile ("infile.txt"); 
    if (myfile.is_open()) 
    { 
    while (myfile.good()) 
    { 
/* 
     myfile >> p1 >> p2 >> p3 ; 
     cout << "p1 : " << p1 << " p2 : " << p2 << " p3 : " << p3 << endl; 
*/ 

     getline (myfile,line); 
     cout << "line : " << line << endl; 

    } 
    myfile.close(); 
    } 

    else cout << "Unable to open file"; 

    return 0; 
} 

INFILE.TXT

name 
param1 = xyz 
param2 = 99 
param3 
param_abc = 0.1 
june 2012 

輸出

line : name 
line : param1 = xyz 
line : param2 = 99 
line : param3 
line : param_abc = 0.1 
line : june 2012 
line : 

我想搜索參數2,並打印其值即99

+0

你有沒有擡頭'的std :: map'和/或'的std :: multimap' ? –

+1

[請不要使用'.good()'作爲循環條件。](http://stackoverflow.com/questions/21647/reading-from-text-file-until-eof-repeats-last-line)它通常會產生錯誤的代碼(就像這裏所做的那樣)。在你的情況下,使用'getline'的返回值:while(std :: getline(myfile,line)){std :: cout <<「line:」<< line <<「\ n」; }' –

回答

1

你讀的行之後,你可以分析它:

stringstream ss(line); 
string token; 
if (ss >> token && token == "param2") { 
    ss >> token; // '=' 
    ss >> token; // value of param2 
    cout << "param2 is: " << token << endl; 
    } 
} 

你應該多增加一些測試的讀取操作的成功(也許這「參數2」之後令牌確實=

如果「參數2」的值預期爲整數,你可以提取,而不是最後一個令牌提取:

int val; 
ss >> val; 
+0

謝謝反正有一個搜索數組,即param1 | param3 | 6月 – user1234392

+0

不知道你的意思是「搜索數組」,但你可以在'std :: map <>'掠奪一個贓物,儘管你只能具有一種類型的值(例如'string') – Attila

+0

我現在有以下,但它在 – user1234392