2013-05-04 3 views
4

5 줄이 있고 모든 줄은 3-4 줄 길이의 파일을 읽으려고합니다. 여기 내 입력 파일입니다 :C++ getline 및 stringstream

10:30 Hurley 1234567A 10:15 
10:45 Hurley 1234567A 11:30 
08:35 Jacob 1x1x1x1x1x 
08:35 Jacob 1x1x1x1x1x 08:10 
08:05 Jacob 1x1x1x1x1x 
08:45 Sayid 33332222 09:15 

그리고 이것은 내가 무엇을 얻을 수 있습니다 :

void enor::Read(status &sx,isle &dx,ifstream &x){ 
    string str; 
    getline(x, str, '\n'); 
    stringstream ss; 
    ss << str; 
    ss >> dx.in >> dx.name >> dx.id >> dx.out; 
    /*getline(x, str, '\n'); 
    x>>dx.in>>dx.name>>dx.id>>dx.out;*/ 
    if(x.fail()) 
     sx=abnorm; 
    else 
     sx=norm; 
} 

내가 3을하지 않고 파일을 읽을 수있는 방법 :

10:30 Hurley 1234567A 10:15 
10:45 Hurley 1234567A 11:30 
08:35 Jacob 1x1x1x1x1x 11:30 
08:35 Jacob 1x1x1x1x1x 08:10 
08:05 Jacob 1x1x1x1x1x 08:10 
08:45 Sayid 33332222 09:15 

이 내 코드입니다 그리고 제 5 선은 제 2와 제 4 선의 시간으로 채웠습니까? 나는 dx.out이 비어 있기를 바란다. 다른 메서드를 사용해야합니까, 아니면 stringstream을 사용하여 수행 할 수 있습니까?

+0

이 기능을 어떻게 사용하는지 보여줄 수 있습니까? 'dx' 객체를 재사용하고 있습니까? –

+0

void enor :: First() { 읽기 (sx, dx, x); 다음(); } void enor :: Next() { end = sx == abnorm; if (! end) { current.in = dx.in; current.name = dx.name; current.id = dx.id; current.out = dx.out; 읽기 (sx, dx, x); /* while (sx == norm && dx.id == current.id) { if (dx.in> current.out) 읽기 (sx, dx, x); } */ } } – wfmn17

답변

3

>>stringstream에 남아있는 것이없는 것을 볼 경우, 변수의 손길이 닿지 않은 떠날 것 - 그래서 dx.out 마지막 줄에서 그 값을 유지합니다. 그러나

ss >> dx.in >> dx.name >> dx.id; 
if (!(ss >> dx.out)) 
    dx.out = ""; 

ss >> dx.out 때문에 반환 ss을 할 수 있으며, 스트림 (예 : 그것을가 if 상태로 사용하는 경우와 같은) bool로 변환 할 때 마지막 읽기 시도가 실패 할 경우, 그것은 false를 반환합니다.

+0

감사합니다. 완벽한 작품입니다! – wfmn17