Visual C# Не может загрузить CSV-файл в 2D-массив

#csv #sorting #multidimensional-array

Вопрос:

У меня есть очень простой файл .csv с идентификаторами и серийными номерами, фактическое приложение не будет знать, сколько строк, но всегда будет иметь два столбца

1,16600687 2,16600939 3,16604031 4,16607302

У меня есть все остальное, но я загружаю данные только в массив 1D, и запятая остается в данных

Результат, который я получаю, это строковое значение для 3-й позиции 3,16604031 Как мне разделить это, чтобы это был 2D массив со значением get [2,0] равно 3, а значение get [2,1] равно 16604031 ?

 private void button1_Click(object sender, EventArgs e)  {  string stFileNamenPath = "(put location of file here)";  DialogResult result = openFileDialog1.ShowDialog();   StreamReader sr = new StreamReader(stFileNamenPath);   string[] sortArray = null;  while (!sr.EndOfStream)  {  string strResult = sr.ReadToEnd();  sortArray = strResult.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);  }  string stTest = (string)sortArray.GetValue(2);  MessageBox.Show("string value for 3rd position is "   stTest);  }  

CSV-файл

 1,16600687 2,16600939 3,16604031 4,16607302  

Ответ №1:

Ответ, который приходит мне на ум, — это просто оператор LINQ, за которым следует оператор Select. Первый для фильтрации, а второй для фактического изменения имеющихся у вас данных. Ваш код был бы примерно таким

 string stFileNamenPath = "(put location of file here)";  //DialogResult result = openFileDialog1.ShowDialog();  StreamReader sr = new StreamReader(stFileNamenPath);  string[] sortArray = null;  while (!sr.EndOfStream)  {  string strResult = sr.ReadToEnd();  sortArray = strResult.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);  }  char separator = ',';  var mappedArray = sortArray  .Where(x =gt; !string.IsNullOrEmpty(x) amp;amp; !string.IsNullOrWhiteSpace(x))  .Select(x =gt; new string[] { x.Split(separator)[0], x.Split(separator)[1] }).ToArray();   var stTest = mappedArray[2][1];  MessageBox.Show("string value for 3rd position is "   stTest);  

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

1. Это сработало идеально. Спасибо

2. Всегда пожалуйста. Любые «большие пальцы вверх» или положительные отзывы будут высоко оценены!

3. У меня недостаточно участия, чтобы проголосовать, но большое вам спасибо за удивительно простое и элегантное решение