明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 582|回复: 4

[提问] 如何在绘图中能够完美的避开全局变量的重叠

[复制链接]
发表于 2022-7-25 08:49 | 显示全部楼层 |阅读模式
15明经币
(defun c:c1(/ pt0 d3 p1 p2 p3 p4 p5 d4 p6 p7 d1s d2s)
   (vl-load-com)
(if (not ad1)
(setq ad1 548.5 ad2 3000)
    )
这个是我第一个命令,我将ad1和ad2设定为全局变量,如果没有ad1,那么设定ad1和ad2的值,有的话就采用默认值,这样做的目的是做一些重复性的目的时,可以省去输入的时间
(defun c:c2(/ pt0 d3 p1 p2 p3 p4 p5 d4 p6 p7 d1s d2s)
   (vl-load-com)
(if (not c2d1)
(setq c2d1 548.5 ad2 2500  ad3 150)
    )
这个时候第二个命令的ad2就会和第一个命令冲突了,我连续输入第一个和第二个两个命令后,下一次再输入第一个命令的时候这个时候ad2就会变成我用第二个命令输入的默认值了,而不是我用第一个命令输入的默认值

请问大佬们,有没有什么办法能够解决两个命令默认值冲突的情况,不要更改全局变量,因为我这两个命令只是示范一下,实际要输入的值有很多,命令也有很多,不可能把所有的命令默认值的全局变量名字都改个遍吧,能不能有啥好的解决方法啥的


最佳答案

查看完整内容

import os; import os.path def reset(): i = 0 j = 0 path = r"E:/Users/administrator/Desktop/MECpg/" filelist = os.listdir(path) # 该文件夹下所有的文件(包括文件夹) for files in filelist: # 遍历所有文件 i = i + 1 Olddir = os.path.join(path, files); # 原来的文件路径 if os.path.isdir(Olddir): # 如果是文件夹则跳过 continue; ...
发表于 2022-7-25 08:49 | 显示全部楼层
import os;
import os.path
def reset():
    i = 0
    j = 0
    path = r"E:/Users/administrator/Desktop/MECpg/"
    filelist = os.listdir(path)  # 该文件夹下所有的文件(包括文件夹)
    for files in filelist:  # 遍历所有文件
        i = i + 1
        Olddir = os.path.join(path, files);  # 原来的文件路径
        if os.path.isdir(Olddir):  # 如果是文件夹则跳过
            continue;
        #print(os.path.splitext(files))
        #filename = os.path.splitext(files)[0];  # 文件名
        #filetype = os.path.splitext(files)[1];  # 文件扩展名
        filename,filetype=os.path.splitext(files)
        filePath=path+filename+filetype
        if filetype.lower() == ".lsp" :
            if alter(filePath,"(command " , "(cmds " ):
                j +=1
    if j==0:
        print("没有需要替换的内容")

def alter(file,old_str,new_str):
    """
    替换文件中的字符串
    :param file:文件名
    :param old_str:旧字符串
    :param new_str:新字符串
    :return:
    """
    file_data = ""
    with open(file, "r", encoding="ANSI") as f:
        goset = False
        for line in f:
            if old_str in line:
                print(file)
                print("替换前:",line)
                line = line.replace(old_str,new_str)
                print("替换后:",line)
                goset = True
            file_data += line
    if goset:
        print("文件重写中...")
        with open(file,"w",encoding="ANSI") as f:
            f.write(file_data)
        return True
    else: return False


if __name__=='__main__':
    reset()

=========================
可以尝试用Python改,上面是我拼凑的程序,把所有lsp文件里的  "(command "  改成 "(cmds "
alter(filePath,"(command " , "(cmds " ):

回复

使用道具 举报

发表于 2022-7-25 08:52 来自手机 | 显示全部楼层
namedspace
回复

使用道具 举报

发表于 2022-7-25 09:08 | 显示全部楼层
如果已经有很多重复的了,应该没什么好办法,只能挨个去改,如果还没多少个代码这样搞,建议赶紧用复杂的命名规则习惯来定义一个全局变量,防止被其他覆盖,或者大佬说的,你每个程序一个文件  搞成独立的空间,不过感觉也麻烦吧,想省事,好像没啥好招
回复

使用道具 举报

发表于 2022-7-29 17:27 | 显示全部楼层
可以将ad1和ad2命名为*ad1_220729和*ad2_220729。加*是为了容易知道是全局变量,后面加日期是为了与其它*ad1、*ad2区别开来。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-2 22:30 , Processed in 0.241553 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表