Estaba experimentando con VB.Net File IO básico y String splitting. Encontré este problema. No sé si tiene algo que ver con el archivo IO o la división de cadenas.Problema con File IO y división de cadenas con Environment.NewLine en VB.Net
estoy escribiendo texto en un archivo como tal
Dim sWriter As New StreamWriter("Data.txt")
sWriter.WriteLine("FirstItem")
sWriter.WriteLine("SecondItem")
sWriter.WriteLine("ThirdItem")
sWriter.Close()
Entonces, estoy leyendo el texto del archivo
Dim sReader As New StreamReader("Data.txt")
Dim fileContents As String = sReader.ReadToEnd()
sReader.Close()
Ahora, estoy usando la división de fileContents
Environment.NewLine
como delimitador.
Dim tempStr() As String = fileContents.Split(Environment.NewLine)
Al imprimir la matriz resultante, consigo resultados un tanto extraños
For Each str As String In tempStr
Console.WriteLine("*" + str + "*")
Next
he añadido el * s al principio y al final de los elementos de matriz durante la impresión, para averiguar lo que está pasando . Como se utiliza NewLine
como delimitador, esperaba que las cadenas de la matriz NO tuvieran ninguna de las líneas NewLine. Pero la salida era esto -
*FirstItem*
*
SecondItem*
*
ThirdItem*
*
*
¿No debería ser esto -
*FirstItem*
*SecondItem*
*ThirdItem*
**
??
¿Por qué hay una nueva línea al principio de todas excepto la primera cadena?
Actualización: hice un carácter por carácter de impresión fileContents
y conseguí este -
F - 70
i - 105
r - 114
s - 115
t - 116
I - 73
t - 116
e - 101
m - 109
- 13
- 10
S - 83
e - 101
c - 99
o - 111
n - 110
d - 100
I - 73
t - 116
e - 101
m - 109
- 13
- 10
T - 84
h - 104
i - 105
r - 114
d - 100
I - 73
t - 116
e - 101
m - 109
- 13
- 10
Parece 'Environment.NewLine' se compone de
- 13
- 10
13 y 10 .. I entender. Pero el espacio vacío en el medio? No sé si viene por imprimir en la consola o realmente es parte de NewLine
.
Por lo tanto, al dividir, solo el carácter equivalente al valor ASCII 13, que es el primer carácter de NewLine
, se utiliza como delimitador (como se explica en las respuestas) y el resto aún está presente en las cadenas. Por alguna razón, el misterioso espacio vacío en la lista de arriba y el valor ASCII 10 juntos dan como resultado una nueva línea que se imprime.
Ahora está claro. Gracias por la ayuda. :)
El carácter 13 es un retorno de carro, 10 es un avance de línea. Es por eso que aparece como una línea en blanco en sus resultados, * porque está imprimiendo una nueva línea *. Si la respuesta a su pregunta es correcta, asegúrese de aceptarla :) –
Hola ... ejem .. gracias: D: D – Senthil