Сторінка
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 таким чином, щоб а) порожні рядки початкового тексту не виводилися в новий; б) при виведенні зберігалися всі пропуски, що є між словами початкового тексту.

Перейти на сторінку номер:
 1  2  3  4  5  6  7 


Інші реферати на тему «Інформатика»: