std :: ifstream을 사용하여 줄 끝 불일치 극복
텍스트 파일 작업 시 줄 끝은 플랫폼에 따라 다를 수 있으므로 잠재적인 호환성이 보장됩니다. 문제. C 런타임은 일반적으로 줄 끝을 올바르게 처리하지만 텍스트 파일이 플랫폼 간에 공유되는 시나리오를 고려하는 것이 중요합니다.
이 문제를 해결하기 위해 세 가지 공통 줄 끝을 모두 원활하게 처리하는 사용자 정의 함수 safeGetline을 살펴보겠습니다. 형식(r, n 및 rn):
std::istream& safeGetline(std::istream& is, std::string& t) { // Reset the string to be sure t.clear(); // Utilize a sentry object for synchronized stream access std::istream::sentry se(is, true); std::streambuf* sb = is.rdbuf(); while (true) { // Fetch the next character int c = sb->sbumpc(); switch (c) { case '\n': // Encountered a line ending with just \n return is; case '\r': // Possibility of \r\n line ending if (sb->sgetc() == '\n') sb->sbumpc(); return is; case std::streambuf::traits_type::eof(): // End of file reached if (t.empty()) is.setstate(std::ios::eofbit); return is; default: // Append the character to the string t += (char)c; } } }
이 함수는 스트림 버퍼를 사용하여 스트림에서 문자를 하나씩 읽는 방식으로 작동하며, 이는 개별 문자를 직접 읽는 것보다 효율적입니다. 입력 스트림에서. 다양한 줄 끝 규칙을 처리하고 줄 바꿈 없이 마지막 줄이 비어 있을 가능성도 설명합니다.
이 기능의 사용법을 보여주기 위해 간단한 테스트 프로그램을 만들어 보겠습니다.
int main() { // Specify the path to the text file containing lines with different line endings std::string path = ...; // Open the file for input std::ifstream ifs(path.c_str()); if (!ifs) { std::cout << "Error opening the file." << std::endl; return EXIT_FAILURE; } // Count the number of lines in the file int n = 0; std::string line; while (!safeGetline(ifs, line).eof()) ++n; // Display the count of lines std::cout << "The file contains " << n << " lines." << std::endl; return EXIT_SUCCESS; }
이 프로그램은 safeGetline 기능을 활용하여 줄 끝 형식에 관계없이 지정된 텍스트 파일의 줄 수를 정확하게 계산할 수 있습니다.
위 내용은 C에서 줄 끝이 혼합된 파일의 줄을 어떻게 안정적으로 읽을 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!