2010-10-15 35 views
9

Tôi có điều này trong một file văn bản:C++: Đọc từ tập tin văn bản và phân chia thành biến

John 20 30 40 
mike 30 20 10 

Làm thế nào để tôi đọc từ tập tin văn bản và tách chúng thành các tên biến, var1, var2, var3. Đây là nỗ lực của tôi, có vẻ như nó không hoạt động. Xin vui lòng giúp đỡ.

#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:

Nocturne Góp ý:

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

đầu ra:

John203040 

mike302010 

302010 

Tại sao 302.010 khác ???

+0

Tệp đầu vào của bạn có được phân tách bằng tab không? Bạn nhận được kết quả gì? –

+0

yea. tab được phân tách. – diehell

+0

"có vẻ như nó không hoạt động" không hữu ích. Xin cho biết chi tiết. – JoshD

Trả lời

10

Something như thế này nên làm việc (tôi không có một trình biên dịch tiện dụng, vì vậy bạn có thể cần phải tinh chỉnh này một chút):

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

Chỉnh sửa: Chỉ cần thấy điều này một lần nữa, tôi không biết tại sao Tôi đã chọn cách tiếp cận get line trước đó. Giải pháp đơn giản sau đây có hoạt động không?

#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, Yours làm việc tốt. Tôi đã thêm #include và cout << name << var1 << var2 << var3 << ""; nó in John203040 mike302010 302010 Tại sao lại là 302010 ??? – diehell

+0

Bạn phải có một dòng trống ở cuối tệp của mình. – PlagueHammer

+0

Cảm ơn Nocturne !!. – diehell

4

Dường như bạn cần khai báo var1, var2 và var3.

Ngoài ra thay vì điều này:

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

Hãy thử điều này:

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

Không phải vì những gì bạn có là sai, nhưng thứ hai là trình dọn dẹp và sẽ xử lý tất cả các khoảng trắng.

Các vấn đề liên quan