我在办公室的日常编程中经常遇到以下问题:文件可以从一个项目重复使用到另一个项目,但是当你处理数百个文件时,需要为每个文件更新标题信息。手动更新它们的文件很痛苦,浪费资源。
理想情况下,我想要的是一个包含标准标题的程序,其中包含作者,项目代码,创建日期等属性,我可以手动更新,并且在执行时它会将此信息添加到目录中的所有文件/程序。我们使用标准标题,它覆盖每个程序的前20行,每个属性在某一行上,或者可以搜索以替换它。
在大多数情况下,我想自己开发,但是如何将所述头应用于每个程序的前20行以及如何将其应用于目录中的每个文件的任何起点。我想稍后添加其他功能以用于跟踪目的等,但是现在任何入门帮助都会很棒。
答案 0 :(得分:1)
我非常喜欢使用键盘宏来生成标题shell。因此,当我按下CTRL-H时,我会收到一个标题栏注释,其中包含您描述的信息,包括我的姓名和今天的日期。如果假设您必须为每个项目的每个程序(例如修订注释或其他)手动键入某些到标题中,那么自动添加100个标题shell不会为您节省更多比键盘宏方法。
那就是说,是的,你可以使用文件声明或其他任何方式使用SAS。可以用任何好的文本编辑器来完成它。
当然,更好的解决方案是获得版本控制系统。
答案 1 :(得分:0)
我不会以这种方式修改目录中的程序,而是使用%include
个文件。我们以前在项目上做过这个,你有一个包含libnames等的程序,然后你有
%include('header.sas');
或者您在该项目中编写的每个程序中的任何内容。像这样以编程方式修改代码是一个坏主意,因为你可能没有最新版本的标题,并且因为如果你做错了它可能会损坏程序)。将它作为包含很容易,避免复制相同的代码20次(有可能出错),并保证最新的代码。
在您的情况下,您可以修改'标题'文件为新的一天,并假设你已正确设置(听起来像你有),那么100或其他任何程序都可以保持不变,不变,只包括更新的标题(自动)。这样做的另一个好处是,您不会对程序进行大量的微小更改,这意味着您知道何时对程序进行了有意义的更新(而不是每天运行)。
一般来说,这种模块化的方法是优越的 - 离婚个人运行'主要部分的程序/进程的一部分 - 由于这些原因,并且因为它使得将程序重用于其他目的也更容易,如果你已经设置好了,那么模块已经准备好了,只需要一个头文件。同一目录自动运行。 (您可以获取当前程序的名称及其路径;如果需要,请评论您使用的模式 - 批处理或交互式 - 以及您所使用的操作系统。)
这也是企业指南模型更好的地方之一;在一个项目文件(.egp)中有所有与项目相关的文件,所以你不必这样做 - 项目本身可以有一个autoexec进程流(首先运行,设置libnames和这样)并且可以有笔记/作者/等。
答案 2 :(得分:0)
这应该有效。如果一行以&#34开头;作者:"它取代了"作者:我,只有我!!!"。 如果您使用的是Windows,请将所有正斜杠(" /")更改为反斜杠(" \")。
%let infolder=/folder/where/sas/programs/are;
%let outfolder=/folder/where/new/sas/programs/are/going;
filename dummy temp;
data _null_;
attrib currentinfile currentoutfile length=$32000;
infile "&infolder/*.sas" filename=currentinfile lrecl=32000;
input;
currentoutfile="&outfolder./"!!scan(currentinfile,-1,"/");
file dummy filevar=currentoutfile lrecl=32000;
if index(_infile_,"Author:")=1 then put "Author: ME, ONLY ME!!!";
else put _infile_;
run;