baitang36 发表于 2023-12-5 09:53:17

【原创】用纯lisp实现压缩和解压缩

本帖最后由 baitang36 于 2023-12-5 10:20 编辑

因为使用了autocad的保留函数,本程序只适用于autocad,中望和浩辰暂不支持。
在syz-compress.fas中定义了两个函数:
syz-compress的功能是压缩二进制字符串,用法:(syz-compress "1234123413423421234")
syz-decompress的功能是解压缩字符串,用法:(syz-decompress "压缩字符串")
加载syz-compress.fas后,在命令行输入(syz-decompress(syz-compress "123412341234"))返回字符串"123412341234",说明加载成功。
syz-yasuo.lsp是使用syz-compress.fas的例子程序,可以实现压缩和解压缩文件。
压缩文件的函数是syz-yasuo,用法:(syz-yasuo "c:/00/1.dwg" "c:/00/1.zwg") 把1.dwg压缩成1.zwg
解压缩文件的函数是syz-jyasuo,用法:(syz-jyasuo "c:/00/1.zwg" "c:/00/2.dwg") 把1.zwg解压缩成2.zwg
syz-compress.fas是用保留函数调用windows api实现的,用了标准的LZ算法,压缩率一般,速度挺快的,压缩一个500兆的dwg用时5秒左右。
syz-compress.fas源码暂不公开,想学习lsp调用系统api者联系qq5520971(不免费)。
syz-yasuo.lsp的源码如下:

(load "c:/00/trf_9.fas")
(load "c:/00/syz-compress.fas")
(tranf "_read-nb")
(tranf "_write-nb-str")
(defun syz-yasuo (fname1 fname2 / f1 f2 str1 str2)
(setq f1 (open fname1 "r"))
(setq f2 (open fname2 "w"))
(setq str1 (_read-nb 640000000 f1))
(setq str2 (syz-compress str1))
(_write-nb-str str2 f2)
(close f2)
(close f1)
)
(defun syz-jyasuo (fname1 fname2 / f1 f2 str1 str2)
(setq f1 (open fname1 "r"))
(setq f2 (open fname2 "w"))
(setq str1 (_read-nb 640000000 f1))
(setq str2 (syz-decompress str1))
(_write-nb-str str2 f2)
(close f2)
(close f1)
)




flowerson 发表于 2023-12-5 12:32:44

厉害,学习了!

magicheno 发表于 2023-12-5 13:30:24

感谢大佬分享~

Bao_lai 发表于 2023-12-5 16:22:30

玩出新花样~

不一样地设计 发表于 2023-12-5 16:25:25

感谢楼主分享!

baitang36 发表于 2023-12-6 09:00:42

无币的朋友在这里下载

yaojing38 发表于 2023-12-6 09:00:57

感谢楼主分享!

pxt2001 发表于 2024-10-13 12:56:29

把压缩包解压到某路径,怎讲处理呢?
页: [1]
查看完整版本: 【原创】用纯lisp实现压缩和解压缩