ホームページ >バックエンド開発 >C++ >C コードでテキスト ファイル内のさまざまな改行末尾を確実に処理できるようにするにはどうすればよいですか?

C コードでテキスト ファイル内のさまざまな改行末尾を確実に処理できるようにするにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-05 04:34:09606ブラウズ

How Can I Make My C   Code Robustly Handle Different Newline Endings in Text Files?

多様な改行末尾を適切に処理するための std :: ifstream の取得

はじめに

作業時C のテキスト ファイルでは、さまざまな改行エンコーディングを処理することが重要です優雅に。この記事では、多様な改行文字を処理するための標準 C メカニズムとベスト プラクティスを検討し、包括的な解決策を提供します。

課題: 一貫性のない改行末尾

特に、この質問は懸念を引き起こしました。 istream& の動作getline ( istream& is, string& str );さまざまな改行エンコーディングに遭遇したとき。その目的は、さまざまなテキスト ファイル形式との互換性を確保しながら、ユーザーにとって不便な変更を回避することです。

標準 C の制限

C ランタイムは理論的にはプラットフォーム固有の改行を処理する必要があります慣例に従って、クロスプラットフォームのデータ交換には信頼できません。したがって、より堅牢なソリューションが必要です。

カスタム ソリューション:safeGetline() 関数

この課題に対処するために、safeGetline() と呼ばれるカスタム関数が導入されています。

std::istream& safeGetline(std::istream& is, std::string& t)
{
    t.clear();

    // ... Implementation omitted for brevity ...

    return is;
}

この関数は、入力ストリームから文字を繰り返し読み取り、3 つの一般的な改行エンコーディング ("r"、 「n」および「rn」)に応じて。また、空行が正しく処理されることも保証します。

テスト プログラム

safeGetline() 関数の機能を実証するためのテスト プログラムが提供されています。

int main()
{
    // ... Implementation omitted for brevity ...

    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() 関数は、C 入力ストリームの多様な改行末尾を処理するための堅牢なソリューションを提供します。これにより、開発者はさまざまなテキスト ファイル形式やプラットフォームと互換性のあるコードを作成でき、ユーザーの不便を最小限に抑え、データの正しい処理を保証できます。

以上がC コードでテキスト ファイル内のさまざまな改行末尾を確実に処理できるようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。