Обработка текста
Упражнение 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;;