2.17 Parsing a textfile

As we've already seen, it is very easy to enter a line using 'REFILL' and parse it. You can also use 'REFILL' to read lines from a text-file. It is quite similar to reading lines from the keyboard, except that you have to open a file first. This little program prints all the words of a textfile on a new line:

     " file.txt" pad copy               \ create filename
     input open                    \ open the file

       input file                  \ redirect to file
     else                          \ else error
       ." File could not be opened" cr quit

          refill                   \ get a line from file
     while                         \ check if EOF
               bl word count       \ if not, parse line
               dup 0<>             \ check if zero length
               type cr             \ if not, print word
          repeat                   \ parse next word
          drop drop                \ drop address/count
     repeat                        \ get next line

Now that flag left by 'REFILL' makes sense! If it is zero, we have reached the end of the line. Note that you don't have to open a file in text-mode (there are even no words in 4tH to do that) and both Microsoft ASCII and Unix ASCII files are supported.