Чтение текстовых данных из файла с использованием LINQ - PullRequest
3 голосов
/ 18 февраля 2010

У меня есть следующий текстовый файл:

37 44 60
67 15 94
45 02 44

Как прочитать все числа из этого файла и сохранить их в двумерном массиве, используя LINQ? Все, что мне удалось сделать, это создать простой массив со всеми первыми значениями в каждой строке. Является ли использование LINQ в этом случае хорошей идеей или я должен просто загрузить файл обычным способом и проанализировать его?

Ответы [ 3 ]

11 голосов
/ 18 февраля 2010
File.ReadAllLines(myFile)
    .Select(l => l.Split(' ').Select(int.Parse).ToArray()).ToArray();

Или:

List<int[]> forThoseWhoHave1GigFiles = new List<int[]>();
using(StreamReader reader = File.OpenText(myFile))
{
    while(!reader.EndOfStream)
    {
        string line = reader.ReadLine();
        forThoseWhoHave1GigFiles.Add(line.Split(' ')
            .Select(int.Parse).ToArray());
    }
}
var myArray = forThoseWhoHave1GigFiles.ToArray();

И

File.ReadLines(myFile)
    .Select(l => l.Split(' ')
    .Select(int.Parse).ToArray())
    .ToArray();

В .Net 4.0 и выше.

5 голосов
/ 18 февраля 2010

Чтобы завершить ответ Джонатана, вот как вы можете реализовать метод расширения Lines:

public static class TextReaderExtensions
{
    public static IEnumerable<string> Lines(this TextReader reader)
    {
        string line;
        while((line = reader.ReadLine()) != null) yield return line;
    }
}
2 голосов
/ 18 февраля 2010

Вы имеете в виду что-то подобное?

StreamReader sr = new StreamReader("./files/someFile.txt");

      var t1 =
        from line in sr.Lines()
        let items = line.Split(' ')
        where ! line.StartsWith("#")
        select String.Format("{0}{1}{2}",
            items[1],
            items[2],
            items[3]);

Взгляните на этот сайт: ССЫЛКА

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...