2012-06-12 7 views
13

कोड नीचेFileHelpers: पढ़ने निश्चित चौड़ाई पाठ पहली और आखिरी लाइन को छोड़ कैसे

पहले एएसपी नेट 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[]; 
    } 

उत्तर

31

आप इन विशेषताओं

IgnoreFirst उपयोग कर सकते हैं।

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

IgnoreLast: यह दर्शाता है लाइनों की संख्या एक फ़ाइल के अंत में नजरअंदाज कर दिया या स्ट्रीम जब इंजन इसे पढ़ा जा सकता है।

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

आप बाद में साथ

engine.HeaderText 
engine.FooterText 
+0

पर धन्यवाद। असल में फाइलें दो अलग-अलग प्रारूपों में हो सकती हैं: प्रश्न में वर्णित निश्चित चौड़ाई और रिकॉर्ड प्रारूप में जहां प्रत्येक फ़ील्ड अलग-अलग रेखा में है। दोनों प्रारूपों में फ़ील्ड भी अलग हैं इसलिए दो अलग-अलग पठन मोड का उपयोग किया जाना चाहिए। निश्चित चौड़ाई प्रारूप में प्रत्येक पंक्ति की शुरुआत में हमेशा "वीवी" होता है। स्वरूप के आधार पर विभिन्न पढ़ने मोड पढ़ने और लागू करने से पहले स्ट्रीम की जांच कैसे करें? – Andrus

+0

कक्षा में बजाय बदले में अनदेखा कैसे करें/अनदेखा करें? – zerohero

+1

इंजन। विकल्प। इग्नोर फर्स्टलाइन = 1 – zerohero

3

आप लाइन के प्रारूप की जाँच करने के BeforeReadRecord घटना इस्तेमाल कर सकते हैं। इवेंट डेटा में SkipThisRecord संपत्ति सेट करें यदि यह पहला रिकॉर्ड है। यह निर्धारित करना कि यह अंतिम रिकॉर्ड है या नहीं, लेकिन आप इसके बजाय लंबाई या प्रारूप की जांच कर सकते हैं। बेशक, यह आपको विकृत रिकॉर्ड के कारण त्रुटियों को पकड़ने से रोक देगा।

एक और संभावना File.ReadAllLines का उपयोग कर पूरी फ़ाइल को स्मृति में लोड करना है। परिणामस्वरूप सरणी से पहले और आखिरी आइटम निकालें, इसे वापस एक स्ट्रिंग में बदलें, और फिर ReadString पर कॉल करें। या आप स्ट्रिंग्स को MemoryStream पर लिख सकते हैं और ReadStream पर कॉल कर सकते हैं। एक फ़ाइल की शुरुआत में इंगित करता है लाइनों की संख्या को नजरअंदाज किया जा करने के लिए या स्ट्रीम जब इंजन इसे पढ़ा:

+0

404 की तरह कुछ कर सकते हैं। – justSteve

+1

@justSteve: टूटी हुई लिंक तय की गईं। FileHelpers प्रलेखन http://www.filehelpers.net/docs/html/R_Project_FileHelpers.htm –

0

सबसे अच्छा [IgnoreFirst] विशेषता के साथ अपने वर्ग को सजाने के लिए है मानों तक पहुंच सकते हैं।

किसी कारण से आप विशेषता नहीं जोड़ सकते, तो आप दोनों लिंक पर इस

var engine = new FileHelperEngine<T>(); 
engine.BeforeReadRecord += (e, args) => 
{ 
    if (args.LineNumber == 1) 
     args.SkipThisRecord = true; 
}; 
संबंधित मुद्दे