[Back to TEXTFILE SWAG index] [Back to Main SWAG index] [Original]

    { GUY MCLOUGHLIN }

    (* Public domain text-file "seek" line demo.            *)
    (* Guy McLoughlin - October 1993.                       *)
    program SeekLineDemo;

    (* Text buffer type definition.                         *)
    type
      TextBuffer = array[1..(16 * 1024)] of byte;

      (***** Check for IO file errors.                                    *)
      (*                                                                  *)
    procedure CheckForErrors;
    var
      Error : byte;
    begin
      Error := ioresult;
      if (Error <> 0) then
      begin
        writeln('FILE ERROR = ', Error);
        halt(1);
      end;
    end;

    (***** Seek to specified line in a text file. LineCount returns the *)
    (*     line number that was "seeked" to.                            *)
    (*                                                                  *)
    procedure SeekLine({input } var TextFile   : text;
                                var Tbuffer    : TextBuffer;
                                    LineNumber : word;
                       {output} var LineCount  : word);
    var
      TempStr  : string;
    begin
      (* Assign text buffer.                                  *)
      settextbuf(TextFile, Tbuffer);

      (* Reset text file, and check for IO errors.            *)
      {$I-}
      reset(TextFile);
      {$I+}
      CheckForErrors;

      (* Read text file until just before specified line, or  *)
      (* end of text file reached.                            *)
      LineCount := 0;
      repeat
        readln(TextFile, TempStr);
        inc(LineCount)
      until (LineCount = pred(LineNumber)) or eof(TextFile);

      (* If end of text file not reached, add 1 to LineCount. *)
      if NOT eof(TextFile) then
        inc(LineCount)
    end;

    var
      LineCount,
      LineNumber : word;
      TempStr    : string;
      TextFile   : text;
      Tbuffer    : TextBuffer;

    BEGIN
      (* Assign text filename.                                *)
      assign(TextFile, 'TEST.TXT');

      (* Obtain line numbe to display from user.              *)
      write('ENTER LINE NUMBER TO DISPLAY : ');
      readln(LineNumber);
      writeln('SEEKING TO LINE ', LineNumber);

      (* Seek to line user wants to see.                      *)
      SeekLine(TextFile, Tbuffer, LineNumber, LineCount);

      (* If seek was successful, then read and display line.  *)
      if (LineCount = LineNumber) then
      begin
        readln(TextFile, TempStr);
        writeln;
        writeln('LINE ', LineNumber, ' = ', TempStr);
      end
      else
        (* Else, display total number of lines in text file.    *)
        writeln('Sorry, total lines in TEST.TXT = ', LineCount);

      (* Close the text file.                                 *)
      close(TextFile);
    END.

[Back to TEXTFILE SWAG index] [Back to Main SWAG index] [Original]