C# FileHelpers:如何跳过读取固定宽度文本的第一行和最后一行
下面的代码用于使用ASP.NET MVC2中的FileHelpers读取固定宽度上载的文件内容文本文件 第一行和最后一行的长度较小,ReadStream因此导致异常。 所有其他线条都有适当的固定宽度。 如何跳过第一行和最后一行或以其他方式毫无例外地读取数据C# FileHelpers:如何跳过读取固定宽度文本的第一行和最后一行,c#,asp.net-mvc,filehelpers,C#,Asp.net Mvc,Filehelpers,下面的代码用于使用ASP.NET MVC2中的FileHelpers读取固定宽度上载的文件内容文本文件 第一行和最后一行的长度较小,ReadStream因此导致异常。 所有其他线条都有适当的固定宽度。 如何跳过第一行和最后一行或以其他方式毫无例外地读取数据 [FixedLengthRecord()] class Bank { [FieldFixedLength(4)] public string AINETUNNUS; [F
[FixedLengthRecord()]
class Bank
{
[FieldFixedLength(4)]
public string AINETUNNUS;
[FieldFixedLength(16)]
public string TEKST1;
[FieldFixedLength(3)]
public string opliik;
[FieldFixedLength(2)]
public string hinnalis;
};
[AcceptVerbs(HttpVerbs.Post)]
[Authorize]
public ActionResult LoadStatement(HttpPostedFileBase uploadFile)
{
FileHelperEngine engine = new FileHelperEngine(typeof(Bank));
var res = engine.ReadStream(new StreamReader(uploadFile.InputStream,
Encoding.GetEncoding(1257))) as Bank[];
}
您可以使用事件检查行的格式。如果是第一条记录,则在事件数据中设置SkipThisRecord
属性。确定它是否是最后一条记录是一个问题,但您可以只检查长度或格式。当然,这将阻止您捕获由格式错误记录引起的错误
另一种可能是使用
file.ReadAllLines
将整个文件加载到内存中。从结果数组中删除第一个和最后一个项,将其转换回字符串,然后调用。或者,您可以将字符串写入MemoryStream
并调用ReadStream
您可以使用这些属性
IgnoreFirst:表示引擎读取文件或流时,在文件或流开始时要忽略的行数
[IgnoreFirst(1)]
public class OrdersVerticalBar
{ ...
[IgnoreLast(1)]
public class OrdersVerticalBar
{ ...
IgnoreLast:表示引擎读取文件或流时,在文件或流末尾要忽略的行数
[IgnoreFirst(1)]
public class OrdersVerticalBar
{ ...
[IgnoreLast(1)]
public class OrdersVerticalBar
{ ...
您可以稍后使用访问这些值
engine.HeaderText
engine.FooterText
最好是使用[IgnoreFirst]属性装饰类 如果由于某种原因无法添加属性,可以执行以下操作
var engine = new FileHelperEngine<T>();
engine.BeforeReadRecord += (e, args) =>
{
if (args.LineNumber == 1)
args.SkipThisRecord = true;
};
var engine=new FileHelperEngine();
engine.BeforeReadRecord+=(e,args)=>
{
如果(args.LineNumber==1)
args.SkipThisRecord=true;
};
谢谢。实际上,文件可以有两种不同的格式:如所述的固定宽度和记录格式,其中每个字段位于单独的行中。两种格式的字段也不同,因此应使用两种不同的读取模式。固定宽度格式在每行的开头总是包含“VV”。如何在读取之前检查流,并根据格式应用不同的读取模式?engine.Options.IgnoreFirstLines=1404s,在两个链接上。@justSteve:已修复断开的链接。FileHelpers文档位于