чтение из файла и разделение информации на основе символа c#

#c# #split #streamreader

#c# #разделение #streamreader

Вопрос:

я считываю информацию из текстового файла, и я хочу просмотреть текстовый файл строка за строкой, и в каждой строке я хочу отделить каждое предложение от другого на основе символа (например, ‘,’), и я хочу сохранить данные в массиве, но когда я печатаю его, яя получаю только последний результат.

      private void button1_Click_1(object sender, EventArgs e)
    {
        string StringArray = null;
        //to get the browsed file and get sure it is not curropted
        try 
        {
            DialogResult result = openFileDialog1.ShowDialog();
            if (result == DialogResult.OK)
            {
                using (StreamReader sr = new StreamReader(openFileDialog1.FileName))
                {
                    string data;
                    while ((data = sr.ReadLine()) != null)
                    {
                    StringArray = data.Split(',');
                    }
                }
                   for (int i = 0; i < StringArray.Length; i  )
                    {
                        textBox1.Text = StringArray[i];
                    }
                FilePath.Text = openFileDialog1.FileName;
                textBox1.Text = (string)File.ReadAllText(FilePath.Text);
            }
        }
        catch(IOException ex) 
        {

            MessageBox.Show("there is an error"   ex  "in the file please try again");
        }


    }
  

Ответ №1:

Вот ваша ошибка:

Выше вы определяете:

 string StringArray = null;
  

Затем позже вы используете его как:

 StringArray = information.ToString().Split(SplitCommas);
  

Разделение возвращает строку[], а не строку. вам нужно изменить объявление вверху на..

 string[] StringArray;
  

Ошибка: «не удается неявно преобразовать тип string[] в string». должно дать вам подсказку, что вы пытаетесь сохранить массив строк в строку.

Комментарии:

1. я сделал то, что вы сказали, проблема в том, что когда я печатаю его, я просто получаю последний результат и печатаю его в цикле for

2. Когда вы говорите «распечатать», вы имеете в виду установить textbox1.Text?? Если это так, вы устанавливаете textbox1 много-много раз на новые значения, но перезаписываете предыдущее значение, которое вы написали. Что вы, вероятно, хотите сделать, это добавить текст (например, textbox1.text = stringArray[i] , хотя stringbuilder был бы более применим). Я бы предположил, что это не последняя ошибка, которую вы обнаружите в этом коде, поэтому я рекомендую добавить некоторые точки останова и включить их немного дольше.

3. Проблема, с которой он сталкивается, заключается в том, что он заменяет свой массив внутри цикла, пока не прочитает конец файла, поэтому единственным значением в строковом массиве является последняя прочитанная строка. Я бы рекомендовал список<string> для массива строк, а затем добавить данные диапазона. Разделите («,») так, чтобы цикл for получал все разделенные строки.

4. Да, там есть и другие ошибки, например, в самом конце перезаписывается все изменения form1 с помощью нового чтения файла. Я предполагаю, что он здесь немного больше новичок, и он поймет это после некоторой отладки. Фактически большая часть исходного кода может быть переписана в строку[][] output = System.IO.File . ReadAllText(ИМЯ ФАЙЛА). Заменить («r»,»»).Разделить (‘n’). ToList().Select(a=>a.Split(‘,’)). toArray(); но какая польза от этого, чтобы помочь ему учиться.

Ответ №2:

Вам необходимо определить stringArray как String[]

 string[] StringArray = null;
  

Возможно, вам лучше использовать String.Split вместо цикла for

 StringArray = data.Split(',');
  

Ответ №3:

В вашей 3-й строке вы объявляете String array как строку, вы должны объявить его как массив:

 string [] StringArray = null;