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

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

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

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

Q&A

解決済

1回答

2818閲覧

CSVファイル内の要素を配列に格納し、最大値および最小値を求めたい。

rnmr

総合スコア7

C#

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

0グッド

0クリップ

投稿2020/01/08 07:09

CSVファイル内の要素を配列に格納し、最大値および最小値を求めたい。

Visual Studio 2019のWindowsフォームアプリケーション(.NETFrameworks)を使用しております。
下記のようなコードでCSVファイルを読み込み要素をstring型からint型に変換し、
数値情報として新規CSVファイルに格納しております。格納した配列から最大値(および最小値)を求めたいのですが、Max()の関数では行ごとの最大値しか表示されないようでデータ全体から要素の最大値を抽出する方法がわかっておりません。データを1行ごとに配列に格納するのではなく、1要素ごとに独立して格納させる方法についてご存知の方おられましたら、ご教授願います。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Imaging; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using OpenCvSharp; using OpenCvSharp.Extensions; using System.Runtime.InteropServices; using System.Windows; using System.Windows.Media; using System.Windows.Media.Imaging; using System.IO; using System.Diagnostics; using AForge.Imaging.Filters; using ImagingSolution.Imaging; namespace image { public partial class Form1 : Form { public static int[] Array; public static int T, Y; public Form1() { InitializeComponent(); StreamReader sr = new StreamReader(@"D:\sources\1_map.txt"); { while (!sr.EndOfStream) { string line = sr.ReadLine(); string[] values = line.Split('\t'); List<string> lists = new List<string>(); lists.AddRange(values); for (int i=0;i<lists.Count;i=i+1) { int[] intArray = lists.Select(int.Parse).ToArray(); //Array = intArray; var create = true; using (var sw = new System.IO.StreamWriter(@"D:\sources\test_map.csv", create)) { sw.WriteLine(intArray[i]); } } hgt++; Y = values.Length;//画像横の長さ(画素数) } } T = hgt;//画像縦の長さ label9.Text = Convert.ToString(T+","+Y+","); Bitmap img = new Bitmap(Y, T); Graphics g = Graphics.FromImage(img); img.Save(@"D:\sources\new1.jpg"); } }

試したこと

while()内のfor()内部に整数型の変数で1ずつ加算し、データの点数を記録することはできましたが
それを使用して
int cnt = 0;
while(){
for(){
...
Array[cnt + i] = intArray[i];
cnt++;
}
}
のようにグローバル変数に格納しようとしたところ
「オブジェクト参照がオブジェクト インスタンスに設定されていません。」
の例外処理となってしまいました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

int[] Array;

が初期化されていないため、
int[] Array = int[256];
のようにするか、
List<int> Array = new List<int>();
のようにするかだと思います。

投稿2020/01/08 07:12

homu_homu_ai

総合スコア96

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

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

homu_homu_ai

2020/01/08 07:13

List<int> Array = new List<int>(); にした場合、代入方法は Array.Add(intArray[i]); になります。
rnmr

2020/01/08 08:20

>homu_homu_ai さん 回答誠にありがとうございます。教えてくださったList...の方の代入方法で 試してみたところ、行数を超えた値の情報を抽出することができました。 またMax()関数によって最大値を求めることもできました。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問