2010-10-15 21 views
9

में अलग मैं एक पाठ फ़ाइल में इस है:सी ++: पाठ फ़ाइल से पढ़ें और चर

John 20 30 40 
mike 30 20 10 

मैं कैसे करूँ पाठ फ़ाइल से पढ़ सकते हैं और उन्हें चर नाम, var1, var2, var3 में बांट दें। यह मेरा प्रयास है, ऐसा लगता है कि यह काम नहीं करता है। कृपया मदद करें।

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

int main() { 
    string name,result; 
    int number1; 
    ifstream myfile ("marks.txt"); 
    if (myfile.is_open()) 
    { 
    while (!myfile.eof()) 
    { 
     getline (myfile,name,'\t'); 
     getline (myfile,var1,'\t'); 
     getline (myfile,var2,'\t'); 
     getline (myfile,var3,'\t'); 
     cout << name << var1 << var2 << var3; 


    } 

    myfile.close(); 

    } 

    else cout << "Unable to open file"; 

    return 0; 
} 

संपादित करें 1:

नॉक्टर्न सुझाव:

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


int main() 
{ 
    ifstream inputFile("marks.txt"); 
    string line; 

    while (getline(inputFile, line)) 
    { 
     istringstream ss(line); 

     string name; 
     int var1, var2, var3; 

     ss >> name >> var1 >> var2 >> var3; 
     cout << name << var1 << var2 << var3 << endl << endl; 
    } 
} 

उत्पादन:

John203040 

mike302010 

302010 

क्यों एक और 302,010 ???

+0

क्या आपकी इनपुट फ़ाइल निश्चित रूप से टैब-सीमांकित है? आपको क्या उत्पादन मिलता है? –

+0

हाँ। इसका टैब सीमित है। – diehell

+0

"ऐसा लगता है कि यह काम नहीं करता है" सहायक नहीं है। कृपया विवरण दें। – JoshD

उत्तर

10

इस तरह कुछ काम करना चाहिए (मैं तो आप इस एक छोटे से बदलाव करने की आवश्यकता हो सकती, काम एक संकलक नहीं है):

#include <iostream> 
#include <sstream> 
using namespace std; 


int main() 
{ 
    ifstream inputFile("marks.txt"); 
    string line; 

    while (getline(inputFile, line)) 
    { 
     istringstream ss(line); 

     string name; 
     int var1, var2, var3; 

     ss >> name >> var1 >> var2 >> var3; 
    } 
} 

संपादित करें: बस फिर से इस देखा था, मैं पता नहीं क्यों मैंने पहले लाइन लाइन दृष्टिकोण चुना था। निम्नलिखित (सरल समाधान) काम नहीं करता है?

#include <fstream> 
using namespace std; 

int main() 
{ 
    ifstream fin(“marks.txt”); 

    string name; 
    int var1; 
    int var2; 
    int var3; 

    while (fin >> name >> var1 >> var2 >> var3) 
    { 
     /* do something with name, var1 etc. */ 
     cout << name << var1 << var2 << var3 << “\n”; 
    } 
} 
+0

रात्रिभोज, आपका काम ठीक है। मैंने # शामिल किया और cout << name << var1 << var2 << var3 << ""; यह जॉन 203040 माइक 302010 302010 प्रिंट करता है क्यों एक और 302010 ??? – diehell

+0

आपके पास अपनी फ़ाइल के अंत में एक खाली रेखा होनी चाहिए। – PlagueHammer

+0

धन्यवाद रात्रिभोज !! – diehell

4

ऐसा लगता है कि आपको var1, var2, और var3 घोषित करने की आवश्यकता है।

इसके अलावा बजाय इस की:

 getline (myfile,name,'\t'); 
     getline (myfile,var1,'\t'); 
     getline (myfile,var2,'\t'); 
     getline (myfile,var3,'\t'); 

इस प्रयास करें:

myfile >> name; 
    myfile >> var1; 
    myfile >> var2; 
    myfile >> var3; 

इसलिए नहीं कि तुम क्या था गलत है, लेकिन दूसरे क्लीनर है और सभी सफेद स्थान को संभाल लेंगे।

संबंधित मुद्दे