Count lines in a file quickly

[Autolink] Menu

 
/* sample code to count the lines in a file quickly                   */
/*                                                                    */
/* Source: I found this code in a message on the internet             */
/*                                                                    */
/* see also Count lines in a file quickly - 2 -                       */
/*                                                                    */

                        /* name of the file                           */
  testFile = "C:\OS2\INISYS.RC"

  call time "r"

  noOfLines = CountLines( testFile )

  if noOfLines >= 0 then
  do
    say "The file " || testFile || " contains " || ,
        noOfLines || " lines."
    say "It took " || time( "e" ) || " seconds to get the number."

  end /* if */
  else
    say "Error reading the file " || testFile

exit 0

/* ------------------------------------------------------------------ */
/* function: Get the number of lines in a file                        */
/*                                                                    */
/* call:     CountLines( fileName )                                   */
/*                                                                    */
/* where:    fileName - name of the file                              */
/*                                                                    */
/* returns:  n                                                        */
/*             if n is >= 0 then it is the number of lines            */
/*             if n is < 0 an error occured                           */
/*                                                                    */
CountLines: PROCEDURE
  parse arg fileName

  if stream( fileName, "c", "QUERY EXISTS" ) <> "" then
  do
    if stream( fileName, "c", "OPEN READ" )  = "READY:" then
    do

      thisRC = 0
      do while chars( fileName ) > 0

        thisRC = thisRC + ,
         words( translate( charin( fileName, , 24020 ), "          1" ) )

      end /* do while chars( fileName ) > 0 */
      call stream fileName, "c", "close"

    end /* if stream( fileName, "c", "open read" )  = "READY:" then */
    else
      thisRC = -1

  end /* if stream( fileName, "c", "QUERY EXISTS" ) <> "" then */
  else
    thisRC = -2

RETURN thisRC


[Back: Search a file]
[Next: Count lines in a file quickly - 2 -]