Сторінка
7
const empsym : set of char=[chr(9), chr(10), chr(13), chr(32)];
var c : char; inlex : boolean;
begin
lex:=''; inlex:=false; nume:=0;
while not eof(f) and not inlex do
begin
if eoln(f) then
begin inc(nume); readln(f) end
else
begin read(f, c); inlex:=not (c in empsym) end;
end;
while inlex do
begin
lex:=lex+c;
if not eof(f) then
begin
if eoln(f) then inlex:=false
else begin read(f, c); inlex:=not (c in empsym) end;
end
else inlex:=false
end;
getlex:=(lex<>'');
end; Запис накопиченого рядка слів (глобальна змінна з ім’ ям buff) у текст задамо такою процедурою:
procedure outbuff(var f : text);
begin
writeln(f, buff); buff:=''; bp:=1;
end; Як уже зазначалося, запис слова в рядок слів задається процедурою putlex:
procedure putlex(var f : text; lex : str; nume : integer);
var llx, k : integer;
begin
if nume > 0 then
outbuff(f);
for k:=1 to nume-1 do
writeln(f);
llx:=length(lex);
if (bp>1) and (bp+llx>mx) then
outbuff(f)
else
if buff<>'' then
begin
buff:=buff+' '; bp:=bp+1;
end;
buff:=buff+lex; bp:=bp+llx;
end; Нарешті, програма копіювання тексту з перетворенням рядків має вигляд:
program f80;
const mx=80;
type str=string[mx];
var f, g : text;
const buff : str=''; bp : integer=1;
var lex : str; nume : integer;
function getlex(var f : text; var lex : str; var nume : integer):boolean;
.
end;
procedure outbuff(var f : text);
.
end;
procedure putlex(var f : text; lex : str; nume : integer);
.
end;
begin
assign(f, 'in.txt'); assign(g, 'out.txt');
reset(f); rewrite(g);
while getlex(f, lex, nume) do
putlex(g, lex, nume);
if buff<>'' then outbuff(g);
close(f); close(g);
end. Задачі 14. Переробити програму f80 таким чином, щоб а) порожні рядки початкового тексту не виводилися в новий; б) при виведенні зберігалися всі пропуски, що є між словами початкового тексту.