Чтение текстового файла с помощью Linq с двумя шаблонами - PullRequest
0 голосов
/ 22 июля 2011

Мне нужно прочитать текстовый файл, как это

MyItemName = Description @ MoreInfo

Теперь мне нужно преобразовать эти 3 поля в таблицу. используя '=' и '@' в качестве шаблона.

Ответы [ 2 ]

5 голосов
/ 22 июля 2011

Просто разделение на = и @ - это возвращает и IEnumerable анонимного класса с интересующими вас свойствами:

var items = File.ReadAllLines(fileName)
                .Skip(1) //Skip header
                .Where( line => !string.IsNullOrWhiteSpace(line))
                .Select(line =>
                {
                    var columns = line.Split('=', '@');
                    return new
                    {
                        ItemName = columns[0].Trim(),
                        Description = columns[1].Trim(),
                        MoreInfo = columns[2].Trim()
                    };
                });

Этот подход потребовал бы, чтобы токены-разделители использовались в качестве разделителей исключительно - если они встречаются в любом из полей, это все испортит и аннулирует этот подход.

1 голос
/ 22 июля 2011

если вы действительно хотите использовать для этого linq ... Это выглядит не очень хорошо, и это не создает таблицу, но вы получаете точку:

from line in File.ReadAllLines(filename)
let eqPos = line.IndexOf('=')
let atPos = line.IndexOf('@')
select new { 
    Name = line.Substring(0, eqPos).Trim(), 
    Desc = line.Substring(eqPos + 1, atPos - (eqPos + 1)).Trim(), 
    Info = line.Substring(atPos + 1).Trim()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...