std::ifstream によるさまざまな改行規則の処理
C ランタイムは通常、プラットフォームに基づいて改行規則を処理しますが、場合によってはさまざまな改行形式を含むテキスト ファイルを均一に処理する必要があります。この記事では、std::ifstream を使用してこれを実現する方法について説明します。
問題
getline(istream&, string&) は、終了をマークする 'n' 文字を期待しています。ただし、テキスト ファイルには、「r」、「n」、またはその両方がさまざまな組み合わせで含まれる場合があります。 「r」文字が「n」の前にある場合、取得された行にその文字が含まれる可能性があり、不一致が発生します。
解決策
ifstream コンストラクターを使用して、さまざまな改行エンコーディングを「n」に直接変換します。ただし、この状況を処理するカスタム関数を作成できます。
std::istream& safeGetline(std::istream& is, std::string& t) { // ... Implementation here (see below) ... }
実装の詳細
safeGetline 関数は、streambuf を利用して文字を 1 つずつ読み取ります。 std::istream を直接使用するよりも効率が高くなります。ストリームを反復処理して、さまざまな改行規則を処理します。
テストプログラム
サンプル テスト プログラムは、safeGetline 関数の使用法を示します。
int main() { // Open a file and check for errors. int n = 0; std::string t; while (!safeGetline(ifs, t).eof()) ++n; std::cout << "The file contains " << n << " lines." << std::endl; return EXIT_SUCCESS; }
結論
safeGetline 関数を使用すると、手動による改行処理の必要がなく、異なる改行規則間でも一貫した行取得が保証されます。このアプローチは、さまざまなソースから作成されたテキスト ファイルを処理するための堅牢かつ柔軟なソリューションを提供します。
以上が`std::ifstream` を使用して C で混合改行規則を確実に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。