EDA365电子工程师网

标题: 发一个skill源码上来,好像有人想法跟我一样 [打印本页]

作者: gpxknk    时间: 2012-8-22 15:28
标题: 发一个skill源码上来,好像有人想法跟我一样
本帖最后由 gpxknk 于 2012-8-27 19:01 编辑
  1. axlCmdRegister("wxsf" 'wxSaveFileBT)
  2. axlShell("alias sf wxsf")
  3. ;axlShell("alias k wxsf")
  4. ;axlShell("alias kk skill 'load(\"wxSaveFileBT.il\")'")

  5. /*
  6. ├─
  7. │ ├─        程序名称:
  8. │ ├─        程序功能:保存文件,并注上(覆盖)当前时间
  9. │ ├─        创建时间:2012年08月22日
  10. │ ├─        修改时间:
  11. │ ├─        作    者:gpxknk
  12. │ └─        备    注:本来想保持原先格式才用了s1-s5,但后来觉得统一好点,即XXX-1630.brd
  13. ├─

  14. */
  15. procedure( wxSaveFileBT()
  16. prog( (tm sTime sDName sDNameNew s1 s2 s3 s4 s5)
  17.         tm= timeToTm(stringToTime(getCurrentTime()))
  18.         ;tm->tm_year        ;tm->tm_mon
  19.         sTime= sprintf(nil,"%2d%2d",tm->tm_hour,tm->tm_min)
  20.         rexCompile(" ")
  21.         sTime= rexReplace(sTime,"0",0)
  22.         sDName= axlCurrentDesign()        ;axlGetDrawingName
  23.         if(strlen(sDName)< 5 then
  24.                 sDNameNew= strcat(sDName,"-",sTime)
  25.         else
  26.                 rexCompile( "^\\(.+\\)\\([-_]+\\)\\([0-2][0-9]\\)\\([\\._-]*\\)\\([0-5][0-9]\\)$" ) ;-18.30.brd        _18.30.brd        _1830.brd
  27.                 if(rexExecute(sDName) then
  28.                         s1= rexSubstitute( "\\1" )
  29.                         s2= rexSubstitute( "\\2" )
  30.                         s3= rexSubstitute( "\\3" )
  31.                         s4= rexSubstitute( "\\4" )
  32.                         s5= rexSubstitute( "\\5" )
  33.                         sDNameNew= strcat(s1,"-",sTime)
  34.                 else
  35.                         sDNameNew= strcat(sDName,"-",sTime)
  36.                 );if
  37.         );if
  38.         axlSaveDesign(?design sDNameNew)
  39.         printf("Save:[%s]-->[%s]\n",sDName,sDNameNew)
  40. );prog
  41. );procedure
复制代码
以下为24日修改后的,增加了日期
  1. axlCmdRegister("wxsf" 'wxSaveFileBT)
  2. axlShell("alias sd wxsf date")
  3. axlShell("alias sf wxsf time")
  4. ;axlShell("alias k wxsf")
  5. ;axlShell("alias kk skill 'load(\"wxSaveFileBT.il\")'")

  6. /*
  7. ├─
  8. │ ├─        程序名称:
  9. │ ├─        程序功能:保存文件,并注上(覆盖)当前时间(日期)
  10. │ ├─        创建时间:2012年08月22日
  11. │ ├─        修改时间:
  12. │ ├─        作    者:gpxknk
  13. │ └─        备    注:
  14. ├─

  15. 2012年08月22日 统一格式,即XXX-1630.brd
  16. 2012年08月24日 添加日期,同时保持两种格式

  17. 命令行指令:
  18.         sd : 保存为 XXX_MMdd_hhmm.brd
  19.         sf : 保存为 XXX_hhmm.brd,也可能是 XXX_MMdd_hhmm.brd(只修改时间)
  20. 对于sD1 sD2 sT1 sT2:
  21.         sD1;日期前缀 eg: _X0824_1200.brd
  22.         sD2;日期后缀 eg: _0824X_1200.brd
  23.         sT1;时间前缀 eg: _0824_X1200.brd
  24.         sT2;时间后缀 eg: _0824_1200X.brd
  25.         1.以上也是无奈之举,不同的公司规则不一样,但连接符还是统一用"_",而"-"说实在的不规范
  26.         2.而日期(时间)中间不要插符号,如时间:_16.30.brd,"."用在基本文件名上说实在的也不规范
  27.         3.不要出现'空格','.','\',':','?'等等等等字符

  28. */

  29. procedure( wxSaveFileBT(@optional (mode "date") )
  30. prog( (tm sDate sTime sDName sDNameNew sPre sPost pt sD1 sD2 sT1 sT2)
  31.         sD1= ""
  32.         sD2= ""
  33.         sT1= ""
  34.         sT2= ""
  35.         sDName= axlCurrentDesign()        ;axlGetDrawingName
  36.         tm= timeToTm(stringToTime(getCurrentTime()))
  37.         sTime= sprintf(nil,"_%s%2d%2d%s",sT1,tm->tm_hour,tm->tm_min,sT2)
  38.         sDate= sprintf(nil,"_%s%2d%2d%s%s",sD1,tm->tm_mon + 1,tm->tm_mday,sD2,sTime)        ;;tm->tm_year
  39.         rexCompile(" ")
  40.         sTime= rexReplace(sTime,"0",0)
  41.         sDate= rexReplace(sDate,"0",0)
  42.         case(mode
  43.                 ("time" pt= strcat("^\\(.+\\)[-_]+",sT1,"[0-2][0-9]\\.*[0-5][0-9]",sT2,"$"),sPost=sTime)
  44.                 ("date" pt= strcat("^\\(.+\\)[-_]+",sD1,"[0-1][0-9][0-3][0-9]",sD2,"[-_]+",sT1,"[0-2][0-9]\\.*[0-5][0-9]",sT2,"$"),sPost=sDate)
  45.                 (t printf("ERROR:wxSaveFileBT: 'wxsf' argument error,\n"),return(nil))
  46.         );case
  47.         rexCompile(pt)
  48.         if(rexExecute(sDName) then
  49.                 sPre= rexSubstitute( "\\1" )
  50.                 sDNameNew= strcat(sPre,sPost)
  51.         else
  52.                 sDNameNew= strcat(sDName,sPost)
  53.         );if
  54.         axlSaveDesign(?design sDNameNew)
  55.         printf("Save: [ %s ] --> [ %s ]\n",sDName,sDNameNew)
  56. );prog
  57. );procedure
复制代码

作者: jekyllcao    时间: 2012-8-22 16:59
我也正尝试些这样功能的skill。正在调试中,可以参考你的了。呵呵
作者: gpxknk    时间: 2012-8-22 17:02
jekyllcao 发表于 2012-8-22 16:59
我也正尝试些这样功能的skill。正在调试中,可以参考你的了。呵呵

I Know,看了你连问了几个问题,便知个大概,于是写了个出来,以前也有这想法,不过没去写过
作者: betamelody    时间: 2012-8-22 17:50
挺好的想法,可以整合到trigger的机制中,这样就不用每次保存文件还要调用其他的菜单了
作者: jekyllcao    时间: 2012-8-22 20:24
我的skill也差不多了,请高手帮我修改修改。
备注:我们公司的board file命名是有规范的,按照part number(5位数字)+revision(a01_date_time.brd   eg. 24238e01_0822_2022.brd

代码如下:
axlCmdRegister("savetime" 'savetime)
procedure( savetime()
         A=axlCurrentDesign()
         list=substring(A 1 8)
         B=getCurrentTime()
         list1=substring(B 1 3)
         list2=substring(B 5 2)
         list3=substring(B 8 2)
         list4=substring(B 11 2)
         sDNameNew= strcat(list,"_",list1,list2,"_",list3,list4)      
         axlSaveDesign(?design sDNameNew)      
         );end of procedure  

作者: mako88    时间: 2012-8-22 20:32
和自动保存 有什么区别吗?
作者: jekyllcao    时间: 2012-8-22 20:32
现在有个问题困扰我,skill存的brd file的名字是:24238e01_Aug22_2027.brd
因为系统的时间格式是"Aug 22 20:31:59 2012",我还不知道怎样把Aug变成08.
请高手指教!
作者: gpxknk    时间: 2012-8-22 21:42
jekyllcao 发表于 2012-8-22 20:32
现在有个问题困扰我,skill存的brd file的名字是:24238e01_Aug22_2027.brd
因为系统的时间格式是"Aug 22  ...

如果你要用这种方式,那么你就直接替换吧,很直接的方法,1-12月,执行12次替换,不过怕不同的系统设置不一样这个函数取得的字符串格式也不一样,太不保险了.

我建议你还是用我上面的那种方式吧,先将它转换为TM结构,然后用"->"取得年\月\日\时\分....再格式化成你要的格式,
不同的编程语言实现起来不太一样,skill-lisp里我觉得这种方式算可以了.只是我没有找到日期时间格式化函数,如果这个用得很多,自己去写一个格式函数也是可以的,

如果你转化为time类型,它是一个长整型,你自己用数学计算出年\月\日\时\分也可以,
作者: gpxknk    时间: 2012-8-22 21:52
请deargds 出来再修改一下,这个网页的文本转代码显示的程序怎么把$变成了
[        DISCUZ_CODE_0        ]quot;
我怕我去改会丢失你改的格式.{:soso_e100:}
作者: jekyllcao    时间: 2012-8-22 23:05
gpxknk 发表于 2012-8-22 21:42
如果你要用这种方式,那么你就直接替换吧,很直接的方法,1-12月,执行12次替换,不过怕不同的系统设置不一样这 ...

你说的非常有道理,你不介意的话我拿你的代码为基础修改成我想要的样式,谢谢指教~~~
作者: jekyllcao    时间: 2012-8-22 23:11
mako88 发表于 2012-8-22 20:32
和自动保存 有什么区别吗?

自动保存只是把将文件以原来的文件名再存一遍,文件名没有改变,只是新保存的文件取代旧的文件。我们写的程式是在保存文件时时时跟系统的时间同步,每次保存的文件名都不一样。
作者: mako88    时间: 2012-8-23 08:51
jekyllcao 发表于 2012-8-22 23:11
自动保存只是把将文件以原来的文件名再存一遍,文件名没有改变,只是新保存的文件取代旧的文件。我们写的 ...

噢~  look look{:soso_e113:}
作者: mako88    时间: 2012-8-23 09:22
请问:怎么用啊?我怎么总是出现
Command > wxsf
E- *Error* toplevel: undefined variable - wxSaveFileBT
是什么原因啊?
作者: gpxknk    时间: 2012-8-23 10:20
mako88 发表于 2012-8-23 09:22
请问:怎么用啊?我怎么总是出现
Command > wxsf
E- *Error* toplevel: undefined variable - wxSaveFile ...
  1. rexCompile( "^\\(.+\\)\\([-_]+\\)\\([0-2][0-9]\\)\\([\\._-]*\\)\\([0-5][0-9]\\)$" ) ;-18.30.brd        _18.30.brd        _1830.brd
复制代码
这一行应该是这样的
作者: mako88    时间: 2012-8-23 13:23
gpxknk 发表于 2012-8-23 10:20
这一行应该是这样的

只能保存当前的时间,年份和月份不能改;还有,就是在一分钟内保存,不能自动覆盖。
作者: gpxknk    时间: 2012-8-23 13:53
本帖最后由 gpxknk 于 2012-8-23 13:55 编辑
mako88 发表于 2012-8-23 13:23
只能保存当前的时间,年份和月份不能改;还有,就是在一分钟内保存,不能自动覆盖。


呵,
每个人的要求都可能会不一样,我发的是源码呀,你们可以按自己的要求去改的呀,
上面源码中的功能我应该说得很清楚了,只动时间,没有加年月,
框架都出来了,改改很容易的哈.....
至于你说的一分钟内你要覆盖.-----这样吧,你直接Ctrl+S,加回车,{:soso_e151:}
或者你判断一下是否已经存在同名文件,然后..........
作者: mako88    时间: 2012-8-23 13:55
gpxknk 发表于 2012-8-23 13:53
呵,
每个人的要求都可能会不一样,我发的是源码呀,你们可以按自己的要求去改的呀,
上面源码中的功能我 ...

请问 年月 是怎么加的。
作者: glater    时间: 2012-8-23 15:26
这个貌似很有用的!
作者: wolf343105    时间: 2012-8-23 16:46
这个很有用.
作者: gpxknk    时间: 2012-8-24 10:56
mako88 发表于 2012-8-23 13:23
只能保存当前的时间,年份和月份不能改;还有,就是在一分钟内保存,不能自动覆盖。

你的要求很高哟,不过这不是无人值守系统装机啊,
我觉得能不能自动覆盖不重要吧,这不是定时保存呀
今天加上了日期,,不过对于你说的年份?是你打错了吗?板子名字有会加上年份的吗?一年365天,这周期长了点吧.
作者: mako88    时间: 2012-8-24 12:13
gpxknk 发表于 2012-8-24 10:56
你的要求很高哟,不过这不是无人值守系统装机啊,
我觉得能不能自动覆盖不重要吧,这不是定时保存呀
今天加 ...

嗯,加个日期就行了。




欢迎光临 EDA365电子工程师网 (https://bbs.elecnest.cn/) Powered by Discuz! X3.2