2009-07-02 5 views
6

C++의 탭 구분 파일을 읽고 각 줄을 레코드로 저장하는 가장 좋은 방법은 무엇입니까? 나는이 일을 돕기 위해 오픈 소스 라이브러리를 찾고 있었지만 성공하지 못해서 내 자신을 써야 할 것처럼 보였다.C++로 구분 된 파일 읽기

+1

내가 이것을 검색했을 때 나는 그런 간단한 일을 위해 어딘가에서 코드를 뽑을 수 없었다는 것에 놀랐다. 어쨌든, 나는 Stack Exchange에 대한 다른 답변을 바탕으로 내 솔루션을위한 블로그를 작성했습니다. [C++ Tidbits] (http://goo.gl/y0bOVv) – Wybird666

답변

17
typedef vector<vector<string> > Rows; 
Rows rows; 
ifstream input("filename.csv"); 
char const row_delim = '\n'; 
char const field_delim = '\t'; 
for (string row; getline(input, row, row_delim);) { 
    rows.push_back(Rows::value_type()); 
    istringstream ss(row); 
    for (string field; getline(ss, field, field_delim);) { 
    rows.back().push_back(field); 
    } 
} 

이렇게하면 시작할 수 있습니다. 각 행에 같은 수의 필드가 있는지 검사하지 않고 field_delim 등을 이스케이프하도록 허용합니다.

+0

이 코드는 Visual Studio에서 작동합니다. 오류는 "C4430 : 누락 된 형식 지정자 - 가정"오류입니다. 문자열 포함 – tumchaaditya

+0

CentOS에서 g ++로 코드를 정상적으로 컴파일합니다. 작동하도록 추가하지 않은 내용이 확실하지 않습니다. – thaweatherman

5

iostream 사용에는 문제가 없습니다. getline을 사용하여 각 줄을 문자열로 읽은 다음 해당 문자열에 stringstream을 사용하여 필드를 반복 할 수 있습니다.

관련 문제