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

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

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

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

1回答

3111閲覧

C# 配列からグラフ化したい

right00

総合スコア1

C#

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/07/19 10:11

編集2021/07/19 10:59

テキストファイルから読み取り作成した配列からグラフを作りたいです。

以下のコードのように作っていて、string型で配列を作成しています。
ファイル内のStartの文字列が来たら読み取り始め、Endがきたら読み取りをやめるプログラムが入っています。

private void Form1_Load(object sender, EventArgs e) { chart1.Series.Clear(); chart1.ChartAreas.Clear(); // ChartにChartAreaを追加します string chart_area1 = "Area1"; chart1.ChartAreas.Add(new ChartArea(chart_area1)); // ChartにSeriesを追加します string graph1 = "Graph1"; chart1.Series.Add(graph1); chart1.Series[graph1].ChartType = SeriesChartType.Point; // ポイントグラフを指定 using (StreamReader sr = new StreamReader(@"Test.log", Encoding.GetEncoding("Shift_JIS"))) { string line; line = sr.ReadLine(); string[] arrayX; string[] arrayY; string[] arrayLv; var listX = new List<string>(); var listY = new List<string>(); var listLv = new List<string>(); while (line != "Start") { line = sr.ReadLine(); } while (line != "End") { line = sr.ReadLine(); string[] arr = line.Split(':', '=', ','); Console.WriteLine("{0}", string.Join(",", arr)); if (line != "End") { listX.Add(arr[3]); listY.Add(arr[5]); listLv.Add(arr[7]); Console.WriteLine("[{0}]", string.Join(", ", listX)); Console.WriteLine("[{0}]", string.Join(", ", listY)); Console.WriteLine("[{0}]", string.Join(", ", listLv)); } } arrayX = listX.ToArray(); arrayY = listY.ToArray(); arrayLv = listLv.ToArray(); var doubleList = listLv.ConvertAll(double.Parse); // データをシリーズにセットします for (int i = 0; i < 18; i++) { DataPoint dp = new DataPoint(doubleList[i]); chart1.Series[graph1].Points.Add(dp); } } } }

グラフ化のやり方を調べてみて出てきたサンプルコードを組み込むと、配列がdouble型でないとできないようです。(DataPointなど)
stringからdoubleへ型を変換しようとParseなど試してみたのですが、うまくいきません。

わからないこと

・配列をdouble型に変換しないとグラフ化できない、または難しいのか。
・その場合どうすればよいのか。
・string型のままできるならどうすればよいのか。

よろしくお願いします。

追記

var doubleList = listLv.ConvertAll(double.Parse); // データをシリーズにセットします for (int i = 0; i < 18; i++) { DataPoint dp = new DataPoint(doubleList[i]); chart1.Series[graph1].Points.Add(dp); }

いままでParseを使ったことがなかったのですが、一番上の行の変換でlistLvを変換しています。
DataPointに入れているdoubleListがエラーになってしまいます。

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

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

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

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

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

y_waiwai

2021/07/19 10:14

うまくいかないとはどうなるんでしょうか
right00

2021/07/19 10:18

エラーがでてしまい、解決方法がわからない状態です。
pepperleaf

2021/07/19 10:18

> stringからdoubleへ型を変換しようとParseなど試してみた との事ですが、どう、うまくいかなかったのでしょうか? グラフは、数値データです。文字列のままではできません、、(少なくともC#では) また、文字列→数字はそんなに難しくはありません。だめだったことを書いてみましょう。
y_waiwai

2021/07/19 10:19

ならそこんところを聞けばどうでしょう
退会済みユーザー

退会済みユーザー

2021/07/19 11:04

> 配列をdouble型に変換しないとグラフ化できない、または難しいのか。 Chart を使うならできない。難しくはない。 > その場合どうすればよいのか。 double 型にパースする。 > string型のままできるならどうすればよいのか。 できない。
pepperleaf

2021/07/19 12:52

> listLv.ConvertAll(double.Parse); listLv に数字じゃない文字列があると失敗しますが、それは確認済みでしょうか?
退会済みユーザー

退会済みユーザー

2021/07/19 22:00

Test.log ファイルのサンプルを出せませんか?
guest

回答1

0

勘ですけど、エラーが出ている for 文の部分を以下のようにすると、とりあえず意図した結果になるかわからないですがコンパイルは通るようになりませんか?

csharp

1// データをシリーズにセットします 2for (int i = 0; i < 18; i++){ 3 DataPoint dp = new DataPoint(double.Parse(listX[i]), double.Parse(listY[i])); 4 chart1.Series[graph1].Points.Add(dp); 5}

以下の前提条件が満たされれば恐らくですが実行時エラーもなく動くと思います。(意図した形のグラフになるかは別問題)

  • listX, listY には double に変換できる数値のデータがきちんと正しく入っている
  • listX, listY には 18 件以上のデータが入っている

もし、ダメでしたらどういう入力データ (Test.log の内容) を元に、どういったグラフを出したいのかといった情報を追記していただければ、より詳しい回答が付くと思います。

投稿2021/07/20 00:15

okazuki0130

総合スコア185

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問