1

Я пытаюсь построить график из файла .csv. разделители между значениями - запятые. Вот так выглядит структура .csv файла

введите сюда описание изображения

Разделяю значения с помощью Split, и они в считанном массиве даже правильно располагаются (проверяю с помощью вывода в MessageBox.)

Но как только я пытаю считанные значения записывать в массивы (для каждого столбца свой массив) - то сразу вылазит такая ошибка как на картинке

Вот так выглядит сообщение об ошибке

An unhandled exception of type 'System.NullReferenceException' occurred in ICSpray.exe Additional information: Ссылка на объект не указывает на экземпляр объекта.

Но основная задача, считать каждые столбцы, и по ним построить графики с помощью MSChart либо ZedGraph. И вот на этапе записи данных в нужные мне массивы из за этой ошибки остановился.. Как решить задачу?

Вот так выглядит код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ZedGraph;
using System.IO;
using System.Windows.Forms.DataVisualization.Charting;

namespace ICSpray
{
    public partial class Form2 : Form
    {
        string[] slist = new string[5] {"0","0","0","0","0"};       
        public string[] data_temp_in;
        public string[] data_temp_out;
        public string[] data_oroshenie_status;
        public string[] data_temptriger_status;
        public string[] data_t_vpsrisk;

        public string data1_read;

        public int i=0;
        public Form2()
        {
            InitializeComponent();           
        }

        private void chart1_Click(object sender, EventArgs e)
        {
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.Filter = "Cursor Files|*.csv";
            openFileDialog1.Title = "Выберите ранее записанный график в формате .csv";

            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                System.IO.StreamReader sr = new
                System.IO.StreamReader(openFileDialog1.FileName);
                data1_read =sr.ReadLine();

                data_temp_in[i] = slist[0]; //на этом этапе выскакивает ошибка
                data_temp_out[i] = slist[1];
                data_oroshenie_status[i] = slist[2];
                data_temptriger_status[i] = slist[3];
                data_t_vpsrisk[i] = slist[4];
                i++;

                sr.Close();
            }            
        }
    }
}
ukr823f
  • 11
  • @ukr823f: Эхм. Вы до этого наверное на C++ писали, да? Наводящий вопрос: а сколько элементов, как вам кажется, в массиве data_temp_in после такой инициализации? – VladD Sep 23 '15 at 20:12
  • @Discord: Вроде бы именно такого случая (неинициализированный массив) в вашем мегаответе нету. – VladD Sep 23 '15 at 20:14
  • Я понял о чём вы говорите. Но теперь вообще запутался как быть. я новичёк ещё. И вот вроде указал программе что будет массив , а какой он и из скольки элесентов не указал. А как этэ сделать я что то непойму, ведь в разных файлах открываемых мной может быть много элементов, и я немогу создать массив фиксированной длины – ukr823f Sep 23 '15 at 20:15
  • @ukr823f: Окей. Вам нужен как бы массив, но чтобы его длину можно было изменять. То есть, List<int>. Посмотрите в ответ, там вам посоветовали то же самое. – VladD Sep 23 '15 at 20:18
  • @VladD Массивы там как раз очень даже есть. – Kyubey Sep 23 '15 at 20:26
  • @Discord: Ну, я не нашёл упоминания о том, что int[] x даёт x = null, в отличие от c/c++, в котором int x[] не nullptr (если скомпилируется). Для новичков это часто точка непонимания. – VladD Sep 23 '15 at 20:30
  • @VladD уже лучше, но считывается только значение из первой строки, а мен нужно весь столбец считать и запихнуть в массив из которого построить график System.IO.StreamReader sr = new System.IO.StreamReader(openFileDialog1.FileName); data1_read =sr.ReadLine(); string[] slist = data1_read.Split(','); data_temp_in.Add(slist[0]); foreach (var temp_in in data_temp_in) { MessageBox.Show(Convert.ToString(temp_in) + ""); } – ukr823f Sep 23 '15 at 20:31
  • @Discord: Есть int[] numbers = null;, что немного не то из-за явного null. – VladD Sep 23 '15 at 20:32
  • @ukr823f: Если у вас новая проблема, может, задайте новый вопрос? – VladD Sep 23 '15 at 20:40
  • @VladD создал новый вопрос – ukr823f Sep 23 '15 at 20:46