異なる改行文字の相違処理


最近仕事の中で1つのとても奇妙な問題に出会って、私は1つの第三者のEMLファイル解析器を利用してemlファイルを解析して、しかし一部のファイルはとてもよく解析することができて、一部のファイルは解析することができなくて、一部のファイルは解析することができません.しかし、テキストエディタを使用してコンテンツとフォーマットを開くと、その違いは見つかりません.そして16進数で開いて問題を発見しました.作業可能なファイルの各行の末尾は「r」であり、解析できないファイルの各行の末尾は「r」である.解析できない問題が発生した.
これは突然私に1つの教訓を与えて、実は私達はプログラムを書く時ずっと“”で改行するかどうかを判断して、いくつかの特別な書類は“r”で改行するのです.
まず、r和の意味を話しましょう.rの意味は「車に戻る」という意味です.つまり、enterを押すのと同じです.「改行」という意味です.つまり、カーソルを1行下に移動させることです.Windowsで改行を押すと、エディタが自動的にrを生成します.一方、クラスLinuxでは、改行を押すとエディタは生成されます.
では、上記のように異なるオペレーティングシステムで改行符が異なる問題をどのように処理しますか?答えは違う開き方で開くことです.
まず、テストコードとファイルの内容を使用します(3つのファイルは完全に同じです).
#include 
#include 
#define MAXSIZE 1000
int main()
{
    //Windows  \r
, 12345\r
12345 FILE * infile1 = fopen("windows.txt", "rb"); char windowsBuf[MAXSIZE]; fread(windowsBuf, sizeof(char), 1000, infile1); fclose(infile1); //Linux
, 12345
12345 FILE * infile2 = fopen("linux.txt", "rb"); char linuxBuf[MAXSIZE]; fread(linuxBuf, sizeof(char), 1000, infile2); fclose(infile2); // \r , 12345\r12345 FILE * infile3 = fopen("other.txt", "rb"); char otherBuf[MAXSIZE]; fread(otherBuf, sizeof(char), 1000, infile3); fclose(infile3); system("PAUSE"); return 1; }

1.バイナリ方式で開きます.Windows Bufの内容は12345r 12345です.linuxBufの内容は1234512345です.otherBufの内容は12345r 12345です.したがって、バイナリ方式でファイルを開く場合、ファイルの内容は何も変化せず、そのままファイルの内容を読み出すだけです.
2.テキスト方式で開く(テストコードで「rb」を「r」に変更).Windows Bufの内容は1234512345です.linuxBufの内容は1234512345です.otherBufの内容は12345r 12345です.だからテキストでファイルを開くと、どんなオペレーティングシステムでもrと同意が変わります.これにより、差別化が解消されました.ただし改行文字がrの場合は何も変わりません.
最終的な結果は、バイナリ方式で開く場合は、3つの改行を自分で処理する必要があります.テキストで開く場合は、r和の場合を処理するだけです.