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

       

Обработка текста


Упражнение 13.1. Напишите программу, отсекающую n пробелов в начале каждой строки (или n первых любых символов). Учтите, что в файле могут быть строки короче n (например, пустые строки).

Program Tabs;

uses sysutils,linux;

var

  f1,f2:Text;

  TmpS:string;

  n,Code:Integer;

begin

  Assign(f1,Paramstr(1));

  Assign(f2,Paramstr(2));

  Reset(f1);

  Rewrite(f2);

  if ParamCount=3 then val(ParamStr(3),n,Code)



  else n:=0;

  While Not(eof(f1)) do

    begin

      Readln(f1,TmpS);

      Writeln(f2,Copy(TmpS,n,Ord(TmpS[0])-n));

    end;

  Close(f1);

  Close(f2);

end.

Упражнение 13.2. Составьте программу, центрирующую строки файла относительно середины экрана, т.е. добавляющую в начало строки такое количество пробелов, чтобы середина строки печаталась в 40-ой позиции (считаем, что обычный экран имеет ширину 80 символов).

Program Center;

uses crt;

var

  s:string;

  f:text;

procedure writecenter(s:string);

begin

  if ord(s[0])<80 then

  begin

    GotoXY(wherex+(80-ord(s[0]))div 2,wherey);

    writeln(s);

  end

  else writeln(s);

end;

begin

  if paramcount<1 then

    begin

      Writeln('error');

      Halt(1);

    end;

  Assign(f,paramstr(1));

  Reset(f);

  While not(eof(f)) do

    begin

      Readln(f,s);

      writecenter(s);

    end;

  Close(f);

end.

 

Упражнение 13.3. Напишите программу, переносящую слишком длинные строки. Слова разбивать нельзя (неумещающееся слово следует перенести целиком). Ширину строки считать равной 60.

Program Tabs;

var

  f1,f2:Text;

  TmpS,StrBuf:string;

  n,Code:Integer;

const

  step=60;

begin

  Assign(f1,Paramstr(1));

  Assign(f2,Paramstr(2));

  Reset(f1);

  Rewrite(f2);

  StrBuf:='';

  While Not(eof(f1)) do

    begin

      Readln(f1,TmpS);

      TmpS:=StrBuf+TmpS;

      n:=step;

      if ord(Tmps[0])>step then

        begin

          While (not(TmpS[n]in [' ',',','(',')',';','.']))do if n>=1 then Dec(n) else Exit;

          While (TmpS[n]in [' ',',','(',')',';','.'])do if n>=1 then Dec(n) else Exit;;



Содержание раздела