[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]