Мне нужно прочитать текстовый файл, как этотЧтение текстовых файлов с Linq 2 узорами
MyItemName = Description @ MoreInfo
Теперь мне нужно преобразовать эти 3 поля в к столу. используя шаблоны '=' и '@'.
Мне нужно прочитать текстовый файл, как этотЧтение текстовых файлов с Linq 2 узорами
MyItemName = Description @ MoreInfo
Теперь мне нужно преобразовать эти 3 поля в к столу. используя шаблоны '=' и '@'.
Просто расщепление на =
и @
- это возвращает и 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()
};
});
Этот подход требует разделительные маркеры, которые будут использоваться в качестве разделителей exclusi vely - если они происходят в любом из полей, это испортит все и аннулирует этот подход.
error: Индекс находился за пределами массива. – Ezi
@ Ezi: отлично работает на одной строке с образцом, которую вы дали – BrokenGlass
. Ваше право, это действительно работает. Проблема заключается в том, что файл начинается с заголовка следующим образом: Пример файла текста ------------- ------------------------ Это вызывает проблему. – Ezi
, если вы действительно хотите использовать 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()
}
Должно ли быть три столбца? –
Да, это правильно – Ezi
Как это связано с Linq? –