Mark,

Here is a clean KiX code example for reading the CSV-file into a 2D Array.

The errorchecking is not fully made, but the code is functioning. (KiX 4.20/4.21 RC2)

Sorry, I can't keep the Golf score under 100 lines [Wink]

code:
Break On
$RC = SetOption(Explicit,On)
Dim $File,$CsvArr

$File = @CurDir + '\csvtest.txt'
$CsvArr = CsvArray($File)
If @Error = 0
CsvShow($CsvArr) ; Display array on screen
EndIf

Return


; ********** Convert a CSV - file to 2D array **********
Function CsvArray($File)
Dim $Rec,$Row,$NumFields,$Handle,$i

$Handle = FreeFileHandle()
If $Handle
$RC = Open($Handle,$File)
Else
Exit 9 ; No free filehandles
EndIf

; Read first record, and determine number of fields
$Rec = ReadRec($Handle)
If @Error
Exit 1 ; File not found or empty
EndIf
$NumFields = UBound($Rec)
ReDim $CsvArray[$NumFields,0]
$Row = 0
For $i = 0 To $NumFields
$CsvArray[$i,0] = $Rec[$i]
Next

; Read the rest of records in the file
Do
$Rec = ReadRec(1) ; Read next record
If Not @Error
If UBound($Rec) <> $NumFields
Exit 2 ; Error in CSV-file, wrong number of fields in a record
EndIf
$Row = $Row + 1
ReDim Preserve $CsvArray[$NumFields,$Row]
For $i = 0 To $NumFields
$CsvArray[$i,$Row] = $Rec[$i]
Next
EndIf
Until @Error
$RC = Close($Handle)
EndFunction


; Supportfunction for CsvArray() - Read a record from the CSV-file
Function ReadRec($Handle)
Dim $Line,$Tmp,$Start,$End,$i

$Line = ReadLine($Handle)
If @Error = 0
$Line = Join(Split($Line,'""'),Chr(1))
If InStr($Line,'"')
While (UBound(Split($Line,'"')) & 1) And (@Error = 0)
$Tmp = ReadLine($Handle)
If @Error = 0
$Line = $Line + @CRLF + Join(Split($Tmp,'""'),Chr(1))
EndIf
Loop
EndIf
$Start = Left($Line,1) = '"'
$End = Right($Line,1) = '"'
$Tmp = Split($Line,'"')
$Line = ''
For $i = $Start To Ubound($Tmp) - $End
If $i & 1
$Tmp[$i] = '"' + Join(Split($Tmp[$i],','),Chr(2)) + '"'
EndIf
$Line = $Line + $Tmp[$i]
Next
$Tmp = Split($Line,',')
For $i = 0 To Ubound($Tmp)
$Tmp[$i] = Trim(Join(Split($Tmp[$i],Chr(1)),'""'))
$Tmp[$i] = Join(Split($Tmp[$i],Chr(2)),',')
Next
$ReadRec = $Tmp
Else
Exit 1
EndIf
EndFunction


; Testfunction for CsvArray() - Display the array
Function CsvShow($CsvRec)
Dim $i,$j

For $i = 0 To UBound($CsvRec,2)
For $j = 0 To UBound($CsvRec,1)
'Index: ' + $i + ',' $j ?
$CsvRec[$j,$i] ?
Next
?
Next
EndFunction

Testfile: csvtest.txt
quote:
John,Doe,120 jefferson st.,Riverside, NJ, 08075
"John ""Da Man""",Repici,"120,
121 Jefferson St.",Riverside, NJ,08075
Stephen,Tyler,"7452 Terrace ""At the Plaza"" road",SomeTown,SD, 91234
,Blankman,,SomeTown, SD, 00298
"Joan ""the bone"", Anne",Jet,"9th, at Terrace plc",Desert City,CO,00123

-Erik

{Edit}
Corrected missing DIM's

[ 08. May 2003, 01:34: Message edited by: kholm ]