RE:Problema al leer un fichero plano
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|