2011-07-22 1 views
0

Мне нужно прочитать текстовый файл, как этотЧтение текстовых файлов с Linq 2 узорами

MyItemName = Description @ MoreInfo 

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

+2

Должно ли быть три столбца? –

+0

Да, это правильно – Ezi

+0

Как это связано с Linq? –

ответ

5

Просто расщепление на = и @ - это возвращает и 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 - если они происходят в любом из полей, это испортит все и аннулирует этот подход.

+0

error: Индекс находился за пределами массива. – Ezi

+0

@ Ezi: отлично работает на одной строке с образцом, которую вы дали – BrokenGlass

+0

. Ваше право, это действительно работает. Проблема заключается в том, что файл начинается с заголовка следующим образом: Пример файла текста ------------- ------------------------ Это вызывает проблему. – Ezi

1

, если вы действительно хотите использовать 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() 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^