Faceless MC -- Memory Failure
Brian Yennie
briany at qldlearning.com
Tue Aug 17 17:38:40 EDT 2004
Sadhu,
I would suggest just defining a constant for how many lines to read at
once, and read from the files in chunks. Alternatively, you could pass
the number of lines to read at once in $2. I really don't think you
want to be reading the entire file at once if there's any chance of
800MB or larger files- that'll eat up gigabytes of RAM by the time you
process it...
I would try looking at one of your sample files, and figure out about
how many lines make up 1MB, and then extrapolate from there how many
lines you'd like to process based on how much memory you want to use.
EX:
constant kNumberOfLines = 20000
on startup
put $1 into inputFile
open file inputFile
repeat
read from file inputFile for kNumberOfLines lines
if (it is empty) then exit repeat
processData it
end repeat
close file inputFile
end startup
on processData inputData
// find reversed checks
repeat for each line thisLine in inputData
if (char 1 to 2 of thisLine contains "PC") then
put char 4 to 11 of thisLine \ -- reversed by ck seq #
& "|" \
& char 13 to 22 of thisLine \ -- check effective date
& linefeed after pcDateArray
end if -- a reversed check
end repeat
split pcDateArray by linefeed and "|"
// patch the date of the reversing check
repeat for each line thisLine in inputData
if (char 1 to 2 of thisLine contains "PR") then
put char 24 to 31 of thisLine into sequenceNumber
put pcDateArray[sequenceNumber] into char 13 to 22 of thisLine
end if -- reversing check
// now pass the modified data on
put thisLine
end repeat
end processData
More information about the use-livecode
mailing list