Bill Tillman 发表于 2022-7-6 07:59:07

LISP程序行计数器

有人知道一个实用程序可以计算LISP程序中的代码行吗?一种忽略注释,只计算实际代码行的方法。
 
这就引出了我的另一个问题。你们什么时候会认为LISP程序太大或太臃肿?我写的一些模块接近1000行。我经常想知道是否应该把它们分成不同的文件。
 
即使是最大的一个也会在几秒钟内执行。从单击Excel中的大“GO”按钮到绘制完整图形的总时间从瞬间到大约10秒不等,具体取决于用户的机器。我担心代码变得太难管理,因为所有的IF语句都需要覆盖所有的设计选项。
 
我有一个unix(FreeBSD)服务器,我想我可以使用sed编写一些shell脚本来删除文件中的注释,然后只计算剩余的行。但我希望有人以前曾报道过这一领域。

Lt Dan's l 发表于 2022-7-6 08:08:55

我会用这样的方式来读取文件。如果有任何意见
;| 评论|;你会得到一个不准确的数字。如果这是一个问题,我可以稍后为您修改。
 
 

(defun readfile ( filename / _l _line )
(setq filename (open filename "r"))
(while (setq _line (read-line filename))
   (if
   (not
       (or (eq "" _line)
         (wcmatch _line ";*")
       )
   ) (setq _l (cons _line _l))
   )
) (close filename)
(reverse _l)
)
 
(length (readfile "c:\\filename.lsp"))
 
 
 
我有一个工具。lsp有6892行,我没有问题

Lee Mac 发表于 2022-7-6 08:10:26

做一些简单的事情怎么样:
 
(defun c:CountLISPLines ( / file line lines )
   (if
       (and
         (setq file (getfiled "" "" "lsp" 16))
         (setq file (open file "r"))
       )
       (progn
         (setq lines 0)
         (while (setq line (read-line file))
               (if (not (or (eq "" (setq line (vl-string-trim "\t " line))) (wcmatch line ";*")))
                   (setq lines (1+ lines))
               )
         )
         (close file)
         (princ (strcat "\nFile contains " (itoa lines) " lines of code."))
       )
   )
   (princ)
)

BIGAL 发表于 2022-7-6 08:16:17

比尔:每次你启动一个新程序时,都会重复1000行代码吗?作为调用自动加载库lisp的单行代码,20行代码会更好吗?如果你回答是的,那么可能是时候看看库了,我参与了一个商业产品,每个程序的前几行代码都是相同的,层操作总是调用库函数,因为我们有一个智能层管理器,没有使用输入或硬编码。大约150多个口吃,而不是一个大口吃。正如您所说,加载时间从来都不是问题。

Bill Tillman 发表于 2022-7-6 08:26:09

谢谢李和比格尔,
 
我运行了代码,在最新的程序中得到了2330行代码。当然,我们每个人的节目风格都不一样。我总是试着在每一行上只保留一个命令,只有像TRIM这样的命令,我才开始把事情展开,这样我就可以看到我在做什么,然后进行调试。大多数时候,我把PROGN和IF语句的最后一个括号放在它们自己的行上。事实上,我允许IDE格式化我的代码,哇,它曾经传播过东西。看起来不错,但它也变得很难调试,因为它确实将文本分散在许多行上。
 
我编写的代码对于每个产品线都是非常定制的,虽然绘制平面图或绘制板截面等功能类似,但总有足够的差异,需要编写新代码。当我可以的时候,我试着使用变量,这样我可以把它们传递给函数,这让事情变得更容易。但是,用户选择添加或不添加所有不同的选项,很多时候可以简单地绘制一个选项,但如果将其与另一个选项一起选择,那么两组代码都会不同。许多if和or。我仍然相信,其中一些可以放在一个单独的文件中,在需要的时候,并且只有在需要的时候,才可以从程序中调用。例如,我使用的产品使用各种弹簧和减震器来帮助提升和关闭地板,所有不同配置的代码使这些功能成为最长的功能。不过,有时这些选项并没有被请求,如果不需要的话,最好将这些功能完全排除在主程序之外。我已经将这一原理应用于所使用的块,现在,我只在需要时加载块,而不是每个图形都包含所有200多个块。同样,这似乎并没有加快速度,但结束文件的大小要小得多。信不信由你,增加文件大小的最大因素是我从Excel中复制的OLE对象。但用户喜欢这一点,所以这不是一个可以消除的选项。

David Bethel 发表于 2022-7-6 08:27:08

我还是喜欢Ally
 
http://www.wascotech.com/products.html
 
不幸的是,它不会在64位机器上运行
 
 
至于膨胀,100KB似乎总是对我来说是最大的老丁和执行。至于可读性和组织,这更多地取决于代码的注释和格式。我的0.02美元-David

BIGAL 发表于 2022-7-6 08:32:06

比尔只是在2300行中问了一个问题,即从菜单或键盘上调用了多少个实际的单独程序。还是只有一个命令

MSasu 发表于 2022-7-6 08:41:44

不容忽视的是,这种计算的结果很大程度上受到个人格式风格的影响。可能更好的比较方法是在文件副本上应用VisualLisp编辑器的自动格式化,然后计算行数。

MSasu 发表于 2022-7-6 08:45:08

当然,要走的路!就我个人而言,这是我多年前通过艰苦的方式学到的。
当涉及到代码维护时,它也会让你的生活变得更加轻松。

Bill Tillman 发表于 2022-7-6 08:52:28

 
我想答案只有一个。用户从Excel电子表格开始。一些用户对如何使用AutoCAD一无所知。但他们可以在Excel电子表格中输入他们想要的部件尺寸和特征的数据。excel文件进行了大量的结构计算,并在其中一个工作表上进行了总结。同一个excel文件中的VBA程序将用户的输入以及多个计算结果写入一个文本文件。然后加载AutoCAD和LISP程序。给出的唯一命令,也是一个自动命令,是执行LISP程序。LISP程序中的所有操作和命令必须在没有任何用户输入的情况下进行,我将重复这一点。否则,我们就无法完成整个自动化过程。我们最终将开发一个网站界面,该界面将允许在线用户在不需要销售或工程团队请求的情况下准备他们的图纸。
页: [1] 2
查看完整版本: LISP程序行计数器