2010-11-16 20 views
6

Estoy usando TextFieldParser de VB.NET (Microsoft.VisualBasic.FileIO.TextFieldParser) para leer un archivo delimitado. Sin embargo, cuando trato de leer en un campo con nuevas líneas consecutivas dentro del campo, las nuevas líneas consecutivas se convierten en una sola línea nueva. Me gustaría que las nuevas líneas consecutivas se conserven, pero no estoy seguro de cómo.¿Por qué TextFieldParser.ReadField elimina líneas nuevas consecutivas del centro de un campo?

Aquí hay un archivo de ejemplo que estoy leyendo con exactamente un campo. Las citas son parte del contenido del archivo y hay tres nuevas líneas (incluyendo las dos nuevas líneas consecutivas siguientes línea 2):

"This is line 1 
This is line 2 

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

Aquí está el código que estoy usando para analizar y leer en el archivo:

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) 

Y aquí está el contenido de la variable "línea". Tenga en cuenta que solo hay dos nuevas líneas ahora:

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

¿Qué puedo hacer para conservar las nuevas líneas consecutivas?

+2

Tengo el mismo problema y he enviado un informe de error a Microsoft aquí: https://connect.microsoft.com/VisualStudio/feedback/details/679596/textfieldparser-does-not-respect-consecutive-line-breaks -en-el-medio-de-un-campo –

Respuesta

2

primer lugar, según MSDN http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser.readfields.aspx se ignoran las líneas en blanco:

Si ReadFields encuentra con líneas en blanco, que se omiten y se devuelve el siguiente línea no esté en blanco.

Creo que lo que vas a necesitar hacer es utilizar ReadLine http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser.readline.aspx y luego recorrer los resultados.

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

Se podría quizá ver la propiedad "LineNumber"? ...

(C#)

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(); 
} 

no he probado todos los casos extremos de las líneas en blanco al final etc tho.

Cuestiones relacionadas