Range violation error when reading from a file

Samir samir at aol.com
Mon Jun 17 00:22:23 UTC 2019


On Sunday, 16 June 2019 at 23:55:41 UTC, lithium iodate wrote:
> There is *very* likely to be a terminating new-line at the end 
> of the file (many editors add one without asking!). If that the 
> case, the last line seen by the loop will be empty and you must 
> not attempt to access any elements.

On Monday, 17 June 2019 at 00:02:37 UTC, aliak wrote:
> The fail bit is only set after reading fails. So after you read 
> the last line, your eof will still return true, and hence your 
> range violation.

Hmmmm...maybe you and lithium iodate were onto something.

Here is what the file looks like in vim:
     > line 1
     line 2
     line 3
     > line 4
     line 5
     ~
     ~
     ~

The "5" in the last line is the last character I can put my 
cursor on.

Also, if I run the program below with the same file, I don't get 
any range violation errors:

import std.stdio;
import std.string;

void main() {
     File file = File("test.txt");
     string line;

     while (!file.eof()) {
         line = file.readln().strip;
         //if (line[0] == '>') {         // line 10
         //    writeln(line[1..$]);
         //}
         //else {
             writeln(line);
         //}
     }
}

HOWEVER, the output is interesting.  There IS a blank line 
between the last line and the prompt:

     $ dmd -run readfile.d
     > line 1
     line 2
     line 3
     > line 4
     line 5

     $

Any suggestions on how to rectify?



More information about the Digitalmars-d-learn mailing list