Системное программирование в UNIX средствами Free Pascal


         

в поток _stream. Это всего


uses stdio;
function ungetc(c:integer; _stream:pfile):integer;
Процедура ungetc возвращает символ с в поток _stream. Это всего лишь логическая операция. Входной файл не будет при этом изменяться. В случае успешного завершения процедуры ungetc символ с будет следующим символом, который будет считан процедурой getc. Гарантируется возврат только одного символа. В случае неудачной попытки вернуть символ с процедура ungetc возвращает значение EOF. Попытка вернуть сам символ EOF должна всегда завершаться неудачей. Но это обычно не представляет проблемы, так как все последующие вызовы процедуры getc после достижения конца файла приведут к возврату символа EOF.
Обычно процедура ungetc используется для восстановления исходного состояния входного потока после чтения лишнего символа для проверки условия. Следующая процедура getword применяет это простой подход для ввода строки, которая содержит либо непрерывную последовательность алфавитно-цифровых символов, либо одиночный нетекстовый символ. Конец файла кодируется возвращенным значением nil. Процедура getword принимает в качестве аргумента указатель на структуру TFILE. Она использует для проверки два макроса, определенные в файле stdio. Первый из них, isspace, определяет, является ли символ пробельным символом, таким как символ пробела, табуляции или перевода строки. Второй, isalnum, проверяет, является ли символ алфавитно-цифровым, то есть цифрой или буквой.
(* В этом файле определены isspace и isalnum *)
uses stdio;
const
  MAXTOK=256;
var
  inbuf:array [0..MAXTOK] of char;
function getword (inf:pfile):pchar;
var
  c,count:integer;
begin
  count:=0;
  (* Удалить пробельные символы *)
  repeat
    c := getc (inf);
  until not isspace (c);
  if c = EOF then
  begin
    getword:=nil;
    exit;
  end;
  if not isalnum (c) then    (* символ не является алфавитно-цифровым *)
  begin
    inbuf[count] := char(c);
    inc(count);
  end
  else
  begin
    (* Сборка "слова" *)

Содержание  Назад  Вперед