IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Архив, Вывод архива
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Ребят подскажите пожалуйста что с кодом?
писал программу архиватор, проблемма с выводом самого архива кто шарит подскажите пожалуйтса

const
alpha: String = 'abcdefghijklmnopqrstuvwxyz0123456789-.:,;!? '#10#13;

type
TArchiveFile = file of Byte;

var
name , name2 , name3: string;
f : text;

procedure Archive(name, name2: string);
var
text_file: Text;
arch_file: TArchiveFile;

byte_a, byte_b: Byte;

archive_byte, left, right: Byte;

ch: Char;

begin
assign(text_file, name);
reset(text_file);

assign(arch_file, name2);
rewrite(arch_file);

if not eof(text_file) then begin

left := 2;
right := 4;

repeat

if (left = 2) and not eof(text_file) then begin
read(text_file, ch);
byte_a := Pos(ch, alpha);
end else byte_a := byte_b;

if not eof(text_file) then begin
read(text_file, ch);
byte_b := Pos(ch, alpha);
end else
byte_b := 0;

archive_byte := byte(byte_a shl left) or byte(byte_b shr right);

write(arch_file, archive_byte);

if left < 6 then
left := left + 2
else
left := 2;

if right > 0 then
right := right - 2
else
right := 4;

until eof( text_file );

if (right <> 4) and (byte_b <> 0) then
write(arch_file, byte(byte_b shl left));

end;

close(text_file);
close(arch_file);
end;

procedure UnArchive(name2, name3: String);
var
unarchive_byte, byte_a, byte_b, curr_unbyte_num, bytes_done: Byte;
txt_file: Text;
arc_file: TArchiveFile;

last_readed_byte, file_size: LongInt;

begin
assign(txt_file, name2);
rewrite(txt_file);

assign(arc_file, name3);
reset(arc_file);

curr_unbyte_num := 0;
last_readed_byte := -1;
bytes_done := 0;

repeat

inc(bytes_done);

if curr_unbyte_num < 4 then
inc(curr_unbyte_num)
else
curr_unbyte_num := 1;

if curr_unbyte_num = 4 then begin

seek(arc_file, last_readed_byte);
read(arc_file, byte_a);

unarchive_byte := byte(byte(byte_a shl 2) shr 2);

end else if curr_unbyte_num = 3 then begin

seek(arc_file, last_readed_byte);
read(arc_file, byte_a);

seek(arc_file, last_readed_byte + 1);
read(arc_file, byte_b);

unarchive_byte := byte(byte(byte_a shl 4) shr 2) + byte(byte_b shr 6);

inc(last_readed_byte);

end else if curr_unbyte_num = 2 then begin

seek(arc_file, last_readed_byte);
read(arc_file, byte_a);

seek(arc_file, last_readed_byte + 1);
read(arc_file, byte_b);

unarchive_byte := byte(byte(byte_a shl 6) shr 2) + byte(byte_b shr 4);

inc(last_readed_byte);

end else begin

inc(last_readed_byte);
seek(arc_file, last_readed_byte);
read(arc_file, byte_a);

unarchive_byte := byte(byte_a shr 2);
end;

if unarchive_byte <> 0 then
write(txt_file, alpha[unarchive_byte]);

until bytes_done = 8 * (filesize(arc_file)) div 6;

close(txt_file);
close(arc_file);
end;

begin
writeln('Введите путь к файлу: ');
readln(name);
writeln('Введите путь, где будет сохранен будущий архив');
readln(name2);
writeln('Введите куда разархивируется файл: ');
readln(name3);
begin
Assign(f,name3)
end;
Archive(name, name2);
UnArchive(name2, name3);
Writeln('Done');
ReadLn;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 6.05.2024 2:52
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name