Изучить перевод текста из обычной формы в шестнадцатеричный формат
Написать программу вывода содержимого текстового файла в шестнадцатеричном формате. Экран должен быть разделён на две части: в левой – узкой, должен выводиться обычный текст, в правой – в шестнадцатеричном формате. Обеспечить момент скроллинга, т. е. передвижение по тексту при нажатии клавиш: вверх, вниз, 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.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.