テキストファイルから読み取り作成した配列からグラフを作りたいです。
以下のコードのように作っていて、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がエラーになってしまいます。
うまくいかないとはどうなるんでしょうか
エラーがでてしまい、解決方法がわからない状態です。
> stringからdoubleへ型を変換しようとParseなど試してみた
との事ですが、どう、うまくいかなかったのでしょうか?
グラフは、数値データです。文字列のままではできません、、(少なくともC#では) また、文字列→数字はそんなに難しくはありません。だめだったことを書いてみましょう。
ならそこんところを聞けばどうでしょう
> 配列をdouble型に変換しないとグラフ化できない、または難しいのか。
Chart を使うならできない。難しくはない。
> その場合どうすればよいのか。
double 型にパースする。
> string型のままできるならどうすればよいのか。
できない。
> listLv.ConvertAll(double.Parse);
listLv に数字じゃない文字列があると失敗しますが、それは確認済みでしょうか?
Test.log ファイルのサンプルを出せませんか?