[AccessD] Import File From UNIX box

Gary Kjos garykjos at hotmail.com
Fri Jul 30 09:29:16 CDT 2004


It has been my experience that transferring files to and from Unix to 
Windows worlds you almost always have to look at the record terminators in a 
Hex Editor to see what is there verses what should be there. Windows Text 
format should have a CR and a LF character at the end of each record. Unix 
generally has one or the other. Some Windows programs can handle these Unix 
version text files without any problems, but Access seems to be sensitive to 
them. It wants exactly one CR and one LF. Hex 0D and Hex 0A. I have seen the 
FTP process to transfer the files from Unix to Windows add CR/LF's and 
sometimes it would only do that if it had a dot txt file extension. Weird 
stuff. What I have seen is that since there is only the CR (or the LF) The 
Access text file import will see the file as ONE RECORD. One BIG record. 
This will cause it to blow up on big files or just not work right on smaller 
ones. I have used routines similar to the one posted below to "adjust" the 
cr/lf record terminators as needed. The basic logic is to parse fhe file one 
character at a time. If it's not a CR or LF character, you send it to the 
output buffer. If it is a CR or a LF, write the record, adding the CR/LF as 
needed - or NOT because just writing the record to the file may add that for 
you. I haven't done it for a while so I forget exactly if you need to add 
them explicitly or not. I see that this code has that addition commented 
out.  Anyway, here's an example of my routine to straighten out a txt file, 
reading in one file and writing it out to a new file.

Private Sub cmdFixFile_Click()
' On Error GoTo Err_cmdFixFile_Click
    Dim dRec As String
    Dim CharCounter As Long
    Dim RecordsWritten As Double
    Dim dtEndTime As Date
    Dim dtStartTime As Date
    Dim I As Long
    Dim O As Long
    Dim strBL As String
    Dim strImportPath As String
    Dim strOutputPath As String
    Dim strNL As String
    Dim MyChar As String
    Dim MyOutputRec As String
    Dim DisplayCounter As Long
    Dim TotalCharactersRead As Double
    Dim LineFeedSwitch As Boolean
    Dim str0D As String
    Dim str0A As String
    str0D = Chr(13)
    str0A = Chr(10)
    I = FreeFile
    O = FreeFile + 1
    strNL = Chr(13) & Chr(10)

    strImportPath = "D:\aaaa\oracleconv\o200138JewelryOnly.txt"
    strOutputPath = "D:\aaaa\oracleconv\o200138JewelryOnlyCorrected.txt"
    Me!txtMessage = "Commencing Fix Process. "
    Me.Repaint
    dtStartTime = Now()
    Open strImportPath For Input As I
    Open strOutputPath For Output As O
    Do While Not EOF(I)
        MyChar = Input(1, #I)
        If MyChar = Chr(13) Or MyChar = Chr(10) Then
            If LineFeedSwitch = False Then
                MyOutputRec = MyOutputRec ' + strNL
                LineFeedSwitch = True
                Print #O, MyOutputRec
                MyOutputRec = ""
                RecordsWritten = RecordsWritten + 1
                CharCounter = 0
                DisplayCounter = DisplayCounter + 1
            End If
        Else
            MyOutputRec = MyOutputRec + MyChar
            CharCounter = CharCounter + 1
            TotalCharactersRead = TotalCharactersRead + 1
            LineFeedSwitch = False
        End If


'       If CharCounter = 655 Then
'            MyOutputRec = MyOutputRec + strNL
'            Print #O, MyOutputRec
'            MyOutputRec = ""
'            RecordsWritten = RecordsWritten + 1
'            CharCounter = 0
'            DisplayCounter = DisplayCounter + 1
'        End If
        If DisplayCounter = 500 Then
            Me!txtMessage = "Total Characters Read " & TotalCharactersRead & 
strNL & "Total Records Written " & RecordsWritten
            Me.Repaint
            DisplayCounter = 0
        End If
    Loop
    Close #I
    Close #O
    Me!txtMessage = "Total Characters Read " & TotalCharactersRead & strNL & 
"Total Records Written " & RecordsWritten
    Me.Repaint
    MsgBox "All Done - " & RecordsWritten & " Records Written"
Exit_cmdFixFile_Click:
    Exit Sub

Err_cmdFixFile_Click:
    MsgBox Err.Description
    Resume Exit_cmdFixFile_Click
End Sub



Gary Kjos
garykjos at hotmail.com



>From: "Mark A Matte" <markamatte at hotmail.com>
>Reply-To: Access Developers discussion and problem 
>solving<accessd at databaseadvisors.com>
>To: accessd at databaseadvisors.com
>Subject: [AccessD] Import File From UNIX box
>Date: Thu, 29 Jul 2004 13:48:01 +0000
>
>Hello All,
>
>I have an A97 db that imports a text file.  The text file was on a Windows 
>box...but now is generated and sent to a UNIX box.  The UNIX version of 
>this text file has a CR or LF character after each record...and access sees 
>this as the end of the file.  Any suggestions in using vba to convert this 
>file(or those characters) back to a Windows format/
>
>Thanks,
>
>Mark A. Matte
>
>_________________________________________________________________
>Overwhelmed by debt? Find out how to ‘Dig Yourself Out of Debt’ from MSN 
>Money. http://special.msn.com/money/0407debt.armx
>
>--
>_______________________________________________
>AccessD mailing list
>AccessD at databaseadvisors.com
>http://databaseadvisors.com/mailman/listinfo/accessd
>Website: http://www.databaseadvisors.com





More information about the AccessD mailing list