[Gambas-user] EOF problem

Les Hardy les at ...2337...
Sun Apr 18 11:54:11 CEST 2010


Hi Ed,
I figured it out.
First of all, depending how the text file was emptied/created, the 
contents may not be truely empty.
Gedit for example leaves the 0A (end-of-line) character in the 'empty' 
file. This is recognised by eof() as a character, so, end-of-file is not 
found.
I am not sure if this can be considered a bug in Gambas, but it does 
mean an eof() is only good for preventing read errors, and is not 
reliable for testing if a file is empty.

The following code gets around the problem.
It's not ideal, but it does work. Maybe someone else can improve on it.
Regards
Les Hardy

PUBLIC SUB Button1_Click()

 DIM tfile AS File
 DIM Fname AS String
 DIM t, txt AS String

 Label1.text = ""
 Fname = "/home/les/Documents/testdat.txt"
 tfile = OPEN Fname FOR READ
  
 IF NOT Eof(tfile) THEN
  LINE INPUT #tfile, t
  txt = IIf(Trim(t) > "", t, "EOF")
  Label1.text = txt
 ELSE
  Label1.text = "EOF"
   
 ENDIF
 CLOSE #tfile
END





Ed & Clare Kelm wrote:
> Hi!
>
> I'm having a problem reliably reading a text file.
>
> I am using:
>
> Panasonic CF-51 Toughbook
> Ubuntu 9.04 , Kernel 2.6.28-18
> Gambas 2.8, QT
>
> Below is the code for a test program which demonstrates the problem.  
> This is a simple form, with one button, and one label. The only code is 
> the Button1_click event shown.  The file "testdat.txt" contained in 
> Fname is a text file with one short line of text, created with GEDIT.
>
> One would expect that clicking Button1 would open the file, read the 
> line of text, and place it into label1.  Indeed, this is exactly what 
> happens roughly 4 times out of 5.  However, sometimes the file comes up 
> empty, with an immediate EOF.  When the program is first started from 
> the IDE, if it works correctly the first time, it will do so every time 
> the button is clicked.  However, if it fails (indicates EOF) the first 
> time, it will fail everytime the button is clicked.  Stopping the 
> program and restarting it will roll the dice anew.  There does not seem 
> to be any pattern to the failure.  It might happen twice in a row, it 
> might not happen for 10 starts.
>
> Does anybody have any ideas?  Is this an Ubuntu issue?
>
> Thanks!
>
> Ed K.
>
>
> PUBLIC SUB Button1_Click()
>
>    DIM tfile AS File
>    DIM Fname AS String
>
>    Fname = "/home/us/Documents/testdat.txt"
>
>    tfile = OPEN Fname FOR READ
>
>    label1.Text = ""
>
>    IF Eof(tfile) THEN
>       label1.Text = "EOF"
>    ELSE
>       LINE INPUT #tfile, label1.Text
>    END IF
>
>    CLOSE #tfile 
>
> END
>
>
>   





More information about the User mailing list