#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;