Read a file into a compound variable

[Autolink] Menu

 
/* sample code to read a text file into a compound variable           */

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

  if ReadTextFile( testFile  , "testStem" ) = 0 then
  do
    say "The file " || testFile || " contains " || ,
        testStem.0 || " lines."
  end /* if */
  else
    say "Error reading the file " || testFile

exit 0

/* ------------------------------------------------------------------ */
/* function: Read a text file into a compound variable                */
/*                                                                    */
/* call:     ReadTextFile fileName, stem                              */
/*                                                                    */
/* where:    fileName - name of the file to read                      */
/*           stem - stem for the lines of the file                    */
/*                                                                    */
/* returns:  0 - okay, file read, the compound variable "stem"        */
/*                     contains the lines of the file,                */
/*                     "stem".0 = no. of lines                        */
/*           else error reading the file                              */
/*                                                                    */
ReadTextFile:
  parse arg rtf.__fileName , rtf.__stemName

                        /* set the return code                        */
  rc = -1

  rtf.__i = i

  if rtf.__fileName <> "" & rtf.__stemName <> "" then
  do
    if right( rtf.__stemName,1 ) <> "." then
      rtf.__StemName = rtf.__StemName || "."

                        /* init the number of stem elements with 0    */
    rtf.__iLine = rtf.__StemName || "0 = 0 "
    interpret rtf.__iLine

                        /* set the return code 2 - file not found     */
    rc = 2

    if stream( rtf.__fileName, "c", "QUERY EXISTS" ) <> "" then
    do

                        /* set return code to 0                       */
      rc = 0

                        /* create the code to read the file           */
      rtf.__iLine = ,
       "do i = 1 until lines( """ || rtf.__fileName || """ ) = 0; "  ,
          rtf.__StemName || "i = lineIn( '" || rtf.__fileName || "');" ,
       "end;"
                        /* and now execute the code to read the file  */
      interpret rtf.__iLine

                        /* close the file                             */
      call stream rtf.__fileName, "c", "CLOSE"

                        /* correct the no. of lines in stem.0         */
      rtf.__iLine = rtf.__StemName || "0 = i "
      interpret rtf.__iLine

    end /* if stream( ... */

  end /* if rtf.__fileName <> "" & ... */

  i = rtf.__i
  drop rtf.

RETURN rc


[Back: Count lines in a file quickly - 2 -]
[Next: Read a textfile using CharIn()]