以编程方式编译 SAS SCL 代码

发布于 2024-07-19 06:36:02 字数 259 浏览 4 评论 0原文

在 Windows 中是否有编译 SAS 9.1.3 SCL 代码(注意不是普通 SAS 代码)的编程方法? 我发现执行此操作的唯一方法涉及使用 SAS GUI:我们有一个 Perl 脚本,它将击键发送到 UI。 虽然这(在某种程度上)有效,但它很丑陋且容易出错,而且太脆弱而无法添加到我们的自动构建脚本中。

编辑:我原来的问题可能有点不清楚。 我知道proc build; 我的问题是首先将一些纯文本作为 SCL 条目放入 SAS 目录中。

Is there a programmatic way of compiling SAS 9.1.3 SCL code (N.B. not ordinary SAS code) in Windows? The only way I have found of doing it involves using the SAS GUI: we have a Perl script which sends keystrokes to the UI. While this works (sort of), it's ugly and error-prone, and is too fragile to add to our automated build script.

EDIT: My original question was probably somewhat unclear. I am aware of proc build; my problem is getting some plain text into the SAS catalogue as an SCL entry in the first place.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

别闹i 2024-07-26 06:36:02

我发现这是一个先有鸡还是先有蛋的问题。 我发现只能通过使用现有的 SCL 条目将纯文本放入 SCL 条目...

我有一个设置,可以在目录条目中从纯文本文件读取和写入 SCL 代码。 我将其用于版本控制目的(CVS)。

虽然 CVS 主要用于纯文本代码,但它也可以处理二进制文件。 因此,我创建了一个 SCL 条目(称为 FILE2SCL),它可以将纯文本导入到其他 SCL 条目中。 然后我将此 SCL 条目 PROC CPORT 到一个二进制文件中,并将其签入 CVS。

这样,我始终可以以编程方式从 CPORT 文件中获取此 SCL 条目,并使用此 SCL 条目将 SCL 代码从纯文本导入到其他 SCL 条目中。 之后我可以使用 PROC BUILD 编译 SCL 条目,就像您提到的那样。

我的 FILE2SCL 条目如下所示:

INIT:
  /***************************************************************/
  /*                                                             */
  /* Call this SCL like this:                                    */
  /* %let srcFile=D:\work\dummy.scl;                             */
  /* %let dstEntry=WORK.NEW.DUMMY.SCL;                           */
  /* proc display catalog=work.cat.file2scl.scl;                 */
  /* run;                                                        */
  /*                                                             */
  /***************************************************************/

  length Rc           8;
  length theFile  $ 200;
  length theEntry $ 128;

  theFile=symget('SRCFILE');   * Source file *;
  theEntry=symget('DSTENTRY'); * Destination entry *;

  * Assign filename *;
  Rc=filename('temp',theFile);

  * Include external file into preview buffer *;
  Rc=PREVIEW('INCLUDE','temp');
  * Save contents of preview buffer to SCL entry *;
  Rc=PREVIEW('SAVE',theEntry);
  Rc=PREVIEW('CLEAR');
  Rc=PREVIEW('CLOSE');

  * Deassign filename *;
  Rc=filename('temp','');
return;

注释解释了如何使用它:
首先设置 SAS 宏变量“srcFile”以包含 SCL 源代码文件的路径,并设置另一个宏变量“dstEntry”以包含您希望 SCL 条目所在位置的条目路径。 然后PROC DISPLAY FILE2SCL条目,它会将您的SCL源代码导入到指定的SCL条目中,然后您可以使用PROC BUILD对其进行编译。

I found this to be a chicken-and-egg kind of problem. I found that it is only possible to get plain text into an SCL entry, by using an already existing SCL entry...

I have a setup, where I read and write SCL code in Catalog entries, from and to plain text files. I use this for revision control purposes (CVS).

While CVS is mostly used for plain text code, it can also handle binary files. Thus I have made an SCL entry (called FILE2SCL), that can import plain text into other SCL entries. I have then PROC CPORT'ed this SCL entry to a binary file, and checked it into CVS.

This way, I can always programmatically fetch this SCL entry from the CPORT file, and use this SCL entry to import SCL code from plain text into other SCL entries. Afterwards I can use PROC BUILD to compile the SCL entry, exactly like you mention yourself.

My FILE2SCL entry looks like this:

INIT:
  /***************************************************************/
  /*                                                             */
  /* Call this SCL like this:                                    */
  /* %let srcFile=D:\work\dummy.scl;                             */
  /* %let dstEntry=WORK.NEW.DUMMY.SCL;                           */
  /* proc display catalog=work.cat.file2scl.scl;                 */
  /* run;                                                        */
  /*                                                             */
  /***************************************************************/

  length Rc           8;
  length theFile  $ 200;
  length theEntry $ 128;

  theFile=symget('SRCFILE');   * Source file *;
  theEntry=symget('DSTENTRY'); * Destination entry *;

  * Assign filename *;
  Rc=filename('temp',theFile);

  * Include external file into preview buffer *;
  Rc=PREVIEW('INCLUDE','temp');
  * Save contents of preview buffer to SCL entry *;
  Rc=PREVIEW('SAVE',theEntry);
  Rc=PREVIEW('CLEAR');
  Rc=PREVIEW('CLOSE');

  * Deassign filename *;
  Rc=filename('temp','');
return;

The comment explains how to use it:
Start with setting a SAS macro variable, "srcFile", to contain the path to your SCL source code file, and another macro variable, "dstEntry" to contain the entry-path to where you want your SCL entry to be. Then PROC DISPLAY the FILE2SCL entry, and it will import your SCL source code into the specified SCL entry, and you can then compile it afterwards by using PROC BUILD.

空‖城人不在 2024-07-26 06:36:02

另外,您可以使用 Eclipse 进行查看ESLink 插件。 它是专门为此目的而设计的(将 SCL 代码保存在常规文件中以进行版本控制,并能够编译到目录中)。

Also, you can possibly check out using Eclipse and the ESLink plugin. It was designed specifically for this purpose (keeping SCL code in regular files for version control with the capability to compile into a catalog).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文