Brian Kernighan, in a lecture at the University of Nottingham, described a problem on which this task is based.

Problem

You are given a a data file of thousands of lines; each of three `whitespace` separated fields: a date, a one word name and the magnitude of the event.

Example lines from the file would be lines like:

8/27/1883    Krakatoa            8.8
5/18/1980    MountStHelens       7.6
3/13/2009    CostaRica           5.1
Task

 Create a program or script invocation to find all the events with magnitude greater than 6
 Assuming an appropriate name e.g. "data.txt" for the file:
 Either: Show how your program is invoked to process a data file of that name.
 Or: Incorporate the file name into the program, (as it is assumed that the program is single use).


 
/* Kernighans large earthquake problem. */
 
#include <flow.h>
#include <flow-flow.h>
 
#define MAX_LINE 1000
 
DEF-MAIN(argv,argc)
   MSET(fd, Event )
   TOK-INIT
   OPEN-INPUT("datos.txt")(fd)
   COND( IS-NOT-FILE-ERROR? )
      TOK-SEP( " " ), TOK(3)
      WHILE( NOT( EOF(fd) ) )
         LET( Event := USING(MAX_LINE) READ-LINE(fd) APPLY-TRM )
         WHEN( LEN(Event) ){
            WHEN( GT?( VAL(TOK-GET(Event)), 6 ) ){
               PRNL( Event )
            }
         }
      WEND
      CLOSE(fd)
   ELS
      PRNL("Error: ", ~GET-STR-FILE-ERROR )
   CEND
END
 