Computer Science Canada

attempt to read past eof error

Author:  cloust [ 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

Author:  Delos [ Sun Jan 29, 2006 9:36 am ]
Post 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).

Author:  cloust [ Sun Jan 29, 2006 10:03 am ]
Post 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.

Author:  Delos [ Sun Jan 29, 2006 11:11 am ]
Post subject: 

Sounds familiar. Post the code for that part of your proggie, I'll take a look at it.

Author:  cloust [ Sun Jan 29, 2006 11:21 am ]
Post 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

Author:  Delos [ Sun Jan 29, 2006 1:02 pm ]
Post 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).

Author:  cloust [ Sun Jan 29, 2006 2:07 pm ]
Post subject: 

okie, I found the tutorial on flexible arrays, so I'll see what I can do. thanks for the help!

Author:  redrenagade [ Sat Feb 04, 2006 6:17 pm ]
Post 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.


: