Cita de: Lekim en 21 Octubre 2015, 10:20 AMPor eso digo que debe haber varios formatos con misma extensión.
Lekim, lo vuelvo a explicar de otra manera:
NO existen distintos tipos de formato CSV, un CSV es un archivo de TEXTO PLANO (archivo.txt) con la extensión modificada (archivo.csv) cuyo contenido está delimitado por comas u otro caracter que queda a elección de quien construye la tabla.
No hay más misterio, el formato es texto plano o plain text.
El único estándar del formato CSV es que los campos se delimiten mediante un caracter, en este caso la coma, y en el caso de tu Excel, el punto y coma. Luego hay factores adicionales como lineas de comentarios, columnas, delimitación de cadenas en los campos, etc..
Cita de: Lekim en 21 Octubre 2015, 10:20 AMLuego el sistema para leerlo debe ser similar al Input en VB.
Tengo clarísimo que los ejemplos que he puesto yo se han creado y se leen siguiendo un sistema similar al Input en VB6.
Pongamos claro que un CSV es un archivo de texto y NADA más, no ha sido especialmente diseñado o pensado para "leerse con VB", no tiene nada que ver una cosa con la otra, no lo mezclemos.
La función Input de VB6 simplemente lee el string de entrada hasta que el siguiente caracter CR, CR-LF o "," se encuentra y entonces podemos tokenizar/partir el string de esa forma. Es basicamente lo mismo que podemos hacer con la extensión String.Split en VB.Net, de la siguiente manera:
Código (vbnet) [Seleccionar]
Dim tokens As String() = <a>"hello",14,</a>.Value.Split({ControlChars.Cr, ControlChars.CrLf, ","c, ";"c}, StringSplitOptions.None)
For Each token As String In tokens
Console.WriteLine(token.Trim({ControlChars.Quote}))
Next token
La función Input de VB6 se puede encontrar en el namespace Microsoft.VisualBasic de la librería de clases de .Net Framework, la cual ovbiamente está re-escrita usando puro código .Net, sin embargo, aún así la función está deprecada u obsoleta al tener un impacto grave en el rendimiento de la app. (POR COSAS ASÍ NO ME CANSARÉ DE REPETIR QUE NO SE DEBE RECURRIR A NINGÚN MIEMBRO DE ESTE NAMESPACE VB6-ESTILIZADO) y se recomienda en su defecto utilizar los miembros de My.Computer.FileSystem, que viene siendo exactamente lo mismo que publiqué en el ejemplo de mi primer post en este hilo.
Ejemplo:
Código (vbnet) [Seleccionar]
Using parser As TextFieldParser = My.Computer.FileSystem.OpenTextFieldParser("File.csv", {",", ";"})
Do Until parser.EndOfData
' ...
Loop
End Using
Hablando estrictamente ese sería su equivalente, la class Microsoft.VisualBasic.FileIO.TextFieldParser. Pero en mi opinión personal es mejor recurrir a un simple For para construir la logica del parser y así evitar por completo la utilización de ese namespace, así que para mi el equivalente sería String.Split aunque sería bastante más elaborado que el For que he publicado, pero no voy a reinventar la rueda.
Saludos!