Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2016, 15:32   #1
stodeer
Пользователь
 
Аватар для stodeer
 
Регистрация: 23.10.2016
Сообщений: 20
Вопрос C# Считывание массива из файла

Нужно считать массив из файла и оперировать им (сумма элементов, сортировка и т.п.)...
Итак,
Код:
//Ввод2:Считать из файла
        void readArray(int[] args)
        {
            string[] intArray = null;
            string filePath;
            Console.Write("Путь файла: ");
            filePath = Console.ReadLine();
            intArray = File.ReadAllText(filePath).Split(' ').ToArray();
            Console.Write("Массив из файла: {0}", intArray);
            Console.ReadLine();
        }

Считывает неправильно (скрин ниже):


Посоветуйте, как лучше реализовать все это?
stodeer вне форума Ответить с цитированием
Старый 23.10.2016, 15:38   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Код:
Console.Write("Массив из файла: {0}", String.Join(", ", intArray));
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 23.10.2016, 16:00   #3
stodeer
Пользователь
 
Аватар для stodeer
 
Регистрация: 23.10.2016
Сообщений: 20
По умолчанию

Отлично, спасибо, Alex11223.

Только у меня, нуба, не получается с ним работать.
Код:
class Program
    {
        int[] intArray = null;
        int inputChoice = 0;
        int inputChoiceLength = 0;
        bool exit = true;

        //Ввод2:Считать из файла
        void readArray(int[] intArrayP)
        {
            string[] intArray = null;
            string filePath;
            Console.Write("Путь файла: ");
            filePath = Console.ReadLine();
            intArray = File.ReadAllText(filePath).Split(' ').ToArray();
            Console.Write("Массив из файла: {0}", String.Join(" ", intArray));
            Console.ReadLine();
        }

        //1a4 Новый массив из четных элементов исходного
        void newEven(int[] intArrayP)
        {
            int[] newEvenAr = new int[inputChoiceLength];
            int k = 0;
            foreach (int x in intArray)
            {
                if (x % 2 == 0)
                {
                    newEvenAr[k] = x;
                    k = k + 1;
                }
            }
            Console.WriteLine("Новый массив из четных элементов исходного: ");
            for (int i = 0; i < k; i++)
                Console.Write("{0:d} ", newEvenAr[i]);
            Console.WriteLine();
            Console.ReadLine();
        }
^ ничего не выводит
и затем указывает ошибку в отладке (скрин ниже):

что не так?
stodeer вне форума Ответить с цитированием
Старый 23.10.2016, 16:26   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так а что вы передаете туда? Ошибка говорит, что он null.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 23.10.2016, 17:25   #5
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

В методе readArray ты создаёшь локальный массив строк, а потом не сохраняешь. Думаю, дело в этом.

Попробуй добавить
Код:
for(int i = 0; i< intArray.Length; i++) intArrayP[i]=int.Parse(intArray[i]);
А вообще, меня напрягает локальный массив строк, названный так же, как и поле массива int.
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 26.10.2016, 18:25   #6
stodeer
Пользователь
 
Аватар для stodeer
 
Регистрация: 23.10.2016
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Так а что вы передаете туда? Ошибка говорит, что он null.
Alex11223, Я пытаюсь(?) передать числа из файла в массив, чтобы с ним потом раюотать. Как сделать, В чем недочеты кода?

Цитата:
Сообщение от New man Посмотреть сообщение
В методе readArray ты создаёшь локальный массив строк, а потом не сохраняешь. Думаю, дело в этом.
Попробуй добавить
Код:
for(int i = 0; i< intArray.Length; i++) intArrayP[i]=int.Parse(intArray[i]);
А вообще, меня напрягает локальный массив строк, названный так же, как и поле массива int.
New man, Где следует объявить intArrayP?
stodeer вне форума Ответить с цитированием
Старый 26.10.2016, 19:14   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от stodeer Посмотреть сообщение
Как сделать, В чем недочеты кода?
Не передавать в параметры функции наугад что попало, не путать локальные переменные одной функции с локальными переменными другой и не ожидать что значения переменных одной функции сами внезапно станут доступны в другой, не называть массив строк intArray.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 27.10.2016, 15:32   #8
stodeer
Пользователь
 
Аватар для stodeer
 
Регистрация: 23.10.2016
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Не передавать в параметры функции наугад что попало, не путать локальные переменные одной функции с локальными переменными другой и не ожидать что значения переменных одной функции сами внезапно станут доступны в другой, не называть массив строк intArray.
Ок, вы предлагаете переназвать все intArray в просто Array, например. Так?
Но это не решает моей проблемы с тем, что значения из файла не считываются в массив. Idontunderstand
stodeer вне форума Ответить с цитированием
Старый 27.10.2016, 15:33   #9
stodeer
Пользователь
 
Аватар для stodeer
 
Регистрация: 23.10.2016
Сообщений: 20
По умолчанию

Вот весь код, чтобы было понятно, что я делаю:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace Array_Rang_2
{
    class Program
    {
        /*static int[] intArray = null;
        static int inputChoice = 0;
        static int inputChoiceLength = 0;
        static bool exit = true;*/

        int[] intArray = null;
        int inputChoice = 0;
        int inputChoiceLength = 0;
        bool exit = true;

        //Ввод1:Ввод с клавиатуры
        //static void inputArray(int[] intArrayP)
        void inputArray(int[] intArrayP)
        {
            Console.Write("\n Размерность массива: ");
            inputChoiceLength = Convert.ToInt32(Console.ReadLine());
            intArray = new int[inputChoiceLength];
            for (int i = 0; i < intArray.Length; i++)
            {
                Console.Write("intArray[" + i + "] = ");
                intArray[i] = Convert.ToInt32(Console.ReadLine());
            }
        }

        //Ввод2:Считать из файла
        void readArray(int[] args)
        {
            string[] intArray = null;
            string filePath;
            Console.Write("Путь файла: ");
            filePath = Console.ReadLine();
            intArray = File.ReadAllText(filePath).Split(' ').ToArray();
            /* for (int i = 0; i < intArray.Length; i++) 
            { 
                inrArrayP[i] = int.Parse(intArray[i]); 
            } */ //предложение с форума
            Console.Write("Массив из файла: {0}", String.Join(" ", intArray));
            Console.ReadLine();
        }

        //1a2 Вывести Max, Min элементы исходного
        void maxMin(int[] intArrayP)
        {
            int amax = intArray[0];
            int imax = 0;
            int amin = intArray[0];
            int imin = 0;
            for (int i = 1; i < inputChoiceLength; i++)
            {
                if (intArray[i] > amax)
                {
                    amax = intArray[i];
                    imax = i;
                }
                if (intArray[i] < amin)
                {
                    amin = intArray[i];
                    imin = i;
                }
            }
            Console.WriteLine("Max: a[" + imax + "]=" + intArray[imax]);
            Console.WriteLine("Min: a[" + imin + "]=" + intArray[imin]);
            Console.ReadKey();
        }

        // 1a3 Сортировка
        void sort(int[] intArrayP)
        {
            int amax, imax;
            for (int i = 0; i < (inputChoiceLength - 1); i++)
            {
                amax = intArray[i];
                imax = i;
                for (int j = i + 1; j < inputChoiceLength; j++)
                {
                    if (intArray[j] > amax)
                    {
                        amax = intArray[j];
                        imax = j;
                    }
                }
                intArray[imax] = intArray[i];
                intArray[i] = amax;
            }
            Console.WriteLine("Отсортированный (по убыванию) массив: ");
            for (int i = 0; i < inputChoiceLength; i++)
                Console.Write("{0:d} ", intArray[i]);
            Console.WriteLine();

            for (int i = 0; i < (inputChoiceLength - 1); i++)
            {
                amax = intArray[i];
                imax = i;
                for (int j = i + 1; j < inputChoiceLength; j++)
                {
                    if (intArray[j] < amax)
                    {
                        amax = intArray[j];
                        imax = j;
                    }
                }
                intArray[imax] = intArray[i];
                intArray[i] = amax;
            }
            Console.WriteLine("Отсортированный (по возрастанию) массив: ");
            for (int i = 0; i < inputChoiceLength; i++)
                Console.Write("{0:d} ", intArray[i]);
            Console.WriteLine();
            Console.ReadLine();
        }

        // 1a4 Новый массив из четных элементов исходного
        void newEven(int[] intArrayP)
        {
            int[] newEvenAr = new int[inputChoiceLength];
            int k = 0;
            foreach (int x in intArray)
            {
                if (x % 2 == 0)
                {
                    newEvenAr[k] = x;
                    k = k + 1;
                }
            }
            Console.WriteLine("Новый массив из четных чисел исходного: ");
            for (int i = 0; i < k; i++)
                Console.Write("{0:d} ", newEvenAr[i]);
            Console.ReadLine();
        }

          //static void sumArray(int[] intArrayP)
          void sumArray(int[] intArrayP)
          {
              int sum = 0;
              Console.WriteLine("\n Массив: intArray ");
              for (int i = 0; i < intArray.Length; i++)
              {
                  sum = sum + intArray[i];
                  if (i > 4)
                      Console.WriteLine();
                  //Console.Write(" intArray[" + i + "] = " + intArray[i]);
                  Console.Write(" intArray[{0}] = {1}", i, intArray[i]);
              }
              Console.WriteLine("\n Сумма = " + sum);
              Console.WriteLine();
          }

        //static void menu()
        void menu()
        {
            while (exit)
            {
                Console.SetCursorPosition(1, 1);
                Console.BackgroundColor = ConsoleColor.DarkMagenta;
                Console.ForegroundColor = ConsoleColor.White;
                Console.Write("Выберите опцию: \n 0 - чтение массива из файла \n 1 – ввод c клавиатуры 
\n 2 – max, min элемент массива \n 3 - сумма элементов массива 
\n 4 – массив из четных элементов исходного \n 5 – сортировка \n 6 - выход \n");
                Console.ResetColor();
                inputChoice = Convert.ToInt32(Console.ReadLine());
                //Console.WriteLine("inputChoice = " + inputChoice);
                switch (inputChoice)
                {
                    case 0: readArray(intArray);
                        break;
                    case 1: inputArray(intArray);
                        break;
                    case 2: maxMin(intArray);
                        break;
                    case 3: sumArray(intArray);
                        break;
                    case 4: newEven(intArray);
                        break;
                    case 5: sort(intArray);
                        break;
                    case 6: exit = false;
                        break;
                }
                if (exit == true)
                {
                    Console.WriteLine("Нажмите любую клавишу для продолжения...");
                    Console.ReadKey();
                }
                Console.Clear();
            }
        }

        static void Main(string[] args)
        {
            int i = 1;
            i++;
            //menu();
            Program p = new Program();
            p.menu();
        }
    }
}
Может, я что-то не так разъясняю.
И это еще даже не все. Это моя лаб/работа, в которой пункты: одномерные массивы и работа с ними, одномерные массивы с использованием System.Array, двумерные массивы, ступенчатые массивы, ввод с клавы и из файла... Куча пунктов, а я, нубец, сижу все еще с этим

Последний раз редактировалось stodeer; 27.10.2016 в 15:43. Причина: не дописано
stodeer вне форума Ответить с цитированием
Старый 27.10.2016, 15:47   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от stodeer Посмотреть сообщение
Ок, вы предлагаете переназвать все intArray в просто Array, например. Так?
Но это не решает моей проблемы с тем, что значения из файла не считываются в массив
А то что было в моем сообщении до intArray не читали?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Считывание массива strnggrid Вероника92 Общие вопросы Delphi 3 13.10.2016 09:43
Считывание с Com порта, очистка массива Dmitri4 Общие вопросы Delphi 7 05.04.2016 18:56
Считывание из файла чисел, сортировка массива с++ Tresk Помощь студентам 13 07.11.2010 20:01
Считывание массива из файла slKAHN Общие вопросы C/C++ 1 15.11.2009 15:01
Считывание массива из файла slKAHN Общие вопросы C/C++ 2 15.11.2009 14:01