home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1998 #6
/
amigamamagazinepolishissue1998.iso
/
coders
/
jËzyki_programowania
/
amigae
/
e_v3.2a
/
src
/
guide
/
csv-estr.e
< prev
next >
Wrap
Text File
|
1977-12-31
|
2KB
|
51 lines
/* A suitably large size for the record buffer */
CONST BUFFERSIZE=512
PROC main()
DEF filehandle, status, buffer[BUFFERSIZE]:STRING, filename
filename:='datafile'
IF filehandle:=Open(filename, OLDFILE)
REPEAT
status:=ReadStr(filehandle, buffer)
/* This is the way to check ReadStr() actually read something */
IF buffer[] OR (status<>-1) THEN process_record(buffer)
UNTIL status=-1
/* If Open() succeeded then we must Close() the file */
Close(filehandle)
ELSE
WriteF('Error: Failed to open "\s"\n', filename)
ENDIF
ENDPROC
PROC process_record(line)
DEF i=1, start=0, end, len, s
/* Show the whole line being processed */
WriteF('Processing record: "\s"\n', line)
REPEAT
/* Find the index of a comma after the start index */
end:=InStr(line, ',', start)
/* Length is end index minus start index */
len:=(IF end<>-1 THEN end ELSE EstrLen(line))-start
IF len>0
/* Allocate an E-string of the correct length */
IF s:=String(len)
/* Copy the portion of the line to the E-string s */
MidStr(s, line, start, len)
/* At this point we could do something useful... */
WriteF('\t\d) "\s"\n', i, s)
/* We've finished with the E-string so deallocate it */
DisposeLink(s)
ELSE
/* It's a non-fatal error if the String() call fails */
WriteF('\t\d) Memory exhausted! (len=\d)\n', len)
ENDIF
ELSE
WriteF('\t\d) Empty Field\n', i)
ENDIF
/* The new start is after the end we found */
start:=end+1
INC i
/* Once a comma is not found we've finished */
UNTIL end=-1
ENDPROC