вставить одномерный массив в двумерный

303
26 ноября 2017, 12:09

у меня есть небольшая проблема есть файл который записан в опредленном порядке но существует проблема мне необходимо извлечь данные и переписать этот фаил в другом порядке а именно оригинал записан так что немного напоминает csv фаил но не распознается таковым по этому прибегают к написанию данного кода необходимо все слова записать в массив затем данный массив преобразовать в двумерный массив при условии что каждые каждые 49 элементов массива ( одномерного ) записать на новою строку я аписал короткий кусочек кода но он роботает чястично

class Program
{
public static bool ender = true;
public static int I, P;
public static string co = ",";
public  const int ele = 49;
static void Main(string[] args)
{        
    string lin = @"C:\Users\SomeUser\Desktop\New folder (7)\flltest.txt";
    using (StreamReader fs = new StreamReader(lin, 
     Encoding.GetEncoding("windows-1255")))
        while (true)
        {
            string temp = fs.ReadLine();
            Char delimiter = ',';
            String[] substrings = temp.Split(delimiter);
            string[,] Hum = new string[P,I];
            while (ender == true)
            {
                for (int P = 1; P < substrings.Length/49 ; P++)
                {
                    for (int I = 1; I < 49 ; I++)
                    {
                        Hum[P,I] = substrings[I];
                    }
                }
              ender = false;
            }
        }
    }
}

я провел тщательный дебаг кода но увы по отсутствию знаний двумерный массив не получить значение от одномерного массива была еще одна идея присвоить значения определенного индекса одномерного массива к локальной переменной но там тоже не получилось зарание благодарю за помощь

Answer 1
  1. Вы объявили статические поля I и P. И создали массив с размерами I на P. Но нигде эти поля не инициализировали. Они у Вас равны нулю. Соответственно, string[,] Hum = new string[P,I]; - эквивалентно string[,] Hum = new string[0,0];. Возможно, это нужно записать как new string[substrings.Length/ele, ele];. Но Вы объявляете этот массив для каждой считанной строки. Возможно, это правильно. Но я не уверен.
  2. Индексы в C# начинаются с нуля. Т.е. циклы тоже должны идти с нуля, а не с единицы.
  3. Проверки на то, что Вы считали хотя бы что-то из файла нет. Соответственно, когда дойдём до конца - Вы об этом никак не узнаете и получите исключение.
  4. Очень, очень, ОЧЕНЬ плохая идея сначала объявить поле/свойство класса, а потом использовать такие же обозначения для объявления переменной цикла. Да, это объявление "спрячет" поле. И это отличный способ запутать вероятного противника. Но в данном случае противник - это Вы сами.
READ ALSO
Программный доступ к проекту Visual Basic не является доверенным

Программный доступ к проекту Visual Basic не является доверенным

Не получается запустить макрос vba в проекте c#Подскажите, что я делаю не так

355
Unity загрузка спрайта из сети

Unity загрузка спрайта из сети

Здравствуйте, как в Unity объекту UI Image присвоить спрайт из сети, по определенной ссылке? Или как его можно загрузить в проект и сохранить в нем...

298
cudafy получение активной информации

cudafy получение активной информации

как на C# в библиотеке cudafy получить информацию о температуре видеокарты, на сколько она загружена и возможно ли управлять её частотой и напряжением?

227
Конструктор List&lt;T&gt;(IEnumerable&lt;T&gt;)?

Конструктор List<T>(IEnumerable<T>)?

Добрый деньВозник вопрос следующего характера: согласно офф

447