Visual Basic para Aplicaciones - Problema al leer un fichero plano

Life is soft - evento anual de software empresarial
 
Vista:

Problema al leer un fichero plano

Publicado por Jaivier (3 intervenciones) el 25/10/2007 10:16:43
Al leer un fichero plano, caracter a caracter, cuando llega a una coma no detecta ese caracter y dice que es un caracter vacio. Además a partir de ese caracter, los siguientes sigue considerandolos como vacios asta el final del registro.

La configuracion regional es la correcta y el caracter decimal esta establecido como la coma.

Un saludo y 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

RE:Problema al leer un fichero plano

Publicado por JuanC (243 intervenciones) el 25/10/2007 11:13:46
podrías publicar el código??

Saludos desde Baires, JuanC
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

RE:Problema al leer un fichero plano

Publicado por Javier (3 intervenciones) el 26/10/2007 09:12:35
Option Compare Database
Option Explicit
Dim dbs As Database
Dim Mov As Recordset
Dim L As Long
Dim LReg As Long
Dim I As Long
Dim Micadena As String
Dim C As Variant
Dim ContRegis As Long
Dim Campo As Integer
Dim MiCampo As String
Dim Ref, CeCo, ClCo As String
Dim DenomClCo, FContable, Importe As String
Dim Denom, Pedido, Pos As String

Private Sub Leer_Click()
Set dbs = CurrentDb
Set Mov = dbs.OpenRecordset("Datos Mes")
If Mov.RecordCount > 0 Then
Mov.MoveFirst
Do While Not Mov.EOF
Mov.Delete
Mov.MoveNext
Loop
End If
Mov.Close
dbs.Close
Open "C:\Fichero.txt" For Input As #1
ContRegis = 0
Input #1, Micadena
L = Len(Micadena) ' Establecer longitud del registro
Do While Not EOF(1) ' Repite el bucle hasta el final del archivo.

If Left(Micadena, 2) = "| " Then
If Left(Micadena, 4) <> "| N" Then
LReg = 0
Campo = 1
For I = 4 To L
C = Mid(Micadena, I, 1)
If C = "|" Then
If Campo > 0 Then
Escribir
End If
Campo = Campo + 1
MiCampo = ""
Else
MiCampo = MiCampo & C
End If
Next
End If
End If
Input #1, Micadena
Loop
Close #1
End Sub
Private Sub Escribir()

Select Case Campo
Case 1: Ref = Trim(MiCampo)
Case 2: CeCo = Trim(MiCampo)
Case 3: ClCo = Trim(MiCampo)
Case 4: DenomClCo = Trim(MiCampo)
Case 5: Fecha = Left(Trim(MiCampo), 2) & "/" & Mid(Trim(MiCampo), 4, 2) & "/" & Right(Trim(MiCampo), 4)

Case 6: Importe = Trim(MiCampo)
Case 7: Denom = Trim(MiCampo)
Case 8: Pedido = Trim(MiCampo)
Case 9: Pos = Trim(MiCampo)
Set dbs = CurrentDb
Set Mov = dbs.OpenRecordset("Datos Mes")
Mov.AddNew
If Len(Ref) = 0 Then
Mov.Fields("Ref") = Null
Else
Mov.Fields("Ref") = Ref
End If
If Len(CeCo) = 0 Then
Mov.Fields("CeCo") = Null
Else
Mov.Fields("CeCo") = CeCo
End If
If Len(ClCo) = 0 Then
Mov.Fields("ClCo") = Null
Else
Mov.Fields("ClCo") = ClCo
End If
If Len(DenomClCo) = 0 Then
Mov.Fields("DenomClCo") = Null
Else
Mov.Fields("DenomClCo") = DenomClCo
End If
If Len(Ffecha) = 0 Then
Mov.Fields("FConta") = Null
Else
Mov.Fields("FConta") = Fecha
End If
If Len(Importe) = 0 Then
Mov.Fields("Importe") = 0
Else
Mov.Fields("Importe") = Importe
End If
If Len(Denom) = 0 Then
Mov.Fields("Denom") = Null
Else
Mov.Fields("Denom") = Denom
End If
If Len(Pedido) = 0 Then
Mov.Fields("Pedido") = Null
Else
Mov.Fields("Pedido") = Pedido
End If
If Len(Pos) = 0 Then
Mov.Fields("Pos") = Null
Else
Mov.Fields("Pos") = Pos
End If
Mov.Update
Mov.Close
dbs.Close
End Select

End Sub

Se trata de leer registros e incluir en una tabla la informacion a los campos correspondientes.

Y este el fichero: adjunto varias lineas, incluidas cabeceras y lineas con rayas tal como sale de otro sistema (en concreto de SAP):


24.10.2007 Salida dinámica de lista 1
---------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------
| Nºdoc.ref.|Ce.coste |Cl.coste|Denom.clase de coste|Fe.contab.| Val/MScCO|Denominación |Doc.compr.|Pos.|
---------------------------------------------------------------------------------------------------------------------------------------------------
| 19008618 |205000 |60110000|COMP.CONS.MAQUINAR |07.09.2007| 565,38 |CORYR, S.L. |MM760716 | 2|
| 19008619 |205000 |60110000|COMP.CONS.MAQUINAR |07.09.2007| 100,08 |CORYR, S.L. |MM760716 | 3|
| 19008620 |205000 |60110000|COMP.CONS.MAQUINAR |07.09.2007| 3,52 |CORYR, S.L. |MM760716 | 4|
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

RE:Problema al leer un fichero plano

Publicado por JuanC (243 intervenciones) el 26/10/2007 12:36:20
El problema está en la línea Input; lee sólo hasta la coma
La cambié por Line Input y reformé un poco el código

Sub escribir()
Dim hFile%
Dim sCadena$, sCampo$, i&
Dim bSalir As Boolean

hFile = FreeFile
bSalir = False
Open "C:\Fichero.txt" For Input As hFile
Input #hFile, sCadena

Do While Not EOF(hFile)
siga:
If Left(sCadena, 2) = "| " Then
If Left(sCadena, 4) <> "| N" Then
For i = 1 To 9
sCampo = Trim(Split(sCadena, "|")(i))
'Call Escribir (sCampo)
Next
End If
End If
If bSalir Then Exit Do
Line Input #hFile, sCadena
If EOF(hFile) Then
bSalir = True
GoTo siga
End If
Loop
Close #hFile
End Sub

Saludos desde Baires, JuanC
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

RE:Problema al leer un fichero plano

Publicado por Javier (3 intervenciones) el 26/10/2007 13:15:05
Lo he probado y funciona perfectamente con el Line Input.

Muchas gracias.

Un saludo desde Bilbao.
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