Как прочитать текстовый файл добавить строку в список <> в Linq - PullRequest
0 голосов
/ 11 октября 2019

У меня есть этот код для получения столбца в текстовом файле (cvs), который мне нужен только для 2 первых столбцов

List<string> SubStations = new List<string>();

using (StreamReader leer = new StreamReader(fs, System.Text.Encoding.Default, true))
{

    string line;
    while ((line = leer.ReadLine()) != null)
    {
        SubStations.Add(line);
    }
}

foreach (var item in SubStations)
{
    string[] StationDivision = item.Split(',');
    Console.WriteLine("Station {0}, Substation {1}",
        StationDivision[0].ToString(), 
        StationDivision[1].ToString());
}

Я хотел бы знать, могу ли я поместить код в окружение foreachв итераторе while и не используйте список <>, а сделайте это с помощью linq?

Ответы [ 3 ]

1 голос
/ 11 октября 2019

Вы можете прочитать весь файл, используя System.IO.File.ReadAllLines, который вернет List<string>. Затем вы можете просто сделать Select, разделить столбцы и вернуть полученный массив.

var lines = System.IO.File.ReadAllLines("file").Select(x => x.Split(',') );

foreach (var line in lines)
    Console.WriteLine($"Station {line[0]}, Substation {line[1]}");
0 голосов
/ 11 октября 2019

Если вы просто хотите избавиться от foreach, почему вы не используете следующий код?

SubStations.Select(x=>x.Split(',')).ToList().ForEach(f=>Console.WriteLine("Station {0}, Substation {1}",
        f[0].ToString(), 
        f[1].ToString()))
0 голосов
/ 11 октября 2019

Да, вы можете.

Console.WriteLine(
    line.Split(',').Select(x => 
        $"Station {x[0]}, Substation {x[1]}")
    );

Но, как уже было отмечено, вам следует использовать библиотеку синтаксического анализатора Csv.

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