質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

5回答

4247閲覧

csvファイルの改行を認識したい

lleldigm

総合スコア59

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2020/05/23 18:32

編集2020/05/24 04:56

CSV

1aa,11 2bb,22 3 4cc,33 5dd,44

C#

1StreamReader sr = new StreamReader(CSV_PATH,System.Text.Encoding.GetEncoding("shift_jis")); 2while (!sr.EndOfStream) 3{ 4 string sLine = sr.ReadLine(); 5 if (sLine.StartsWith("\n\n|\r|\n"))//ここの記述がわからない 6 { 7 Console.WriteLine("改行"); 8 } 9 else 10 { 11 Console.WriteLine(sLine); 12 } 13 14}

console

1aa,11 2bb,22 3改行 4cc,33 5dd,44

consoleに上記のように表示させたいのですが上手くいきません。
CSV内の改行を読み取る方法があれば教えてほしいです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gentaro

2020/05/24 02:30

それ「改行」じゃなく「空行」な気が。
guest

回答5

0

ベストアンサー

Diff

1StreamReader sr = new StreamReader(CSV_PATH,System.Text.Encoding.GetEncoding("shift_jis")); 2while (!sr.EndOfStream) 3{ 4 string sLine = sr.ReadLine(); 5- if (sLine.StartsWith("\n\n|\r|\n"))//ここの記述がわからない 6+ if (string.IsNullOrEmpty(sLine)) 7 { 8 Console.WriteLine("改行"); 9 } 10 else 11 { 12- Console.WriteLine(sr.ReadLine()); 13+ Console.WriteLine(sLine); 14 } 15 16}

追記

改行文字列を利用した判定は環境依存になるので、それが明らかに必要なケース以外ではお勧めしません。
改行文字列での判定が必要なケースであればEnvironment.NewLineの利用を検討して下さい。

投稿2020/05/24 02:42

編集2020/05/24 02:48
gentaro

総合スコア8947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lleldigm

2020/05/24 04:53

こんな便利なものがあったんですね・・ありがとうございますw
guest

0

提示されたソースですと、空の行が原因で思っている結果になっているのではなく、ループ内で読み込みを2回行っているのが原因なのではないですか?

Consoleに表示する時にもう一回読み込んでいます。
これを変更すれば、空白行と判断しなくても思っている結果が得られるのではないでしょうか。

実際に実行してデバッガにて実際の値を確認して、どのような判断をするか考えるというのも手ですよ。

投稿2020/05/24 02:33

編集2020/05/24 02:57
YAmaGNZ

総合スコア10489

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lleldigm

2020/05/24 04:57

失礼しました。記載ミス修正しました
guest

0

File.ReadAllLines ではダメですか

C#

1 var lines = System.IO.File.ReadAllLines("c:/test/test.csv", System.Text.Encoding.GetEncoding("shift_jis")); 2 foreach (var line in lines) 3 { 4 if (line == String.Empty) 5 { 6 Console.WriteLine("改行"); 7 } 8 else 9 { 10 Console.WriteLine(line); 11 } 12 }

投稿2020/05/24 02:58

編集2020/05/24 03:16
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gentaro

2020/05/24 03:00

その方法なら空行を「改行」という文字列で置換する処理が必要ですね。それはそれで良いとは思いますが。
退会済みユーザー

退会済みユーザー

2020/05/24 03:17

サンプルコードを追加しました
lleldigm

2020/05/24 04:59

ありがとうございます!エラーなく動作しました!
guest

0

if (sLine == "")

で。

投稿2020/05/23 22:25

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gentaro

2020/05/24 02:33

CA1820が出るので推奨できないと思います。
lleldigm

2020/05/24 04:47

ありがとうございます!CA1820が分からないので調べてみます!
guest

0

「行が LFで始まる または CRで始まる」という条件で分岐したらいいと思います。

if (sLine.StartsWith("\r") || sLine.StartsWith("\n"))

投稿2020/05/23 20:37

shun-K

総合スコア508

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/05/23 21:56 編集

それでできるかどうか実際にやってみてください。
YAmaGNZ

2020/05/24 02:25

読み込みにReadLineを使用しています。
lleldigm

2020/05/24 04:55

認識してもらえませんでした・・泣
shun-K

2020/05/24 05:37

StartsWithの引数に正規表現は書けないですよ って意味で回答しましたが無理でしたか・・・ お役に立てなくてすみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問