Вы можете сделать это несколькими способами, и это зависит от того, хотите ли вы использовать зубчатый массив или многомерный массив.
Вероятно, есть более краткие способы сделать это, однако, вы можете увидеть идею.
Jagged
var jaggedArray = File.ReadAllLines(@"d:\right.txt")
.Where(x => !string.IsNullOrWhiteSpace(x))
.Select(x => x.Split(new[]{' '},StringSplitOptions.RemoveEmptyEntries)
.Select(double.Parse)
.ToArray())
.ToArray();
Многомерный
var lines = File.ReadAllLines(@"d:\right.txt")
.Where(x => !string.IsNullOrWhiteSpace(x))
.Select(x => x.Split(new[]{' '},StringSplitOptions.RemoveEmptyEntries)
.Select(double.Parse)
.ToList())
.ToList();
var h = lines.Count();
var w = lines.Max(x => x.Count);
var multiArray = new double[h, w];
for (var i = 0; i < lines.Count; i++)
for (var j = 0; j < lines[i].Count; j++)
multiArray[i, j] = lines[i][j];
Примечание : Полностью не проверено, и я не несу ответственности за нанесение увечий или нанесение другого вреда этим кодом
Примечание 2 : нет проверки ошибок или отказоустойчивости, если в вашем файле есть мусор, это, скорее всего, приведет к
Обновление
Есть ли способ отладить / исправить это? Может быть, проблема в том, что двойной
значения разделены 3 пробелами, а не только 1 пробел? Есть ли
способ исправить это в операторе LINQ?
Да, если есть несколько пробелов, использование StringSplitOptions.RemoveEmptyEntries
должно работать
Split(new [] {' '},StringSplitOptions.RemoveEmptyEntries)
Однако обратите внимание, это действительно предполагает, что каждое отдельное значение может быть преобразовано в double
, и нет пустых строк (даже в конце файла)
Вы можете решить проблему с пустой строкой, используя что-то вроде этого, включенное в оператор linq
File.ReadAllLines(@"right.txt")
.Where(x => !string.IsNullOrWhiteSpace(x))
...