¿Cómo analizar los datos de un array en visual basic?
Necesito interpretar la primera linea de un texto que contiene el significado y el orden de los datos del resto de lineas. Ejemplo del texto:
!DV05|DW01|GL19|GL1A|LX02
0|2|0
2|3|7
7|5|3
0|2|0
2|3|7
7|5|3
DV05 Y LX02 no indican nada, son inicio y fin de la trama. DW01 contiene (0, 2, 7, 0, 2, 7), GL19 contiene (2, 3, 5, 2, 3, 5) y GL1A (0, 7, 3, 0, 7, 3). He conseguido separar cada dato correctamente y meter cada uno en una columna de access diferente, pero siempre y cuando el formato sea el mismo. El problema es que cada vez la cabecera puede tener más o menos datos y distinto orden. Es necesario entonces analizar de alguna manera esta cabecera para "traducir" su contenido y poder así asignar los datos de forma correcta y en orden. Espero tu ayuda con algún ejemplo, por favor. Muchas gracias.
Este es el código que llevo hasta ahora:
Option Explicit
Private Sub Command1_Click()
Dim ruta As String
Dim sapo As String, PEPE As String, MONO As String 'Declaramos las cadenas
Dim TERE() As String 'declaramos la variable que contendrá la matriz
ruta = "c:\delimitado.txt"
Open ruta For Input As #1
While Not EOF(1) 'Bucle que para leer lineas hasta llegar a la última
Line Input #1, sapo$
PEPE = Replace(sapo, "!DV05|", "", , , vbTextCompare) 'Eliminamos de la cabecera el comando de inicio
MONO = Replace(PEPE, "|LX02", "", , , vbTextCompare) 'Eliminamos de la cabecera el comando de fin
TERE = Split(MONO, "|") 'Aquí separamos el texto delimitado para generar la matriz
On Error Resume Next
List1.AddItem TERE(0) 'Insertamos cada subcadena en un list diferente
List2.AddItem TERE(1)
List3.AddItem TERE(2)
With Adodc1.Recordset 'Hacemos la lladada a ADO
On Error Resume Next
.AddNew
.Fields("CANTIDAD") = TERE(0) 'Ingresamos cada parte de la matriz en una columna distinta de access
.Fields("REFERNCIA") = TERE(1)
.Fields("DESCRIPCION") = TERE(2)
.Fields("SEGUNDA REFERENCIA") = TERE(3)
.Fields("Campo5") = TERE(4)
End With
Wend ' Retorno del bucle
Close #1 ' Cerramos archivo
End Sub
!DV05|DW01|GL19|GL1A|LX02
0|2|0
2|3|7
7|5|3
0|2|0
2|3|7
7|5|3
DV05 Y LX02 no indican nada, son inicio y fin de la trama. DW01 contiene (0, 2, 7, 0, 2, 7), GL19 contiene (2, 3, 5, 2, 3, 5) y GL1A (0, 7, 3, 0, 7, 3). He conseguido separar cada dato correctamente y meter cada uno en una columna de access diferente, pero siempre y cuando el formato sea el mismo. El problema es que cada vez la cabecera puede tener más o menos datos y distinto orden. Es necesario entonces analizar de alguna manera esta cabecera para "traducir" su contenido y poder así asignar los datos de forma correcta y en orden. Espero tu ayuda con algún ejemplo, por favor. Muchas gracias.
Este es el código que llevo hasta ahora:
Option Explicit
Private Sub Command1_Click()
Dim ruta As String
Dim sapo As String, PEPE As String, MONO As String 'Declaramos las cadenas
Dim TERE() As String 'declaramos la variable que contendrá la matriz
ruta = "c:\delimitado.txt"
Open ruta For Input As #1
While Not EOF(1) 'Bucle que para leer lineas hasta llegar a la última
Line Input #1, sapo$
PEPE = Replace(sapo, "!DV05|", "", , , vbTextCompare) 'Eliminamos de la cabecera el comando de inicio
MONO = Replace(PEPE, "|LX02", "", , , vbTextCompare) 'Eliminamos de la cabecera el comando de fin
TERE = Split(MONO, "|") 'Aquí separamos el texto delimitado para generar la matriz
On Error Resume Next
List1.AddItem TERE(0) 'Insertamos cada subcadena en un list diferente
List2.AddItem TERE(1)
List3.AddItem TERE(2)
With Adodc1.Recordset 'Hacemos la lladada a ADO
On Error Resume Next
.AddNew
.Fields("CANTIDAD") = TERE(0) 'Ingresamos cada parte de la matriz en una columna distinta de access
.Fields("REFERNCIA") = TERE(1)
.Fields("DESCRIPCION") = TERE(2)
.Fields("SEGUNDA REFERENCIA") = TERE(3)
.Fields("Campo5") = TERE(4)
End With
Wend ' Retorno del bucle
Close #1 ' Cerramos archivo
End Sub
1 Respuesta
Respuesta de Roberto Alvarado
1