Stuart McLachlan
stuart at lexacorp.com.pg
Tue Aug 3 05:59:27 CDT 2004
On 3 Aug 2004 at 11:36, paul.hartland at fsmail.net wrote:
> To all, I have been given the excellent task of taking over someones
> project (as they have left the company). I basically have to import a
> .csv file in Access the from that data, create the following 3 files
> for our psion handhelds (NEVER done this before, so need all the
> patience and help one can get). Apparently I write out to three files
> as Binary access .DAT, .IDX, .ID1.
>
> The .DAT file contains every record with the following detail.
>
> PackedBarCode, strItemCode, strDesc, strSPK
>
> PackedBarCode = 14 digit barcode compressed to 7 bytes.
> strItemCode = Uncompressed 8 character code.
> strDesc = Uncompressed 40 character description.
> strSPK = Uncompressed 7 character packsize.
>
> The .IDX file contains every 128th record with the following detail.
>
> PackedBarCode, Offset
>
> PackedBarCode = 14 digit barcode compressed to 7 bytes.
> Offset = Position of the PackedBarCode in the .DAT file (4 bytes)
>
> The .ID1 file contains every record with the following detail.
>
> strItemCode = 8 character uncompressed ItemCode
> Offset = position of the ItemCode in the .DAT file (4 bytes)
>
> Has anyone ever worked with psions, and know a fool proof way of doing
> this, I have a meeting in Doncaster on Thursday with the client and
> would really like this section to be working.
I haven't worked with psions, but I've done plenty of work with
importing/exporting files. The destination shouldn't really matter (unless you
need to worry about things like line terminator characters.)
>From you description, there are no line terminators, this is a straight data
stream so it should be fairly straightforward.
This solution makes a couple of assumptions:
1. The PackedBarCode is just a set of seven ASCII characters in the normal
range 32-127.
2. The Offsets are stored as Longs using the same method as Windows.
Here's one way. Untested, but it should be close. Let me know if it needs
tweaking:
Option Compare Database
Option Explicit
Type myExport
PackedBarCode As String * 7
strItemCode As String * 8
strDescr As String * 40
strSPK As String * 7
End Type
Type myIndex
PackedBarCode As String * 7
Offset As Long
End Type
Type myIndex1
strItemCode As String * 8
Offset As Long
End Type
Function Getdata() As Long
Dim lngRecord As Long ' Record Counter
Dim varOutput As myExport
Dim varIndex As myIndex
Dim varIndex1 As myIndex1
Open "Import.csv" For Input As #1
'Initialise output files as zero length
Open "Output.dat" For Output As #2
Close #2
Open "Output.idx" For Output As #3
Close #3
Open "output.id1" For Output As #4
Close #4
Open "Output.dat" For Random As #2
Open "Output.idx" For Random As #3
Open "output.id1" For Random As #4
While Not EOF(1)
lngRecord = lngRecord + 1
Input #1, varOutput.PackedBarCode, varOutput.strDescr, varOutput.strItemCode, varOutput.strSPK
varIndex1.strItemCode = varOutput.strItemCode
varIndex1.Offset = (lngRecord - 1) * 62 + 8
Put #2, , varOutput
Put #3, , varIndex1
If lngRecord Mod 128 = 0 Then
varIndex.PackedBarCode = varOutput.PackedBarCode
varIndex.Offset = (lngRecord - 1) * 62 + 1
Put #4, , varIndex
End If
Wend
Close #1
Close #2
Close #3
Close #4
End Function
--
Lexacorp Ltd
http://www.lexacorp.com.pg
Information Technology Consultancy, Software Development,System Support.