基本的に、Excel のハード リターン (Shift + Enter または Alt + Enter、覚えていません) は、CSV を記述するために使用する既定のエンコーディングで \x0A に相当する改行を挿入します。CSV に書き込むときは、StreamWriter.WriteLine() を使用します。これは、行と改行 (\r\n だと思います) を出力します。
CSV は問題なく、Excel が保存する方法とまったく同じです。問題は、それを空白のレコード リムーバーに読み込むときです。改行が埋め込まれたレコードを CRLF として扱う ReadLine() を使用しています。
CSVに変換した後のファイルの例を次に示します...
Reference,Name of Individual or Entity,Type,Name Type,Date of Birth,Place of Birth,Citizenship,Address,Additional Information,Listing Information,Control Date,Committees
1050,"Aziz Salih al-Numan
",Individual,Primary Name,1941 or 1945,An Nasiriyah,Iraqi,,Ba’th Party Regional Command Chairman; Former Governor of Karbala and An Najaf Former Minister of Agriculture and Agrarian Reform (1986-1987),Resolution 1483 (2003),6/27/2003,1518 (Iraq)
1050a,???? ???? ???????,Individual,Original script,1941 or 1945,An Nasiriyah,Iraqi,,Ba’th Party Regional Command Chairman; Former Governor of Karbala and An Najaf Former Minister of Agriculture and Agrarian Reform (1986-1987),Resolution 1483 (2003),6/27/2003,1518 (Iraq)
ご覧のとおり、最初のレコードには al-Numan の後に改行が埋め込まれています。ReadLine() を使用すると、'1050,"Aziz Salih al-Numan' が返され、それを書き出すと、WriteLine() はその行を CRLF で終了します。元の行ターミネータを失います。ReadLine() を再度使用すると、 、「1050a」で始まる行を取得します。
ファイル全体を読み込んで置き換えることはできましたが、後で元に戻す必要がありました。基本的に私がやりたいことは、行末記号を取得して \x0a か CRLF かを判断し、\x0A の場合は、Write() を使用してその終端記号を挿入することです。