预览模式: 普通 | 列表
    几小时前,REAL公司欧洲总部的法文客服在REAL公司内部职员邮件列表中发了封邮件,说有个法国的REAL Studio用户问如何用IDE Script将当前工程中某个项目中指定的附注保存为文本文件。
    最近一段时间没少跟应用程序自动化控制打交到,比如在Windows上是许多Windows软件都自带的VBA(MS Office,CorelDraw和AutoCAD等都支持),在Mac上则是能自动化控制所有Cocoa程序的AppleScript。因此对REAL Studio的IDEScript也有些兴趣,便稍微研究了一下。
    REAL Studio要有自己的自动化功能就需要有能跨平台的自动化控制引擎。只能在Mac上用的AppleScript显然是不行的,而且REAL Studio的Mac版暂时还是基于Carbon框架程序而不是Cocoa程序,需要被AppleScript支持就要写个庞大的AppleScript扩展,还不一定能做到完美。VBA本来的确有Mac上的实现,但是由于没法将Mac版VBA代码编译为Intel指令,MS从Office 2008 for Mac开始已经移除了VBA功能,转而支持AppleScript(在大量需要跨平台VBA实现的客户的强列要求下,MS的苹果软件事业部似乎已经动手重新增加VBA对Mac版Office的支持了)。因此REAL Studio基于自己的RBScript引擎设计并开发了专门的IDEScript自动化控制功能。
    IDEScript主要用于编写软件构建脚本,使用户能实现对程序编译、打包,甚至发布的自动化处理。当然也可以做很多别的事情,比如提供这个法国客户所需要的功能。这个客户的需求很清晰,他需要一个自动化脚本,把某个工程中某几个工程项的附注(估计这个用户习惯用附注部分来编写项目文档)导出为文本文件。
    因为他经常修改附注内容,每次手动导出附注比较麻烦,过程大抵是这样的:先进入要导出其附注部分的工程项,接着进入附注中,在代码编辑器里全选,复制,然后打开一个文本编辑器,将复制的内容贴进去,选择文件位置并进行保存,最后关闭文本编辑器。虽然不复杂,每天都要重复两三次也不是件有趣的事情。
REALbasic的IDE是没有将工程项中的例程或附注导出为文本的功能的,因此IDEScript的命令集中并没有直接可以调用的命令。我稍微研究了一下,发现要解决这个法国用户的需求并不困难,如果只要支持一个平台的话,只需2行代码(我为了保险起见写了行错误判断)。具体的想法是,先用Location命令跳转到指定的附注项,在用Text命令获取当前代码编辑器中的文本,最后用DoShellCommand调用Unix或Dos的流定向命令来将文本写出到文件中。由于法文客服只需要一个Mac版本做参考,我给就只给出了一个Mac的版本,在Linux上要稍微修改下Unix命令的部分,在Windows上也差不多,Dos的echo命令看来是从Unix上学去的(注意Dos的流输出定位指令是“>>”)。当然使用REALbasic/RBScript语言的预编译指令#if...#elseif...#endif就能编写出支持3个平台的代码了。我的脚本如下:
Location="Window1.Note1"
Dim Result As String=DoShellCommand("echo '"+Text+"' > '/Users/zhujianan/Documents/Note1.txt'",5000)
If Result<>"" Then Print "Failed to save note: "+Result
    第一行代码用于跳转到工程项Window1的名为Note1的代码项/附注项中,第二行代码执行Unix命令echo并用流定向指令符“>”将Text命令返回的文本写入到指定的文件中,第三行命令检查是否正常执行(在Mac中此Unix命令正常执行后不打印任何内容,否则在终端上打印输出错误信息),如果有错误信息就显示给用户(可能的错误比如有目录不存在,文件不可写之类)。
    然后在REAL Studio的脚本编辑器中保存这个脚本,以后就可以直接从文件菜单中选择这个脚本并执行了。

查看更多...

分类:编程开发 | 固定链接 | 评论: 0 | 引用: -34 | 查看次数: 4082