c++ getline 함수에서 "\r", "\r\n", "\n" 등의 줄바꿈 기호를 통일적으로 다루는 법 ?
글쓴이: parkon / 작성시간: 월, 2013/09/23 - 5:15오후
안녕하세요 ?
텍스트 데이타 파일을 한줄씩 읽어들이는 루틴을 이용하고 쉽습니다.
{ ... ifstream f("data.txt"); char line[256]; ... f.getline(line, 256); ... }
이런 식으로 만들어 평소 잘 돌아가던 코드가
갑자기 에러 메세지를 뱉어내길래 찾아보니
대부분의 데이타 파일들은 유닉스 스타일인 '\n'을 줄바꿈으로 사용하는데
특정 파일 몇개가 도스 스타일인 "\r\n"을 사용해서 생기는 문제더군요.
그래서 원하는 함수는, 줄바꿈 문자에 상관없이, 예를 들어
123\r
456\n
789\r\n
처럼 되어 있는 인풋 파일에서 연속적으로 호출하면
123\0
456\0
789\0
처럼 동작하는 getline 함수 비슷한 녀석을 찾고 있습니다.
구글링 해 보니
http://stackoverflow.com/questions/6089231/getting-std-ifstream-to-handle-lf-cr-and-crlf
여기에 있는 내용을 참조해 제가 그런 함수를 만들수는 있을 것 같은데요,
일단 저 사이트에 제가 익숙하지 않은 문법들도 많고,
이 문제는 많이들 겪을만한 문제여서
혹시 더 쉬운 방법도 이미 나와 있지 않나 해서
여기에 질문 올립니다.
Forums:
모두 \n 으로 구분하면 되겠네요. ㅇ_ㅇ;;
\r 남는거 있으면 지워주고... ㅡ_ㅡ;;
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
그냥 마지막 문자가 \r인지 아닌지만 검사하면되죠.
\r\n이 문제라면 그냥 마지막 문자가 \r인지 아닌지만 검사하면되죠.
가장 일반적인 해결책은 줄단위로 읽지 말고 적당히 버퍼링해서 읽으면서 줄단위로 끊어주는거겠죠.
댓글 달기