2014-09-10 39 views
0

我在需要解析文件谁的记录格式如下的过程:使用导入带有可选字段多行记录filehelpers

mr 
Sean r. 
Farrow 
4 The Crescent 
Eastleake 
Loughborough 
Leicestershire 
LE12 6QH 
01509 59213 
07525945447 
[email protected] 

每个记录由一个空行来完成分隔。这两个电话号码和电子邮件地址是可选的。

解析这类记录的最佳方法是什么?我可以写我自己的解析器,但希望我不必!

+0

是否有过空白或缺失行? – NotMe 2014-09-10 13:56:09

+0

你可能正则表达式?与@ChrisLively相同的问题:空白行?它是否总是采用这种格式,唯一的变化就是省略手机和电子邮件? – Brandon 2014-09-10 14:11:46

+0

是的,有空行分隔记录,但没有其他人! – 2014-09-10 15:39:15

回答

0

FileHelpers希望每条记录都以一个新行结束,因此您必须在将引擎传递给引擎之前预先解析输入。这是简单的做虽然 - 是这样的:

var lines = File.ReadAllLines(pathToImportFile); 
var sb = new StringBuilder(); 
var separator = ","; // use a comma as field delimiter 
foreach (string line in lines) 
{ 
    if (String.IsNullOrEmpty(line)) 
     sb.AppendLine(""); // convert empty lines into line feeds 
    else 
     sb.AppendFormat("\"{0}\"{1}", line, separator); // put quotes around the field to avoid problems with nested separators 
} 
var engine = new FileHelperEngine<MyClass>(); 
engine.ReadString(sb.ToString()); 

和你的类将看起来像

[DelimitedRecord(",")] 
class MyClass 
{ 
    [FieldQuoted(QuoteMode.AlwaysQuoted)] 
    public string Title; 

    [FieldQuoted(QuoteMode.AlwaysQuoted)] 
    public string FullName; 

    [FieldQuoted(QuoteMode.AlwaysQuoted)] 
    public string Address1; 

    /// ... etc   
} 
相关问题