C # - Как разобрать текстовый файл (разделенные пробелами цифры)? - PullRequest
6 голосов
/ 20 мая 2011

Учитывая файл данных, разделенный пробелами,

10 10 10 10 222 331 
2 3 3 4 45
4 2 2 4

Как прочитать этот файл и загрузить в массив

Спасибо

Ответы [ 4 ]

13 голосов
/ 20 мая 2011
var fileContent = File.ReadAllText(fileName);
var array = fileContent.Split((string[])null, StringSplitOptions.RemoveEmptyEntries);

если у вас есть только цифры и вам нужен список int, вы можете сделать это:

var numbers = array.Select(arg => int.Parse(arg)).ToList();
6 голосов
/ 20 мая 2011

Это зависит от типа массива, который вы хотите. Если вы хотите объединить все в одномерный массив, воспользуйтесь ответом Алекса Азы, в противном случае, если вам нужен двумерный массив, который отображается на линии и элементы в текстовом файле:

var array = File.ReadAllLines(filename)
                .Select(line => line.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries))
                .Where(line => !string.IsNullOrWhiteSpace(line)) // Use this to filter blank lines.
                .Select(int.Parse) // Assuming you want an int array.
                .ToArray();

Имейте в виду, что обработка ошибок не выполняется, поэтому в случае сбоя синтаксического анализа приведенный выше код вызовет исключение.

1 голос
/ 20 мая 2011

Вас заинтересуют StreamReader.ReadLine() и String.Split()

0 голосов
/ 01 апреля 2014

Я не смог получить Быстрый ответ Джо Смита на работу, поэтому я изменил его. Я поместил измененный код в статический метод в классе «FileReader»:

public static double[][] readWhitespaceDelimitedDoubles(string[] input)
{
    double[][] array = input.Where(line => !String.IsNullOrWhiteSpace(line)) // Use this to filter blank lines.
        .Select(line => line.Split((string[])null, StringSplitOptions.RemoveEmptyEntries))
        .Select(line => line.Select(element => double.Parse(element)))
        .Select(line => line.ToArray())
        .ToArray();

        return array;
}

Для моего приложения я анализировал double, а не int. Чтобы вызвать код, попробуйте использовать что-то вроде этого:

string[] fileContents = System.IO.File.ReadAllLines(openFileDialog1.FileName);
double[][] fileContentsArray = FileReader.readWhitespaceDelimitedDoubles(fileContents);

Console.WriteLine("Number of Rows:      {0,3}", fileContentsArray.Length);
Console.WriteLine("Number of Cols:      {0,3}", fileContentsArray[0].Length);
...