MartyConnelly
martyconnelly at shaw.ca
Mon Apr 24 12:24:27 CDT 2006
I think you may have to read each record and parse, if there are field
delimiters
you can use the split function. The ADO text driver might work but it
would be convoluted
because it expects column header info at beginning.
You might be able to do with schema.ini playing with
FixedFormat option Only used when the Format is FixedLength,
this can be set to one of the following values: RaggedEdge or
TrueFixedLength.
RaggedEdge allows rows to be terminated with a Carriage Return character.
TrueFixedLength requires each row to be an exact number of characters,
and any Carriage Return characters not at a row boundary are assumed to
be embedded in a field.
One of these methods will work
Public Sub ReadFile(ByVal sFileName As String, ByRef sContents As String)
' Dump XML String to File for debugging
Dim strLine As String
Dim intLine As Long
Dim fhFile As Integer
intLine = 0
sContents = ""
fhFile = FreeFile
' Debug.Print "Length of string=" & Len(sContents)
Open sFileName For Input As #fhFile
Do While Not EOF(1) ' Loop until end of file.
Input #1, strLine ' Read data
intLine = intLine + 1
sContents = sContents & strLine
'Debug.Print sContents ' Print data to Debug window.
Loop
Close #fhFile ' Close file.
Debug.Print "Input File" & sFileName & " lines=" & intLine
End Sub
or
Sub ImportFile(strFileName As String)
Dim rs As Recordset
Dim strComplete As String
Dim strLine As String
Dim fNum As Integer 'for file I/O
'open rs on table where you want to add fields
Set rs = CurrentDb.OpenRecordset("tblYourTableHere", dbOpenDynaset)
'Open data file
fNum = FreeFile 'file handle for I/O
Open strFileName For Input As #fNum
'Data on 3 lines?
'read a line
Line Input #1, strLine
strComplete = strLine
Line Input #1, strLine
strComplete = strComplete & strLine
Line Input #1, strLine
strComplete = strComplete & strLine
'we expect to enter this loop with the first 3 lines read... a
complete record
'just parse the lines into the proper recordset fields
Do
rs.AddNew
rs!CustNo = left(strComplete, 9)
rs!CustName = Mid(strComplete, 10, 40)
rs!CustCity = right(strComplete, 10)
rs.Update
'are we at the end of the file?
If EOF(fNum) Then
Exit Do
End If
'well, we're not at the end of the file so must have more data
'read in next 3 lines of data and loop
Line Input #1, strLine
strComplete = strLine
Line Input #1, strLine
strComplete = strComplete & strLine
Line Input #1, strLine
strComplete = strComplete & strLine
Loop
ProcExit:
Close #fNum ' Close file.
'close and set objects to nothing
rs.Close
Set rs = Nothing
End Sub
Reuben Cummings wrote:
>I have a LONG text file that I need to extract into an Access table.
>
>Every record is five lines so the Access import system will not work. The
>field descriptions are also part of the data which is no big deal. I can
>import the field descriptions and then delete those fields later.
>
>What I am after is...Does anyone have a neat fixed-length import system that
>will handle multiple lines per record?
>
>If not, how do I jump to the next line after I finish with one?
>
>Can I read one entire line into a string and then manipulate that? Or
>analyze it for certain data in order to handle the entire line differently?
>
>Thanks.
>
>Reuben Cummings
>GFC, LLC
>812.523.1017
>
>
>
>
>
>
--
Marty Connelly
Victoria, B.C.
Canada