2014-09-09 5 views
0

텍스트 파일에서 읽으려고합니다. 나는 파일을 열기위한 구문이 될 것이라고 생각 : 파일을 읽을 포맷C++에서 텍스트 파일을 읽는 방법?

ifstream file("Info.txt"); 
file.open("Info.txt"); 

경우

데이브 게이브 8 라이언 (10) 녹색

그래서 추천 변수를 만들 수 ?

string name; 
    int age; 
    string color; 

그런 다음 파일에서 정보를 읽으시겠습니까?

file >> name >> age >> color; 

연령 및/또는 색상이없는 파일의 일부 줄의 영향을받는이 파일은 어떻게 읽습니까?

+1

생성자에서 파일 이름을 전달하면 파일을 열 필요가 없습니다. 텍스트 파일의 형식이 한 줄에 모두 올바르게 지정되어 있지 않으면 CSV와 같은 구분 기호를 사용하거나 시간이 오래 걸릴 수 있습니다. – user657267

+0

모든 파일을 읽고 std :: string에 저장 한 다음 해당 문자열에서 원하는 것을 찾으십시오. – nbro

+0

아마도 bash 명령을 실행하는 시스템 호출을 호출 할 수 있습니다. 'cut'명령을 사용하여 각 변수를 새 tmp 파일의 별도 행에 넣으십시오. C++에서 tmp 파일을 읽고 getline()을 사용하여 각 행을 새로운 변수에 넣습니다. – Kam

답변

0

나는 틀림없이 문자열 함수 ++은 C에 익숙하지 않다, 그러나 여기 내 시도입니다 :

#include <iostream> 
#include <fstream> 
#include <cstring> 

using namespace std; 

int main() 
{ 
    std::ifstream fin("Info.txt"); 
    if(!fin) 
    { 
      std::cout << "Error opening the file" << std::endl; 
      return(1); 
    } 
    char* line_cstr = new char[1000]; 
    char name[1000]; 
    int age; 
    char color[1000]; 
    char* rest = new char[1000]; 

    fin.getline(line_cstr, 1000); 
    while (strlen(line_cstr) != 0) { 
     int numTokensRead = sscanf(line_cstr, "%s %d %s %1000[0-9a-zA-Z ]s", name, &age, color, rest); 

     if (numTokensRead >= 3 ) { 
     std::cout <<"name: " << name <<", age: " << age <<", color: " << color <<"\n"; 
      strcpy(line_cstr, rest); 
     } 

     // do some error checking for incomplete entries 
     else if (numTokensRead == 1) { 
      if (strlen(name) == strlen(line_cstr)) { 
       // we're done! 
       return 0; 
      } 

      // skip the first token 
      sscanf(line_cstr, "%*s %1000[0-9a-zA-Z ]s", line_cstr); 
     } 
     else if (numTokensRead == 2) { 
      // skip the first 2 tokens 
      sscanf(line_cstr, "%*s %*d %1000[0-9a-zA-Z ]s", line_cstr); 
     } 
    } 
} 

다음 텍스트 파일에 작용 :

Info.txt

Mike 25 Red Dave Gabe 8 Green 10 Green 

출력

$ ./a.out 
name: Mike, age: 25, color: Red 
name: Gabe, age: 8, color: Green 

나는 모든 가능한 오류 케이스를 처리 할 수 ​​있는지 100 % 확신하지 못했습니다. 두 개의 int, 한 행, 여러 행 등 -하지만 시작해야합니다.

관련 문제