Работа с текстовыми файлами. Изучить перевод текста из обычной формы в шестнадцатеричный формат

Страницы работы

Содержание работы

Лабораторная работа №4 Работа с текстовыми файлами

Цель работы:

Изучить перевод текста из обычной формы в шестнадцатеричный формат

Задание:

Написать программу вывода содержимого текстового файла в шестнадцатеричном формате. Экран должен быть разделён на две части: в левой – узкой, должен выводиться обычный текст, в правой – в шестнадцатеричном формате. Обеспечить момент скроллинга, т. е. передвижение по тексту при нажатии клавиш: вверх, вниз, PageUp, PageDown – причём текст при нажатия на эти клавиши должен одновременно перелистываться в обоих окнах.

Контрольный пример:

Пишем имя любого файла и нажимаем клавишу ввода, далее используем стрелки на клавиатуре и клавиши PageUp и PadeDown. Для выхожа необходимо нажать клавишу Esc (Рисунок 1 и 2)

Рисунок 1 – Ввод имени открываемого файла

Рисунок 2 – Скриншот работы программы

Текст программы:

program laba4;

uses crt;

type

ssilka=^zapis;

zapis=record

pere : string[48];

simv : string[16];

pred,sled : ssilka;

end;

var

w,nach,vsp,vspom,pos : ssilka;

c,k      : char;

f        : file of char;

name     : string[15];

i,n,per,j: integer;

srt      : string[2];

chi      : string[16];

srt1     : string[48];

srt2     : string[16];

q        : byte;

a        : boolean;

begin

textcolor(white);

clrscr;

chi:='0123456789ABCDEF';

write('Введите имя файла: ');

readln(name);

clrscr;

assign(f,name);

reset(f);

n:=1;

nach:=nil;

new(w);

srt1:='';

srt2:='';

{****ЗАГОНЯЕМ В ДИНАМИЧЕСКУЮ ПАМЯТЬ****}

while not eof(f) do

begin

i:=i+1;

read(f,c);

per:=ord(c);

srt:=chi[(per div 16)+1]+chi[(per mod 16)+1];

srt1:=srt1+srt+' ';

if (per<=20) or (per=255) then c:='*';

srt2:=srt2+c;

if i=16 then

begin

new(w);

if nach=nil then nach:=w else  vsp^.sled:=w;

w^.pred:=vsp;

w^.pere:=srt1;

w^.simv:=srt2;

w^.sled:=nil;

vsp:=w;

i:=0;

srt1:='';

srt2:='';

end;

{endif}

if eof(f) then

begin

new(w);

if nach=nil then nach:=w else  vsp^.sled:=w;

w^.pred:=vsp;

while length(srt2)<>16 do

srt2:=srt2+' ';

{endwhile}

while length(srt1)<>48 do

srt1:=srt1+' ';

{endwhile}

w^.pere:=srt1;

w^.simv:=srt2;

w^.sled:=nil;

vsp:=w;

i:=0;

end;

{endif}

end;

{endwhile}

{***Закончили вводить в динамическую память***}

{***Вывод начального окна***}

w:=nach;

gotoxy(1,1);  write('╔════════════════════════╦═══════════════════',name:8,'═════════════════════════╗');

for j:=2 to 24 do

begin

gotoxy(1,j);

write('║   ',w^.simv,'     ║  ',w^.pere,'  ║');

w:=w^.sled;

end;

{endfor}

gotoxy(1,25);  write('╚════════════════════════╩════════════════════════════════════════════════════╝');

{***Завершение вывода окна***}

{***Скролинг***}

k:=#0;

w:=nach;

vspom:=nach;

i:=0;

while k<>#27 do

begin

k:=readkey;

case k of

#80 : begin {вниз}

gotoxy(1,1);             write('╔════════════════════════╦═══════════════════',name:8,'═════════════════════════╗');

if w^.sled<>nil then

begin

w:=vspom;

w:=w^.sled;

vspom:=w;

for j:=2 to 23 do

begin

gotoxy(1,j);

write('║   ',w^.simv,'     ║  ',w^.pere,'  ║');

if w^.sled=nil then break

else w:=w^.sled;

end;

{endfor}

end;

{endif}

gotoxy(1,24);

write('║   ',w^.simv,'     ║  ',w^.pere,'  ║');

gotoxy(1,25);

write('╚════════════════════════╩════════════════════════════════════════════════════╝');

end;

#72 : begin {вверх}

gotoxy(1,1);                write('╔════════════════════════╦═══════════════════',name:8,'═════════════════════════╗');

if w^.pred<>nil then

begin

w:=vspom;

w:=w^.pred;

vspom:=w;

for j:=2 to 24 do

begin

gotoxy(1,j);

write('║   ',w^.simv,'     ║  ',w^.pere,'  ║');

if w^.sled=nil then break

else w:=w^.sled;

end;

{endfor}

w:=vspom;

end;

{endif}

gotoxy(1,25);                write('╚════════════════════════╩════════════════════════════════════════════════════╝');

end;

#81 : begin {pagedown}

gotoxy(1,1);                write('╔════════════════════════╦═══════════════════',name:8,'═════════════════════════╗');

if w^.sled<>nil then

begin

i:=0;

w:=vspom;

for j:=1 to 23 do

if w^.sled<>nil then

w:=w^.sled

else break;

vspom:=w;

for j:=2 to 23 do

begin

i:=i+1;

gotoxy(1,j);

write('║   ',w^.simv,'     ║  ',w^.pere,'  ║');

if w^.sled=nil then break

else w:=w^.sled;

end;

{endfor}

w:=vspom;

if i<>23 then

begin

for i:=1 to 24-j do

w:=w^.pred;

end;

{endif}

vspom:=w;

for j:=2 to 24 do

begin

gotoxy(1,j);

write('║   ',w^.simv,'     ║  ',w^.pere,'  ║');

if w^.sled=nil then break

else w:=w^.sled;

end;

{endfor}

end;

{endif}

{gotoxy(1,24);

write('║   ',w^.simv,'     ║  ',w^.pere,'  ║');}

gotoxy(1,25);                write('╚════════════════════════╩════════════════════════════════════════════════════╝');

end;

#73 : begin {pageup}

gotoxy(1,1);                write('╔════════════════════════╦═══════════════════',name:8,'═════════════════════════╗');

if w^.pred<>nil then

begin

w:=vspom;

w:=w^.pred;

for j:=1 to 23 do

begin

if w^.pred<>nil then

w:=w^.pred

else break;

end;

{endfor}

vspom:=w;

for j:=2 to 24 do

begin

gotoxy(1,j);

write('║   ',w^.simv,'     ║  ',w^.pere,'  ║');

if w^.sled=nil then break

else w:=w^.sled;

end;

{endfor}

w:=vspom;

end;

{endif}

gotoxy(1,25);                write('╚════════════════════════╩════════════════════════════════════════════════════╝');

end;

#27 : begin

dispose(w);

exit;

end;

end;

{endcase}

end;

{endwhile}

{***Конец скролинга***}

end.

Похожие материалы

Информация о работе