🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

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

Q&A

解決済

2回答

4681閲覧

C# textファイルのデータからグラフを書く方法

hiro0215

総合スコア15

C#

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

0グッド

0クリップ

投稿2019/12/19 01:35

いつもお世話になっております。
C#を独学で勉強している者です。
visualStudioでフォームからchartを使って、textファイルからデータを読んでグラフを書こうと挑戦しているのですが、読み込んだtextファイルがうまく扱えずグラフ化する事ができません。

C#

1         string result = sr.ReadLine(); 2 3 string legend = "グラフ1"; 4 5 chart1.Series.Clear(); 6 7 chart1.Series.Add(legend); 8 chart1.Series[legend].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; 9 chart1.Series[legend].LegendText = legend; 10 string[] xValues = new string[] { "ここがわからない" }; 11 string[] yValues = new string[] { "ここがわからない"}; 12 13 for (int i = 0; i < xValues.Length; i++) 14 { 15 16 System.Windows.Forms.DataVisualization.Charting.DataPoint dp = new System.Windows.Forms.DataVisualization.Charting.DataPoint(); 17 dp.SetValueXY(xValues[i], yValues[i]); 18 dp.IsValueShownAsLabel = true; 19 chart1.Series[legend].Points.Add(dp); 20 } 21 } 22 sr.Close(); 23 sr.Dispose();

これは自分が安直に「textファイルを読み込んでグラフ化のコードに入れればいけるだろう。」と合体させた物です。ただ、やはりこのままでは上手くいくわけもなく、"ここがわからない"の所に「result.Substring(0,8)」と入れてみたところ、軸データとして最後の一行の時間だけ表示されました・・・。

textファイルには

12:34:56 00 1.23 000

といった数字が数百行入っています。
そこからグラフの数字として12:34:56と1.23にあたる部分をグラフの数値として使いたいのです。
勉強不足で何か足りてないと思うのですが何が悪いのかもわからず、修正に悩んでいます。
どのようにしたらよいでしょうか?よろしくお願いします。

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

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

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

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

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

guest

回答2

0

12:34:56 00 1.23 000

それは CSV 形式のカンマが空白に変わっただけのものと理解して良いのですか?

であれば、空白で Split して文字列の配列を取得し、その 1 番目と 3 番目(配列のインデックスで言うと 0 と 2)の要素を取得して DataTable などに保持し、それを Chart にデータバインドするようにしてはいかがですか?

他にも CSV ファイルから ADO.NET の DataReader を使って読んでくるなどいろいろ方法があります。詳しくは Sample を入手して見てみると良いと思います。

イメージ説明

投稿2019/12/19 02:47

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

hiro0215

2019/12/19 04:49

コードありがとうございます。 言われて調べてみましたところ、拡張子は.setでした。 空白はタブで開けてあるようです。 csvに拡張子を変えてExcelで表示してみたところ、1セルに1行が空白省いた状態で凝縮して入っていました。 そのせいか OleDbDataReader myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection); の所で「FROM句の構文エラー」と表示されました。 調べ不足、説明不足ですいませんでした。
退会済みユーザー

退会済みユーザー

2019/12/19 05:22

その先は自分で調べて解決するということで良いのですか? もし聞きたいことがあるのなら何を聞きたいのか分かるように書いてください。
hiro0215

2019/12/19 05:32

度々すいません。 タブで区切られていた.setファイルの場合、何かコードを書き加える必要があるのでしょうか? 「FROM句の構文エラー」は何が原因で起きていると想定できるでしょうか? よろしくお願いします
退会済みユーザー

退会済みユーザー

2019/12/19 06:17 編集

紹介したサンプルの画像のコードを、データソースが CSV ファイルでない(カンマ区切りが前提なのにそれがタブ区切りになっている)のに試したのですか? タブ区切りのテキストファイルを、CSV ファイル(カンマ区切り)と同様に、紹介したサンプルの JET + ADO.NET で読む方法があるのかは考えたこともないので知りません。 最初の回答に書いたようにタブで Split するのを試してみてはいかがですか?
hiro0215

2019/12/20 01:23

今回色々教えていただきありがとうございました。 コードの大部分でまだ自分では理解できない部分も多く勉強不足を痛感しました。 Splitという単語を聞いてタブで文字列をわけるなどいろいろな方法がある事を知りました。 いただいたサンプルコードを少しずつ勉強してどこで何をやっているのか理解できるように努力します。 今回は本当にありがとうございました。
guest

0

ベストアンサー

まずは一度にやろうとしないほうがよろしいかと思います。

まずは
1.ファイルを読み込み全データを配列なりに読み込む
2.1で作成した配列なりのデータをグラフに表示する
と処理を分けたほうが理解しやすいです。

投稿2019/12/19 02:14

YAmaGNZ

総合スコア10469

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

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

hiro0215

2019/12/20 01:27

やりたい事を分けたら意外とすんなりできました。 どうやらファイルを読み込んで文字列は配列に格納出来ていたようで、できなかった理由はX軸・Y軸の指定にあったようでした。 配列[n]から必要な部分を抜き出して座標にあてはめたらグラフ表示に至りました。 本来だとこのやり方だと何かしら問題が起きそうですが、欲しい形にはなったのでとりあえず問題解決とさせていただきました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問