Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# FileHelpers:如何跳过读取固定宽度文本的第一行和最后一行_C#_Asp.net Mvc_Filehelpers - Fatal编程技术网

C# FileHelpers:如何跳过读取固定宽度文本的第一行和最后一行

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

下面的代码用于使用ASP.NET MVC2中的FileHelpers读取固定宽度上载的文件内容文本文件

第一行和最后一行的长度较小,ReadStream因此导致异常。 所有其他线条都有适当的固定宽度。 如何跳过第一行和最后一行或以其他方式毫无例外地读取数据

    [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文档位于