Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- procedure main()
- local f,d,s,c,g,kk,xc,zx
- #печать строки "Введите путь к декодируемому файлу"
- write("Enter a file path:")
- #считывание пути
- xc:=read()
- f:=open(xc,"ru")
- #считываем первую строку и вырезаем лишние пробелы,
- #выделяем из первой строки декодируемого файла его
- #имя и создаем файл с таким именем
- d:=!f
- zx:=trim(d[11:*d])
- g:=open("C:/"||zx,"cwu")
- #процесс считывания строк с одновременным декодированием
- #строка kk - служит накопительным буфером для байтов файла
- kk:=""
- while s:=!f do {
- if *s>=4 then {
- c:=s[2:*s]
- if c~=="nd" then kk:=kk||udec(c)
- }
- }
- write(g,kk)
- end
- procedure to_bin(x)
- local r,s,n
- n:=x
- s:=""
- while n>=1 do {
- r:=n%2
- s:=s||r
- n:=integer(n/2)
- }
- s:=reverse(s)
- while *s~=6 do {
- s:="0"||s
- }
- return string(s)
- end
- procedure to_dec(d)
- local b,i,v
- b:=0
- v:=reverse(d)
- every i:=1 to *d do {
- b:=b+((2^(i-1))*v[i])
- }
- return b
- end
- #процедура преобразования:выделяем из строки 4 символа,кодируем их в код ASCII
- #затем вычитаем 32,преобразуем в бинарный вид,соединяем все в одну строку и
- #режем ее на три байта,которые складываем в накопительную переменную,итак
- #до окончания исходной строки.
- procedure udec(s)
- local size,pr,sq,sz,a1,a2,a3,a4,sf
- sq:=""
- size:=*s
- every i:=1 to size by 4 do {
- pr:=s[i+:4]
- a1:=to_bin(ord(pr[1])-32)
- a2:=to_bin(ord(pr[2])-32)
- a3:=to_bin(ord(pr[3])-32)
- a4:=to_bin(ord(pr[4])-32)
- sz:=a1||a2||a3||a4
- sf:=char(to_dec(sz[1+:8]))||char(to_dec(sz[9+:8]))||char(to_dec(sz[17+:8]))
- sq:=sq||sf
- }
- return sq
- sq:=""
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement