web-dev-qa-db-ja.com

キャリッジリターンとラインフィード... C#では両方とも必要ですか?

文字列に改行文字を挿入するとき、私は通常これを行いました:

str = "First line\nSecond line";

C#では、これが標準的なプラクティスですか? 「復帰」文字「\ r」も含める必要がありますか?次の間に違いはありますか?もしそうなら、それらは何ですか?

str = "First line\nSecond line";
str = "First line\r\nSecond line";

「キャリッジリターン」と「ラインフィード」の両方を使用することが標準的な慣行である場合、特定の順序はありますか?

注: SOに関する他のいくつかの投稿を読みましたが、.NET/C#に固有の回答が見つかりませんでした。

編集:小さなアプリをテストした後、「\ n」と「\ n\r」または「\ r\n」の間に違いは見られませんでした。

29
Luke Baulch

System.Environment.NewLineは探している定数です。- http://msdn.Microsoft.com/en-us/library/system.environment.newline.aspx は環境固有の組み合わせを提供します特定のOS上のほとんどのプログラムは、「次のテキスト行」を考慮します。

実際には、ほとんどのテキストツールは\nを含むすべてのバリエーションを「改行」として扱い、テキスト"foo\nbar"で使用できます。特に、$"V1 = {value1}\nV2 = {value2}\n"のような複数行のフォーマット文字列を作成しようとしている場合。文字列を連結してテキストを作成する場合は、NewLineの使用を検討してください。いずれの場合も、ツールyouが理解した出力を希望どおりに使用していることを確認してください。たとえば、プラットフォームに関係なく、常に\r\nを使用する必要があります。それ以外の場合、選択したエディターはファイルを正しく開くことができません。

WriteLineメソッドはNewLineを使用するため、これらのメソッドを使用してテキストを記述する場合は、\n\r\n\nこれはいくつかのツールを混乱させる可能性があり、間違いなくきれいに見えません。

歴史的背景については \ nと\ rの違い? をご覧ください。

66
Alexei Levenkov

キャリッジリターン\rは、カーソルを現在の行の先頭に移動します。改行\nは、次の行にドロップし、場合によっては次の行の先頭になります。これは、アレクセイが上記で述べたプラットフォーム依存部分です(* nixシステム\nは、キャリッジリターンと改行の両方を提供しますが、Windowsでは提供しません)

使用するものは、何をしようとしているかによって異なります。コンソールで少し回転するものを作りたい場合は、str = "|\r/\r-\r\\\r"; 例えば。

10
Brian Roach

テキストを表示する場所によって異なります。たとえば、コンソールまたはテキストボックスでは、\ nで十分です。 RichTextBoxでは、両方が必要だと思います。

1
kprobst

私はこれが少し古いことを知っていますが、このページを偶然見つけた人にとっては、\ nと\ r\nの違いがあることを知っておくべきです。

\ r\nはCRLF行末を示し、\ nはLF行末文字を示します。一般に目にはほとんど違いはありません。

文字列から.txtを作成してから、メモ帳(通常はnotepad ++ではない)で開いてみると、違いがわかります。

SHA,PCT,PRACTICE,BNF CODE,BNF NAME,ITEMS,NIC,ACT COST,QUANTITY,PERIOD
Q44,01C,N81002,0101021B0AAALAL,Sod Algin/Pot Bicarb_Susp S/F,3,20.48,19.05,2000,201901
Q44,01C,N81002,0101021B0AAAPAP,Sod Alginate/Pot Bicarb_Tab Chble 500mg,1,3.07,2.86,60,201901

上記は「CRLF」を使用しており、以下は「LFのみ」のように見えるものです(LFが表示されているところに表示できない文字があります)。

SHA,PCT,PRACTICE,BNF CODE,BNF NAME,ITEMS,NIC,ACT COST,QUANTITY,PERIODQ44,01C,N81002,0101021B0AAALAL,Sod Algin/Pot Bicarb_Susp S/F,3,20.48,19.05,2000,201901Q44,01C,N81002,0101021B0AAAPAP,Sod Alginate/Pot Bicarb_Tab Chble 500mg,1,3.07,2.86,60,201901

行末を修正する必要があり、ファイルのサイズが十分に小さい場合、NotePad ++で行末を変更できます(またはWordに貼り付けてからメモ帳に戻すことができます-これはCRLFのみになります)。

これにより、これらのファイルを読み取る一部の関数が機能しなくなる可能性があります(指定された例の行はGP処方データ-イングランドからのものです。ファイルはCRLF行の終わりからLF行の終わりに変更されました)。これにより、SSISジョブの実行が停止され、LF行末を読み取ることができなかったため失敗しました。

行末情報のソース: https://en.wikipedia.org/wiki/Newline#Representations_in_different_character_encoding_specifications

これが将来誰かに役立つことを願っています:) CRLF = Windowsベース、LFまたはCFはUnixベースのシステム(Linux、MacOSなど)からのものです)

1
Mex