attempt to read past eof error
Author |
Message |
cloust
|
Posted: Sun Jan 29, 2006 9:17 am Post subject: attempt to read past eof error |
|
|
in my program, you can create an account, edit it, login, etc. I was trying to make a search function in the program, where you can lookup your account without having to login. I can succesfully look up the first account in my record, but if I try to lookup anything else, I get an error saying that it attempted to read past eof, and I have no idea why its doing this.
here is the code, I was wondering if anyone could see what I'm missing.
code: | proc sear
open : filenumber, "WoWaccounts.dat", get
%%%
put "enter your accout name: " ..
get search %search inquiry
loop
number += 1 %used to count which account the array is on
for i : 1 .. number
get : filenumber, accountc (i).name
get : filenumber, accountc (i).address
get : filenumber, accountc (i).pnumber
get : filenumber, accountc (i).ccard
get : filenumber, accountc (i).username
if accountc (i).username = search then
put "Name: ", accountc (i).name
put "Adress: ", accountc (i).address
put "Phone Number: ", accountc (i).pnumber
put "Credit card: ", accountc (i).ccard
put "Username: ", accountc (i).username
coo := 2 % used for an exit condition
exit
elsif accountc (i).username not= search then
put "I'm sorry, there is no user with that name"
end if
end for
if coo = 2 then
exit
end if
end loop
close : filenumber
end sear
|
|
|
|
|
|
![](images/spacer.gif) |
Sponsor Sponsor
![Sponsor Sponsor](templates/subSilver/images/ranks/stars_rank5.gif)
|
|
![](images/spacer.gif) |
Delos
![](http://www.members.shaw.ca/rfolz/delos_avatar.gif)
|
Posted: Sun Jan 29, 2006 9:36 am Post subject: (No subject) |
|
|
You've read the 'end of file' (eof). Make sure your source file has the correct number of lines (1 for each of the get: statements).
Additionally, you may want to edit your code a bit and try incorporate this sort of routine instead:
code: |
var file : int
var temp : string
open : file, "myfile.txt", get
loop
exit when eof (file)
get : file, temp
put temp
end loop
close : file
|
The 'exit when eof (file)' is the key line. See if you can figure out how to incorporate that into your code (hint, you'll only be using 1 get: statement). |
|
|
|
|
![](images/spacer.gif) |
cloust
|
Posted: Sun Jan 29, 2006 10:03 am Post subject: (No subject) |
|
|
well, after trying the method you showed, I realised that turing was writing the input to my files wrong. if, say for my phone number, I put (812) 888 3456, it would write each item after the space to a new line.
I have no idea why its doing that. |
|
|
|
|
![](images/spacer.gif) |
Delos
![](http://www.members.shaw.ca/rfolz/delos_avatar.gif)
|
Posted: Sun Jan 29, 2006 11:11 am Post subject: (No subject) |
|
|
Sounds familiar. Post the code for that part of your proggie, I'll take a look at it. |
|
|
|
|
![](images/spacer.gif) |
cloust
|
Posted: Sun Jan 29, 2006 11:21 am Post subject: (No subject) |
|
|
code: | type account :
record
name : string
address : string
pnumber : string
ccard : string
username : string
password : string
end record
proc create
%the procedure for creating an account
for num : 1 .. 1
colorback (90)
locate (10, 27)
get accountc (num).name : *
locate (16, 29)
get accountc (num).address : *
locate (20, 39)
get accountc (num).pnumber : *
locate (24, 42)
get accountc (num).ccard : *
locate (28, 45)
get accountc (num).username : *
locate (32, 33)
accountc (num).password := getpass
end for
open : filenumber, "WoWaccounts.dat", put, seek, mod
%put information into a file
for a : 1 .. 1
seek : filenumber, *
put : filenumber, accountc (a).name
put : filenumber, accountc (a).address
put : filenumber, accountc (a).pnumber
put : filenumber, accountc (a).ccard
put : filenumber, accountc (a).username
put : filenumber, accountc (a).password
end for
close : filenumber
end create |
|
|
|
|
|
![](images/spacer.gif) |
Delos
![](http://www.members.shaw.ca/rfolz/delos_avatar.gif)
|
Posted: Sun Jan 29, 2006 1:02 pm Post subject: (No subject) |
|
|
Hmm...strange. I just tried out your code and it works fine for me. (I did have to recreate the pertinent undeclared variables though...).
I noticed that you're using seek and mod - these are more commonly used with write: as opposed to put:. It does its job though.
You may want to consider, instead of using them, to read the whole file into a flexy array, get the new info, then put: all of that to the file. Technically a little slower, but might solve your problem (which for some reason doesn't happen to me). |
|
|
|
|
![](images/spacer.gif) |
cloust
|
Posted: Sun Jan 29, 2006 2:07 pm Post subject: (No subject) |
|
|
okie, I found the tutorial on flexible arrays, so I'll see what I can do. thanks for the help! |
|
|
|
|
![](images/spacer.gif) |
redrenagade
|
Posted: Sat Feb 04, 2006 6:17 pm Post subject: (No subject) |
|
|
This might help, try to put the "exit when eof" line at the end of your loop. I think your program is exiting when it reaches the end of file, then, for some reason, trying to read the next line of code within the loop. |
|
|
|
|
![](images/spacer.gif) |
Sponsor Sponsor
![Sponsor Sponsor](templates/subSilver/images/ranks/stars_rank5.gif)
|
|
![](images/spacer.gif) |
|
|