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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

2回答

8434閲覧

C# csvファイルを読み込んだ文字列を数値に変換したい

hachimitu

総合スコア36

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2020/11/03 10:19

C# csvファイルを読み込んだ文字列を数値に変換したい

読み込んだ結果が以下で読み込まれます。
イメージ説明
改行コードが含まれるいるのですが、これらが削除できず数値変換できないです。

改行の削除方法をご教示いただけますでしょうか。

#コード

c#

1// 読み込みたいCSVファイルのパスを指定して開く 2 /*note exeファイルがある2つ上の階層のパスを指定するときは../../をつける*/ 3 StreamReader sr = new StreamReader("./csv_data/Data.csv"); 4 { 5 // 末尾まで繰り返す 6 while (!sr.EndOfStream) 7 { 8 // CSVファイルの一行を読み込む 9 string line = sr.ReadLine(); 10 // 読み込んだ一行をカンマ毎に分けて配列に格納する 11 line.Remove(0, 1); 12 string[] values = line.Split(','); 13 14 values[0].Replace("\n", ""); 15 // 配列からリストに格納する 16 List<string> lists = new List<string>(); 17 lists.AddRange(values); 18 double[] db_data = {}; 19 int cnt = 0; 20 // コンソールに出力する 21 foreach (string list in lists) 22 { 23 db_data[cnt] = double.Parse(list); 24 System.Console.Write("{0} ", list); 25 cnt++; 26 } 27 System.Console.WriteLine(); 28 } 29 }

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/11/18 01:50

質問者さん、無言ですが、回答が出ていますのでそれに対するフィードバックを書いてください。無言で放置はマナー違反です。
guest

回答2

0

改行コードが含まれるいるのですが、これらが削除できず数値変換できないです

画像を見ると、改行コードではなく " です。

double.Parse で FormatException がスルーされているはずですが、問題は double として有効でないダブルクォーテーション " が values[0] と values[2] に含まれていることです。(values[1] は "2" なので問題ないはず)

string line = sr.ReadLine(); の line には ""1,2,3"" が代入されているはずです。

その後 line.Remove(0, 1); としてますが、line = line.Remove(0, 1); としないと意味がないです。

同様に、values[0].Replace("\n", ""); も意味がないです。values[0] = values[0].Replace(""", ""); としないと意味がないです。

List<string> 型に代入するのも意味がないです。直接 values を for で回してパースすれば良いです。

イメージ説明

【追記】

string line = sr.ReadLine(); で line に ""1,2,3"" が代入されるというのは、基になる CSV ファイルが普通ではないようなので、そこをまず確認する方が先かもしれません。

そもそもダブルクォーテーションはどのように使われるのかについては、以下の記事の「CSV形式とは?」のセクションを見てください。

CSV形式のファイルをDataTableや配列等として取得する
http://dobon.net/vb/dotnet/file/readcsvfile.html

それを読んでもらって、基になる CSV が何故ダブルクォーテーションを使っているか、String.Split(',') で分割するのは果たして適切なのか考えてみてください。

投稿2020/11/04 01:33

編集2020/11/04 01:53
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

まず、入力となるCSVが怪しいです。
提示されているウォッチの内容を見る限り改行コードではなく"が含まれています。
CSVデータとして

CSV

1"1,2,3"

といったデータを読み込んでいませんか?
普通であれば

CSV

11,2,3

とダブルコーテーションで囲まれていないもののはずです。
まずは入力となるCSVがどのようなデータであるのか、それが正しいのか確認してください。

ダブルコーテーションで囲まれている場合はそれが1つのデータとして扱われるのが一般的です。
ですが、提示されているコードですとダブルコーテーションで囲まれているデータに関しては一切考慮されていません。
ADO.NETを使ってで読み込む方法やTextFieldParserクラスを使って読み込む方法など
別の方法で読み込むことをお勧めします。

投稿2020/11/03 10:51

YAmaGNZ

総合スコア10469

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問