Text Input

텍스트 읽기 상태 우선

파일을 열었다는 사실과 모든 줄을 올바르게 읽었다는 사실은 다르다. open 실패, parse 실패, EOF를 구분해야 데이터 손상이 조용히 지나가지 않는다.

01

열기 결과를 검사한다

ifstream 생성 뒤 바로 상태를 확인해 파일 없음과 권한 문제를 조기에 분리한다.

02

읽기 방식을 맞춘다

공백 단위 토큰이면 >>, 줄 전체가 의미 있으면 getline을 사용한다.

03

파싱 실패 기록

몇 번째 줄에서 어떤 값이 실패했는지 남기면 데이터 오류를 재현하기 쉽다.

getline
줄 단위 읽기 빈 줄과 공백 포함 내용을 보존한다.
이전 formatted input 뒤 남은 개행을 조심한다.
>>
형식 기반 읽기 공백을 기준으로 타입에 맞게 파싱한다.
실패 시 스트림 상태가 바뀐다.
eof
끝 도달 읽기를 시도한 뒤 끝을 알게 되는 경우가 많다.
while (!eof()) 패턴은 피한다.
fail
파싱 실패 타입 변환이 실패하면 이후 읽기가 멈춘다.
clear와 ignore가 필요한 경우가 있다.

열기 실패 · 루프 조건 · 진단 정보 점검

열기 실패 파일을 열지 못했을 때 빈 데이터처럼 처리하지 않는가.
루프 조건 읽기 성공 자체를 반복 조건으로 사용하고 있는가.
진단 정보 파싱 실패 시 파일명과 줄 번호를 남기는가.

줄 단위 파싱

std::ifstream in(path);
if (!in) throw std::runtime_error("cannot open file");
for (std::string line; std::getline(in, line); ) {
    parse_line(line);
}