使用Linq读取带有2种模式的文本文件

时间:2011-07-22 14:51:03

标签: c# .net vb.net linq text

我需要阅读像这样的文本文件

MyItemName = Description @ MoreInfo

现在我需要将这3个字段转换为表格。使用'='和'@'作为模式。

2 个答案:

答案 0 :(得分: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()
                    };
                });

这种方法需要将分隔符标记用作独占的分隔符 - 如果它们确实出现在任何字段中,这将使所有内容陷入混乱并使此方法无效。

答案 1 :(得分: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()
}