[[https://www.revelation.com/|Sign up on the Revelation Software website to have access to the most current content, and to be able to ask questions and get answers from the Revelation community]] ==== Writing (1) Digit To The End Of A Dos File (AREV Specific) ==== === At 17 MAY 2000 09:38:20PM Jim Dierking wrote: === {{tag>"AREV Specific"}} Well Don was right, xlating and writing a dos file works great unless the variable goes over the 64k limit, which happened. I used the code Aaron recommended to obtain the length of the dos file. "Length=Dir('f:\arev3_1\datavol\export.txt')" How can I write a null value to the last digit of the DOS file? TIA for the help, Jim Dierking ---- === At 17 MAY 2000 10:21PM Larry Wilson - TARDIS Systems, Inc. wrote: === something like: * open the DOS file CurPos=0 Done=0 loop OSBREAD Chunk from DosFileVar at CurPos LENGTH 64000 ** read 64K chunks ** Check status here - look at the R/Basic book ** set EOF if end of file if EOF then CurPos += LEN(Chunk) Done=1 end else if Chunk then CurPos += LEN(Chunk) * look at Steve Smith's bugs page at: [url=http://www.ozemail.com.au/~stsm/top5.htm]Steve's Bug List[/url] * this checks for a bug in AREV end else CurPos -= 1 * for some reason, EOF was missed on the last read, but this * is the end, so get the actual last pos Done=1 end until Done do repeat OSBREAD Chr from DosFileVar at CurPos LENGTH 1 if Chr=CHAR(26) then ** do you want to overwrite EOF? ** if so, just write, else CurPos -= 1 then write here end else if you want to overwrite the last char, write at CurPos else CurPos += 1 write whatever you want OSBWRITE newChar on DosFileVar at CurPos end be sure to look at Steve's remark. tardis_systems@yahoo.com http://AdvancedRevelation.com (the icon below is real-time; if I'm not on, it asks to take a message if I ring for a chat, you'll get a floating box that says to click for a chat.) ---- === At 17 MAY 2000 11:17PM Larry Wilson - TARDIS Systems, Inc. wrote: === Of course, if you don't need to look for anything else in the file, you could just do an INITDIR and DIR() and get the filezie then do a OSBREAD testchar from DosFileVar at FileSize-1 LENGTH 1 (remember that os OSBREAD, the file starts at 0, not 1) Then you don't need a loop. ---- === At 18 MAY 2000 01:21AM Jim Dierking wrote: === Thanks for the help. Here's what worked...Jim OSOPEN "UPS.TXT" TO UPS ELSE STOP OSBWRITE "" ON UPS AT (Dir('f:\arev\UPS.txt') - 1) OSCLOSE UPS ---- === At 18 MAY 2000 01:39AM Larry Wilson wrote: === A few lines less than my first suggestion - nice succinct code. Would you please send me your email address? I thought that was you on the system around midnight but wasn't sure enough to try to trigger a chat (it's interesting what that little icon does!) Later, Larry ---- === At 18 MAY 2000 09:16AM Don Miller - C3 Inc. wrote: === Just to be safe, check for the MOD 21930 bug before doing the read/write. See Steve Smith's top 5 AREV bugs. If you're at the magic number, back up one byte and read 1 byte. Then append your data to that byte and do the OSBWRITE there. E.G. * COMPUTE BYTE POSITION TO WRITE AT AND STORE IT IN BYTE_POS * CHECK FOR THE BAD PLACE PER STEVE AND SET FOOBAR TO 1 ELSE FOOBAR=0 IF FOOBAR THEN BYTE_POS-=1 OSBREAD HUNK FROM WHATEVER_FILE AT BYTE_POS,1 HUNK:=MY_BYTE OSBWRITE HUNK ON WHATEVER_FILE AT BYTE_POS END ELSE OSBWRITE MY_BYTE ON WHATEVER_FILE AT BYTE_POS END HTH Don Miller C3 Inc. [[https://www.revelation.com/revweb/oecgi4p.php/O4W_HANDOFF?DESTN=O4W_RUN_FORM&INQID=NONWORKS_READ&SUMMARY=1&KEY=D27B71DE00B64789852568E3000900DC|View this thread on the forum...]]