2013-02-25 3 views
1

파일을 읽고 각 줄마다 특정 문자열을 얻으려고합니다. 내가 필요로하는 문자열의 끝은 세미콜론으로 표시됩니다. 이 문제는 없지만 getline()은 구분 기호로 자동으로 새 줄을 내 문자열에 연결한다는 것을 알게되었습니다.getline() 구분 기호 문제

filename.open(FileName); 
while(filename) 
    { 
    getline(filename, name[counter], ';'); 

    filename >> amount[counter] >> unit[counter] >> calories[counter]; 
    counter++; 

    } 

그래서 내가 이름 배열을 인쇄 할 갈 것 때 추가는 '\ n'을 길을 따라 포착되고 있었다 것처럼 내가 거기에 자신을 넣어하지 않은 1 여분의 줄 바꿈이있을 것입니다. 누구든지 해결책이 있습니까? 내가 읽는 파일 형식의 예가 아래에 있습니다.

데이브 존스; 24 높이 :
Jillian Jones; 등 34 짧은 ...

+0

당신이'>> 양 [카운터] >> 단위 [카운터] >> 칼로리 [카운터]'일치하지 않는 것 보여 파일 형식. 또한'counter ++ '가 배열의 크기를 초과하면 어떻게됩니까? – Johnsyweb

답변

1

filename >> amount[counter] >> unit[counter] >> calories[counter]; 

를 실행 한 후 개행은 여전히 ​​버퍼에 있습니다. 이것은 일반적으로 ">>"만 사용할 때 문제가되지 않습니다. 그것은 단지 개행을 무시합니다. 그러나 getline과 ">>"을 섞으면 ">>"뒤에 남겨진 개행을 무시할 필요가 있습니다. 다음과 같이 시도하십시오.

이것은 약간 중복되었지만 읽기 쉽습니다.

0

더 나은 방법은 버퍼에 의해 다음 분할 문자열로 라인으로 파일 라인을 읽는 것 ','

while(true) { 
    std::string line; 
    std::getline(in, line); 
    if(!in) break; 
    std::istringstream iline(line); 
    while(true) { 
     std::string str; 
     std::getline(iline, str, ';'); 
     if(!iline) break; 
     // you get string by string in str here 
    } 
} 
1

공백을 소화하기위한 간단한 방법 :

filename >> amount[counter] >> unit[counter] >> calories[counter] >> std::ws;