2010-11-16 10 views
6

मैं एक सीमित फ़ाइल पढ़ने के लिए वीबी.नेट के टेक्स्टफिल्ल्ड पार्सर (माइक्रोसॉफ्ट.विज़ुअल बेसिक.फाइलियो। टेस्टफिल्ल्डपार्सर) का उपयोग कर रहा हूं। हालांकि, जब मैं क्षेत्र के भीतर लगातार न्यूलाइन के साथ एक क्षेत्र में पढ़ने की कोशिश करता हूं, तो लगातार न्यूलाइन एक नई लाइन में बदल जाती हैं। मैं लगातार न्यूलाइन को संरक्षित करना चाहता हूं, लेकिन मुझे यकीन नहीं है कि कैसे।TextFieldParser.ReadField एक फ़ील्ड के बीच से लगातार नईलाइनों को क्यों हटाता है?

यहां एक उदाहरण फ़ाइल है जिसे मैं बिल्कुल एक फ़ील्ड में पढ़ रहा हूं। उद्धरण फ़ाइल की सामग्री का हिस्सा हैं और वहाँ तीन नई-पंक्तियों (लगातार दो निम्न पंक्ति 2 नई-पंक्तियों सहित) हैं:

:

"This is line 1 
This is line 2 

This is line 4, which follows two consecutive newlines." 

यहाँ कोड है कि मैं पार्स करने और फाइल में पढ़ने के लिए उपयोग कर रहा हूँ है

Dim reader as New Microsoft.VisualBasic.FileIO.TextFieldParser(myFile, System.Text.Encoding.Default) 
reader.TextFieldType = FileIO.FieldType.Delimited 
reader.SetDelimiters(",") 

Dim fields As String() = reader.ReadFields 
Dim line As String = fields(0) 

और यहां "लाइन" चर की सामग्री है। ध्यान दें कि अब केवल दो न्यूलाइन हैं:

This is line 1 
This is line 2 
This is line 4, which follows two consecutive newlines. 

लगातार नईलाइनों को संरक्षित करने के लिए मैं क्या कर सकता हूं?

+2

मुझे एक ही समस्या है, और यहां माइक्रोसॉफ्ट को एक बग रिपोर्ट सबमिट की है: https://connect.microsoft.com/VisualStudio/feedback/details/679596/textfieldparser-does-not-respect-consecutive-line-breaks -इन-मध्यम-ए-मैदान के –

उत्तर

2

पहले, MSDN http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser.readfields.aspx के अनुसार रिक्त लाइनों अनदेखी कर रहे हैं:

ReadFields रिक्त लाइनों का सामना करना पड़ता है, तो वे छोड़ रहे हैं और अगले गैर रिक्त पंक्ति दिया जाता है।

मुझे विश्वास है कि आपको क्या करने की आवश्यकता होगी, रीडलाइन http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser.readline.aspx का उपयोग करें और फिर परिणामों के माध्यम से लूप करें।

Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser("C:\ParserText.txt") 
    MyReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited 
    MyReader.Delimiters = New String() {","} 
    Dim currentRow As String 
    While Not MyReader.EndOfData 
     Try 
      currentRow = MyReader.ReadLine() 
      'Manipulate line... 
     Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException 
      MsgBox("Line " & ex.Message & " is invalid. Skipping") 
     End Try 
    End While 
End Using 
0

आप शायद "LineNumber" संपत्ति को देखो सकता है? ...

(ग #)

var beforeRead = _parser.LineNumber; 
_parser.ReadFields(); 
var afterRead = _parser.LineNumber; 

if(afterRead <= -1) 
    lineNumber = beforeRead; 
else      
    lineNumber = afterRead - 1; 

for (var blankLines = beforeRead; blankLines < afterRead-1; blankLines++) 
{ 
    Console.WriteLine(); 
} 

मैं अंत में रिक्त लाइनों के सभी किनारे मामलों का परीक्षण नहीं किया गया है आदि था।

संबंधित मुद्दे