Hi Shane,
Since posting, my method for reading and writing to a file has changed for the better. You might find this code a bit more robust.
Let me know.
John
[detail]
--------------------------------------------------------------------------
@ACCOUNT.SENT.LIST.UPDATE,
ACCOUNT.SENT.LIST.UPDATE
IF{/ACCOUNT.WRITTEN.TO.FILE[@account.number];
@QUOTE_(@account.number)@QUOTE@COMMA_@QUOTE_(@.today)@QUOTE@NEW.LINE.DELIM^/FILE.WRITE,
/FILE.WRITE@File.write,
1^/ACCOUNT.WRITTEN.TO.FILE[@account.number]}
QUOTE
D(34)
NEW.LINE.DELIM
D(13)
COMMA
D(44)
[start]
--------------------------------------------------------------------------
@INITIALIZE.ACCOUNTS.FROM.FILE;
STRING.FIND.REPLACE
; Input(s): /PARAMS
; Output(s): /STRING
; Usage: {@QUOTE,"",/TXT}^@STRING.FIND.REPLACE^/TXT
; Author: John Sharpe
/PARAMS,/PARAMS|0^FIND,/PARAMS|1^REPLACE,/PARAMS|2^STRING,
DO{STRING#(L(STRING,FIND)^P) (STRING$P)REPLACE(STRING%P)^STRING},
STRING^/STRING
INITIALIZE.ACCOUNTS.FROM.FILE
; John Sharpe - 11/15/2009
; Only get new file once per day by file date.
@FILE.BACKUP,
@FILE.NAME.PATH@File.open,
@FILE.READ,
@File.close,
@FILE.DELETE,
@FILE.CREATE,
; Open permanent copy of file and write back accounts from memory.
@FILE.NAME.PATH@File.open,
@GET.ACCOUNTS.FROM.LINES,
1
FILE.PATH.PRODUCTION
@FILE.DIRECTORY_"Archive\Accounts-Sent-"(@.today)(@.now)".txt"^/FILE.PATH.PRODUCTION
FILE.DIRECTORY
"C:\ACCOUNTS\"
FILE.NAME.PATH
@FILE.DIRECTORY"Accounts-Sent.txt"
FILE.BACKUP
; Returns production file path.
@FILE.NAME.PATH^/PATH.SOURCE,
@FILE.PATH.PRODUCTION^/PATH.TARGET,
{/PATH.SOURCE,/PATH.TARGET}@File.copy,
/PATH.TARGET
FILE.TRUNCATE
@FILE.NAME.PATH@File.truncate
FILE.DELETE
@FILE.NAME.PATH@File.delete
FILE.CREATE
@FILE.NAME.PATH@File.create
FILE.OPEN
@FILE.PATH.PRODUCTION@File.open
FILE.READ
1^Q,D(13)^DELIM,
; Read the file 1 characters at a time into an array /FILE.DATA.
DO{1@File.read^/CHR IF{(/CHR=@QUOTE);
/CHR=@LINEFEED;
(/CHR=@NEWLINE) @FILE.LINE.CTR.INC;
/FILE.DATA[Q]_/CHR^/FILE.DATA[Q]}},
1
FILE.LINE.CTR.INC
IF{(/CHR=DELIM)!(L(/FILE.DATA[Q])>254) Q+1^Q}
GET.ACCOUNTS.FROM.LINES
; Input(s): /FILE.DATA
; Output(s): /ACCOUNTS
""^Q,0^/CTR,
DO{+(/FILE.DATA[Q],/TXT)^Q /TXT^@ACCOUNTS}
ACCOUNTS
/ACCOUNT,1^/ACCOUNTS[/ACCOUNT]
QUOTE
D(34)
NEWLINE
D(13)
LINEFEED
D(10)
PRINTER
!