Visual Basic - Leer archivo . dat

Life is soft - evento anual de software empresarial
 
Vista:
Imágen de perfil de Francisco Javier

Leer archivo . dat

Publicado por Francisco Javier (3 intervenciones) el 15/02/2017 21:40:29
Hola a todos

Tengo un dilema gigante con un desarrollo.

Tengo un sistema que importa datos de un archivo .dat y el tema que el sistema que me entrega este dat lo esta enviando con un formato distinto que no me esta permitiendo leer ni recorrerlo.

Asi es el formato de original

frt_o

Y asi es el formato modificado


frt_m

Aca esta una porción de la lectura

1
2
3
4
5
6
7
8
9
Canal = FreeFile
ruta = Mid(fArchivo, 1, InStr(1, fArchivo, "\"))
ruta = ruta & Mid(fArchivo, InStr(1, fArchivo, "\") + 1)
Open ruta For Input As Canal
Do While EOF(Canal) = False
i = i + 1
Input #Canal, Dato(i)
 
Loop


Close Canal

El tema que aunque tenga registros me lo considera como fin de archivo como si no tuviera nada

Alguna opinión??, estoy de cabezas con esto.


Por si acaso, no es posible pedir que modifiquen el archivo ya que la entidad que lo pasa no lo permite. Lo se por que fue lo primero que solicite jajaj

Muchas Gracias
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 Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Leer archivo . dat

Publicado por Antoni Masana (558 intervenciones) el 16/02/2017 07:16:53
Abrelo como Binary, define una variable de string la longitud del registro (En el ejemplo he puesto a ojo 40 caracteres, revisalo) y lee con line input.

1
2
3
4
5
6
7
8
9
10
11
12
13
Canal = FreeFile
ruta = Mid(fArchivo, 1, InStr(1, fArchivo, "\"))
ruta = ruta & Mid(fArchivo, InStr(1, fArchivo, "\") + 1)
 
Open ruta For Input As Canal
 
Do While EOF(Canal) = False
   i = i + 1
   Dato(i) = Space$(40)
   Line Input #Canal, Dato(i)
Loop
 
Close Canal

Otra cosa, no entiendo que pretendes hacer con estas dos lineas:

1
2
ruta = Mid(fArchivo, 1, InStr(1, fArchivo, "\"))
ruta = ruta & Mid(fArchivo, InStr(1, fArchivo, "\") + 1)

El resultado es Ruta = fArchivo ¿que sentido tiene?

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar
Imágen de perfil de Francisco Javier

Leer archivo . dat

Publicado por Francisco Javier (3 intervenciones) el 16/02/2017 14:58:43
Hola Antoni Masana por la ayuda, pero el tema es que teniendo datos (de mas de 10 lineas de registro) en el archivo .dat no entra al ciclo
por que piensa que no tiene nada el archivo.

1
2
3
4
5
Do While EOF(Canal) = False
   i = i + 1
   Dato(i) = Space$(40)
   Line Input #Canal, Dato(i)
Loop

no se por que esos caracteres raros que sale no permite la lectura

y sobre la variable ruta la uso mas adelante por eso la declaro así.

Muchas
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 Andres Leonardo
Val: 3.117
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Leer archivo . dat

Publicado por Andres Leonardo (1798 intervenciones) el 16/02/2017 17:59:04
puedes subir el dat??

puesto que no tnego como simular uno asi sean 10 registros
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 Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Leer archivo . dat

Publicado por Antoni Masana (558 intervenciones) el 16/02/2017 20:53:51
Como dice Andres mejor si puedes subir un fichero para ver el problema.

La variable RUTA tiene el mismo contenido que la variable fARCHIVO.

Entendería esto:

1
2
3
4
Ruta = Mid(fArchivo, 1, InStr(1, fArchivo, "\"))
Fich = Mid(fArchivo, InStr(1, fArchivo, "\") + 1)
 
Open Ruta + Fich For Input As Canal

Pero lo que haces es lo mismo que hacer esto:

1
Ruta = fArchivo

Pero para gustos los colores.

Saludos.
\\//_
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 Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Leer archivo . dat

Publicado por Antoni Masana (558 intervenciones) el 17/02/2017 08:32:09
El primer caracter del fichero es un NULO ( asc 00 - dec 0 ) y el segundo carácter es un final de Fichero( asc 1A - dec 27 )

El registro termina con un CR - LF ( asc 0D 0A - dec 13 10 ) y los dos siguientes caracteres son dos nulos

Con este código he podido leer el fichero entero para saltar los dos caracteres que dan error utilizo la instrucción Seek

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Command1_Click()
    Dim Reg As String
 
    Open "c:\Tmp\DAP_20170118.DAT" For Binary As #1
 
    Reg = Space$(152)
    Seek #1, 3
    Line Input #1, Reg
    Print Reg
 
    While Not EOF(1) And Loc(1) < LOF(1)
        Seek #1, Loc(1) + 3
        Line Input #1, Reg
        Print Reg
    Wend
    Close #1
End Sub

Este es tu código con los cambios

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Canal = FreeFile
ruta = Mid(fArchivo, 1, InStr(1, fArchivo, "\"))
ruta = ruta & Mid(fArchivo, InStr(1, fArchivo, "\") + 1)
 
Open ruta For Input As Canal
 
Reg = Space$(152)
Seek #Canal, 3
Line Input #Canal, Reg 
i = i + 1
Dato(i) = Reg
 
While  Not EOF(Canal)  And And Loc(Canal) < LOF(Canal)
    Seek #1, Loc(Canal) + 3
    i = i + 1
    Dato(i) = Space$(152)
    Line Input #Canal, Dato(i)
Loop
 
Close Cana


Espero te sirva.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.117
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Leer archivo . dat

Publicado por Andres Leonardo (1798 intervenciones) el 17/02/2017 15:16:27
Gracias tAntoni
Yo tambien al leerlo me daba fin de archivo y salia, estaba pensando en hacer un substring pero tampoco dejo ... excelente variacion con el SEEK que no lo habia revisando en todo caso .. esperemos que le ayude

Saludos
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