2010-10-15 10 views
9

Ho questo in un file di testo:C++: Leggere da file di testo e separare in variabile

John 20 30 40 
mike 30 20 10 

Come faccio a leggere dal file di testo e separarli in nome della variabile, var1, var2, var3. Questo è il mio tentativo, sembra non funzionare. Aiuto per favore.

#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; 
} 

EDIT 1:

Suggerimento Nocturne:

#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; 
    } 
} 

uscita:

John203040 

mike302010 

302010 

Perché un altro 302010 ???

+0

Il file di input è definitivamente delimitato da tabulazioni? Che risultato ottieni? –

+0

sì. la sua scheda delimitata. – diehell

+0

"sembra che non funzioni" non è utile. Si prega di fornire dettagli. – JoshD

risposta

10

Qualcosa del genere dovrebbe funzionare (non ho un compilatore a portata di mano, quindi potrebbe essere necessario modificare questo un po '):

#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; 
    } 
} 

Edit: appena visto questo ancora una volta, io non so perché Ho scelto l'approccio get line in precedenza. Non funziona la seguente (soluzione più semplice)?

#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

Notturno, il tuo lavoro va bene. Ho aggiunto #include e cout << nome << var1 << var2 << var3 << ""; stampa John203040 mike302010 302010 Perché un altro 302010 ??? – diehell

+0

È necessario avere una riga vuota alla fine del file. – PlagueHammer

+0

Grazie Notturno !!. – diehell

4

Sembra che sia necessario dichiarare var1, var2 e var3.

Inoltre, invece di questo:

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

Prova questa:

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

Non perché quello che aveva è sbagliato, ma il secondo è più pulito e gestirà tutti gli spazi bianchi.

Problemi correlati