1. Is this a bug, or am I being stupid?
- Posted by Jacques Guy <j.guy at TRL.TELSTRA.COM.AU> Sep 08, 1997
- 728 views
Greetings, all. I discovered Euphoria this week-end in a shareware CD-ROM, and downloaded version 1.5a and assorted programs yesterday. Then, to learn it, I started writing my own tutorial. Lo, at lesson 2, I am stumped. Here is my example: object fileName,infile printf(1,"%s",{"File name, please: "}) fileName=gets(0) infile=open(fileName,"r") reset(infile) if infile=-1 then printf(1,"\n%s %s\n",{fileName,"does not exist."}) else printf(1,"\n%s %s\n",{fileName,"found."}) end if Well, it doesn't work. It always reports a non-existent file, because gets(0), I found, returns a string with a linefeed appended (hex 10). Of course, I could strip that linefeed off, but there must be a better way. What have missed?
2. Re: Is this a bug, or am I being stupid?
- Posted by Robert Craig <rds at CLASSIC.MSN.COM> Sep 08, 1997
- 720 views
Jacques Guy writes: > object fileName,infile > printf(1,"%s",{"File name, please: "}) > fileName=gets(0) > infile=open(fileName,"r") > reset(infile) > if infile=-1 > then printf(1,"\n%s %s\n",{fileName,"does not exist."}) > else printf(1,"\n%s %s\n",{fileName,"found."}) > end if > Well, it doesn't work. It always reports a non-existent > file, because gets(0), I found, returns a string with a > linefeed appended (hex 10). Of course, I could strip > that linefeed off, but there must be a better way. > What have missed? You haven't missed anything. Just do: fileName = fileName[1..length(fileName)-1] to remove the linefeed. gets() will never return a length-0 string so this will always work. It will return the atom -1 at end of file, which can only happen if the user types control-Z. I originally wanted to avoid this awkwardness by having gets() trim off the linefeed character automatically, but I found that the last line in a file might not have a linefeed. It might end abruptly with end-of-file. So in order that you be able to tell if there's a linefeed or not, gets() will always include the linefeed if there is one (99.9% of the time there *is*). Regards, Rob Craig Rapid Deployment Software