2012-06-12 17 views
13

Kod aşağıdaFileHelpers: Sabit genişlikli metni okurken ilk ve son satırı atlamak nasıl

İlk ASP .NET MVC2 içinde FileHelpers kullanarak sabit genişlikli yüklenen dosya içeriği metin dosyasını okumak ve son satır uzunlukları küçüktür ve ReadStream nedenleri için kullanılır Bunun nedeni istisnadır. Diğer tüm hatlar uygun sabit genişliğe sahiptir. İlk ve son satırları veya verileri istisnasız olarak okumak için başka bir yol nasıl atlanır?

[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[]; 
    } 

cevap

31

Bu özelliklerini

IgnoreFirst

kullanabilirsiniz.

[IgnoreFirst(1)] 
public class OrdersVerticalBar 
{ ... 

IgnoreLast: hatlarının numaraları dosyanın sonuna ihmal veya motor okuduğumda akışı edilecek belirtir.

[IgnoreLast(1)] 
public class OrdersVerticalBar 
{ ... 

Daha sonra

engine.HeaderText 
engine.FooterText 
+0

yer almaktadır teşekkür ederiz. Aslında dosyalar iki farklı formatta olabilir: söz konusu açıklanan sabit genişlik ve her alanın ayrı bir satırda olduğu kayıt biçiminde. Alanlar her iki formatta da farklıdır, bu nedenle iki farklı okuma modu kullanılmalıdır. Sabit genişlik formatı her satırın başında daima "VV" içerir. Okumadan önce akışı incelemek ve formata bağlı olarak farklı okuma modunu uygulamak nasıl? – Andrus

+0

nasıl talep üzerine yerine sınıfında/IgnoreLast IgnoreFirst için? – zerohero

+1

engine.Options.IgnoreFirstLines = 1 – zerohero

3

Sen hattının biçimini kontrol etmek BeforeReadRecord olayı kullanabilirsiniz. İlk kayıtsa etkinlik verilerinde SkipThisRecord özelliğini ayarlayın. Son kayıt olup olmadığını belirlemek bir problemden başka bir şey değildir, ancak bunun yerine uzunluğunu veya biçimini kontrol edebilirsiniz. Elbette bu, hatalı biçimlendirilmiş kayıtların neden olduğu hataları yakalamanızı engeller.

diğer olasılık File.ReadAllLines kullanarak belleğe tüm dosya yüklemek etmektir. , Ortaya çıkan diziden ilk ve son öğeleri kaldırın geri bir dize çevirmek ve sonra ReadString arayın. Ya da bir MemoryStream Dizeleri yazmak ve ReadStream diyebiliriz. Bir dosyanın başında hatlarının numaraları gözardı edilecek gösterir veya motor okuduğumda akışı:

+0

404'ler gibi bir şey yapabilirsiniz. – justSteve

+1

@justSteve: Bozuk bağlantılar düzeltildi. FileHelpers dokümantasyon http://www.filehelpers.net/docs/html/R_Project_FileHelpers.htm –

0

iyi [IgnoreFirst] özniteliği ile sınıfınızı süslemek için olan değerler erişebilirler. Herhangi bir nedenle niteliğini ekleyemezseniz

hem linklere bu

var engine = new FileHelperEngine<T>(); 
engine.BeforeReadRecord += (e, args) => 
{ 
    if (args.LineNumber == 1) 
     args.SkipThisRecord = true; 
};