2010-10-15 22 views
9
değişken

ayırmak ben bir metin dosyasına bu var:C++: metin dosyasından okuma ve

John 20 30 40 
mike 30 20 10 

yapmak Nasıl metin dosyasından okuma ve değişken adı, var1, var2, var3 halinde ayırın. Bu benim denemem, işe yaramaz gibi görünüyor. Yardım lütfen.

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

DÜZENLEME 1:

Nocturne Öneri:

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

çıkışı:

John203040 

mike302010 

302010 

neden başka 302.010 ???

+0

Giriş dosyanız kesinlikle sekmeyle ayrılmış mı? Hangi çıktıyı elde edersiniz? –

+0

yea. sekmesi sınırlandırılmış. – diehell

+0

"işe yaramıyor gibi görünüyor" yardımcı olmuyor. Lütfen detayları verin. – JoshD

cevap

10

Böyle bir şey (bu biraz ince ayar gerekebilir yüzden, kullanışlı bir derleyici yok) çalışması gerekir:

#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: Sadece tekrar gördüm, nedenini bilmiyorum Daha önce hat yaklaşımı seçtim. Aşağıdaki (basit çözüm) işe yaramıyor mu?

#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

Nocturne, Seninki iyi çalışıyor. Ben #include ekledim ve cout << isim << var1 << var2 << var3 << ""; o yazdırır John203040 mike302010 302010 Neden başka bir 302010 ??? – diehell

+0

Dosyanızın sonunda boş bir satırın olması gerekir. – PlagueHammer

+0

Teşekkürler Nocturne !! – diehell

4

Var1, var2 ve var3 bildirmeniz gerekiyor gibi görünüyor. Bu yerine Ayrıca

:

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

bu deneyin:

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

değil çünkü ne vardı yanlış, ama ikinci temizleyici ve tüm beyaz boşluk idare edecek.