Visual Basic.NET - leer un fichero de texto

 
Vista:
sin imagen de perfil

leer un fichero de texto

Publicado por Mark (5 intervenciones) el 20/04/2023 21:44:33
Buenos días, tarde o noches, lo que es que estoy trabajando en un código para leer un fichero de texto y asignar unos campos, bueno el código si funciona pero si el fichero de texto esta en una sola línea por ejemplo así:

"B","UID_DAJ","DAJ19","B:/","C:/Carpeta2/","A","UID_DAF","DAF54","A:/","C:/Carpeta2/"

pero requiero que el fichero este así:
"B","UID_DAJ","DAJ19","B:/","C:/Carpeta2/"
"A","UID_DAF","DAF54","A:/","C:/Carpeta2/"

Bueno ya explicado esto, me sale un error de "El índice esta fuera de los límites de la matriz"
ya intente aumentar el tamaño de la matriz "Val" pero aun así me sale el error

El error me sale en "NombredeusuarioA = Val(6)"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Private Sub Guardar_Click(sender As Object, e As EventArgs) Handles Guardar.Click
 
 
        Using Variables As New Microsoft.VisualBasic.FileIO.TextFieldParser("C:\Users\Fabian Gallegos\Desktop\variables.txt")
            Variables.TextFieldType = FileIO.FieldType.Delimited
            Variables.SetDelimiters(",")
            Dim Val As String()
            ReDim Preserve Val(50)
            Dim ValMap As String
            While Not Variables.EndOfData
 
                Try
 
                    Val = Variables.ReadFields()
 
 
                    For Each ValMap In Val
                        UnidadB = Val(0)
                        NombredeusuarioB = Val(1)
                        ContraseñaB = Val(2)
                        OrigenB = Val(3)
                        DestinoB = Val(4)
                        UnidadA = Val(5)
                        NombredeusuarioA = Val(6)
                        ContraseñaA = Val(7)
                        OrigenA = Val(8)
                        DestinoA = Val(9)
 
                    Next
 
 
                Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
 
                    MsgBox("line" & ex.Message & "is not valid and will be skipped.")
                End Try
 
            End While
        End Using
 
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

leer un fichero de texto

Publicado por Phil Rob (1554 intervenciones) el 20/04/2023 23:13:23
Hola,

Con tu ejemplo,
"B","UID_DAJ","DAJ19","B:/","C:/Carpeta2/"
veo 5 campos. Los indicios deberían ser de 0 hasta 4.
Cuando escribes Val(0) hasta Val(9), este tiene 2 líneas como el ejemplo.
Pero quizá que no es el problema. Si el problema es que el fichero contiene una sola línea, sería mejor de lo cambiar en fichero con 1 línea por un registro. Después, la lectura de fichero en modo csv será fácil.
Para cambiar el fichero de 1 línea en fichero de líneas, es fácil si todos campos están como en tu ejemplo y si todos registros tienen misma cantidad de campos.

Dice me si comprendo bien tu problema y si quieres más ayuda ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

leer un fichero de texto

Publicado por Mark (5 intervenciones) el 20/04/2023 23:21:32
bueno entiendo lo que dices y el fichero esta divido en 1 línea por cada registro el problema es que al momento de correr el programa eh intentar guardar los datos pedidos a los campos:
UnidadB
NombredeusuarioB
etc.
al llegar al val(5) me lanza el error "El índice esta fuera de los límites de la matriz"
y no se porque si la matriz es mas que suficiente para almazenarlos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

leer un fichero de texto

Publicado por Phil Rob (1554 intervenciones) el 20/04/2023 23:57:34
"....al llegar al val(5) me lanza el error "El índice esta fuera de los límites de la matriz...."
Este bien como he dicho, los indicios deberían ser de 0 hasta 4 a condición que cada línea tiene un solo registro.
Cuando los registros están en una sola línea, tienes que cambiar el fichero en csv para empezar.
Tengo un poco tiempo mañana, intentaré de hacer un proyecto de pruebas.
Ahora, voy dormir ...
Buenas noches.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

leer un fichero de texto

Publicado por Phil Rob (1554 intervenciones) el 21/04/2023 11:37:38
Hola,

Vea que es todavía necesario para tu ayuda.

Adjunto mi proyecto de pruebas (CSV_Mark). Puede leer todos los campos de todos los registros, en una sola u varias líneas.
El fichero datos es en el carpeta Debug. Puedes lo abrir con NotePad y veras los campos. Una dificultad en este fichero, si varias lineas, cada debe se terminar con una coma, excepto ma ultima.

Por este ejemplo, envió los registros en un ListBox para verificar.

Los datos del fichero :
1
2
3
4
"B","UID_DAJ","DAJ19","B:/","C:/Carpeta2/","A","UID_DAF","DAF54","A:/","C:/Carpeta2/","D","UID_DAH",
"DAH19","D:/","C:/Carpeta3/",
"F",
"UID_DAX","DAX54","F:/","C:/Carpeta3/"

Mark

Que tenga un buen día ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

leer un fichero de texto

Publicado por Phil Rob (1554 intervenciones) el 22/04/2023 09:05:40
Continuacion ...

Estaba preocupado con las obligaciones de formato de fichero.
He mejorado.

En el procedimiento LecturaFichero, reemplazas la linea de codigo :
1
LineaTMP = FicheroALeer.ReadToEnd 'Leer todas lineas
Por estas :
1
2
3
4
5
6
7
8
9
        ' Con esta manera, es posible que esta olvidado una coma a la final de una linea o que existe una coma demasiado a la final de la ultima linea
        LineaTMP = ""
        Do Until FicheroALeer.Peek = -1
            LineaTMP &= FicheroALeer.ReadLine
            If FicheroALeer.Peek <> -1 And LineaTMP.Substring(LineaTMP.Length - 1, 1) <> SeparadorSplit Then
                LineaTMP &= SeparadorSplit
            End If
        Loop
        LineaTMP = LineaTMP.TrimEnd(SeparadorSplit)
Entonces, los datos pueden ser también como :
1
2
3
4
"B","UID_DAJ","DAJ19","B:/","C:/Carpeta2/","A","UID_DAF","DAF54","A:/","C:/Carpeta2/","D","UID_DAH",
"DAH19","D:/","C:/Carpeta3/"
"F"
"UID_DAX","DAX54","F:/","C:/Carpeta3/",

Este el procedimiento completo :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Private Sub LecturaFichero()
        If Not System.IO.File.Exists(NombreFichero) Then
            MessageBox.Show("No encontrado " & NombreFichero & vbCr _
                            & "Ningun fichero leido", "")
            Exit Sub
        End If
        FicheroALeer = New System.IO.StreamReader(NombreFichero, System.Text.Encoding.Default)
 
        Dim UnRegistro As String
 
        ' LineaTMP = FicheroALeer.ReadToEnd 'Leer todas lineas
 
        ' Con esta manera, es posible que esta olvidado una coma a la final de una linea o que existe una coma demasiado a la final de la ultima linea
        LineaTMP = ""
        Do Until FicheroALeer.Peek = -1
            LineaTMP &= FicheroALeer.ReadLine
            If FicheroALeer.Peek <> -1 And LineaTMP.Substring(LineaTMP.Length - 1, 1) <> SeparadorSplit Then
                LineaTMP &= SeparadorSplit
            End If
        Loop
        LineaTMP = LineaTMP.TrimEnd(SeparadorSplit)
 
        DttTMP = LineaTMP.Split(SeparadorSplit) ' 'DttTmp tiene todos campos de todos registros
 
        ' Con estas cicla, tenemos cada campos. Ver que hacer con ...
        ' En este ejemplo, agrego cada campos para rehacer cada regsitro y envio cada regiotro en ListBox
        For R = 0 To DttTMP.Count - 1 Step CantidadCamposPorRegistro
            UnRegistro = ""
            For C = R To R + CantidadCamposPorRegistro - 1
                UnRegistro &= DttTMP(C) & IIf(C < R + (CantidadCamposPorRegistro - 1), SeparadorSplit, "")  ' Poner una coma o no
            Next
            ListBox1.Items.Add(UnRegistro)
        Next
 
        FicheroALeer.Close()
        FicheroALeer.Dispose()
    End Sub

Para la gestión de los campos, la utilización de un DataTable puede ser mas fácil que de utilizar la matriz DttTMP. A ti de decir ...

...

Buena fin de la semana ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

leer un fichero de texto

Publicado por Mark (5 intervenciones) el 24/04/2023 16:37:08
Voy a probar este nuevo código ya que el anterior la matriz me seguía dando fallos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

leer un fichero de texto

Publicado por Phil Rob (1554 intervenciones) el 24/04/2023 18:03:46
Hola,

No sé si puedes utilizar el objeto DataTable. Para separar los datos por campos, este es mas facil y este pemrite de los mostrar en DataGridView, en ComboBox, en TexBox, ...,
Si lo quieres puedo hacer el ejemplo con DataTable.

Buenas tardes ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

leer un fichero de texto

Publicado por Mark (5 intervenciones) el 25/04/2023 00:11:24
muchas gracias me a servido su código, se lo agradezco
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

leer un fichero de texto

Publicado por Phil Rob (1554 intervenciones) el 25/04/2023 07:23:31
Muy bien !
Cuando tienes necesitad, no dudas para preguntar.
...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar