Vbscript 导出SAS项目日志文件
我曾经每天运行3个SAS EG项目。几天后,我们有了一个“SAS调度器”,它基本上在夜间运行后者(第一个在凌晨00:00,第二个在凌晨01:00,第三个在凌晨03:00)。每个SAS项目都有多个SAS程序 总而言之,这是个好消息,但这也意味着我不能再直接查看日志了 为了跟踪夜间工作,我试图找到导出每个项目的日志文件的最佳方法。我最近发现了SAS项目日志,它基本上总结了SAS项目中所有程序的日志 我在SAS社区论坛上找到了的答案,基本上调整了Vbscript 导出SAS项目日志文件,vbscript,sas,monitoring,Vbscript,Sas,Monitoring,我曾经每天运行3个SAS EG项目。几天后,我们有了一个“SAS调度器”,它基本上在夜间运行后者(第一个在凌晨00:00,第二个在凌晨01:00,第三个在凌晨03:00)。每个SAS项目都有多个SAS程序 总而言之,这是个好消息,但这也意味着我不能再直接查看日志了 为了跟踪夜间工作,我试图找到导出每个项目的日志文件的最佳方法。我最近发现了SAS项目日志,它基本上总结了SAS项目中所有程序的日志 我在SAS社区论坛上找到了的答案,基本上调整了.vbs脚本,使用以下代码将SAS项目日志文件保存为.t
.vbs
脚本,使用以下代码将SAS项目日志文件保存为.txt:
Set objProjectLog = objProject.ProjectLog
objProjectLog.Clear()
objProjectLog.Enabled = True
'strProjectLog = objProjectLog.Text
objProjectLog.SaveAs "c:\temp\projectLog.txt"
但是,1)它是一个.txt文件而不是日志文件,2)我不知道在当前的.vbs脚本中添加它的位置:
Option Explicit
Dim app
Call dowork
'shut down the app
If not (app Is Nothing) Then
app.Quit
Set app = Nothing
End If
Sub dowork()
On Error Resume Next
'----
' Start up Enterprise Guide using the project name
'----
Dim prjName
Dim prjObject
prjName = "C:\Users\kermit\Desktop\Project.egp" 'Project Name
Set app = CreateObject("SASEGObjectModel.Application.8.1")
If Checkerror("CreateObject") = True Then
Exit Sub
End If
'-----
' open the project
'-----
Set prjObject = app.Open(prjName,"")
If Checkerror("app.Open") = True Then
Exit Sub
End If
'-----
' run the project
'-----
prjObject.run
If Checkerror("Project.run") = True Then
Exit Sub
End If
'-----
' Save the new project
'-----
prjObject.Save
If Checkerror("Project.Save") = True Then
Exit Sub
End If
'-----
' Close the project
'-----
prjObject.Close
If Checkerror("Project.Close") = True Then
Exit Sub
End If
End Sub
Function Checkerror(fnName)
Checkerror = False
Dim strmsg
Dim errNum
If Err.Number <> 0 Then
strmsg = "Error #" & Hex(Err.Number) & vbCrLf & "In Function " & fnName & vbCrLf & Err.Description
'MsgBox strmsg 'Uncomment this line if you want to be notified via MessageBox of Errors in the script.
Checkerror = True
End If
End Function
选项显式
昏暗的应用程序
嫁妆
“关闭应用程序
如果不是(应用程序什么都不是),那么
应用程序。退出
设置app=Nothing
如果结束
子工作()
出错时继续下一步
'----
'使用项目名称启动企业指南
'----
模糊prjName
模糊项目
prjName=“C:\Users\kermit\Desktop\Project.egp”'项目名称
Set app=CreateObject(“SASEGObjectModel.Application.8.1”)
如果Checkerror(“CreateObject”)=True,则
出口接头
如果结束
'-----
'打开项目
'-----
设置prjObject=app.Open(prjName,“”)
如果Checkerror(“app.Open”)=True,则
出口接头
如果结束
'-----
"办项目",
'-----
prjObject.run
如果Checkerror(“Project.run”)=True,则
出口接头
如果结束
'-----
'保存新项目
'-----
prjObject.Save
如果Checkerror(“Project.Save”)=True,则
出口接头
如果结束
'-----
"关闭项目"
'-----
项目,结束
如果Checkerror(“Project.Close”)=True,则
出口接头
如果结束
端接头
函数检查错误(fnName)
Checkerror=False
Dim strmsg
暗黑
如果错误号为0,则
strmsg=“Error#”&Hex(Err.Number)&vbCrLf&“函数中”&fnName&vbCrLf&Err.Description
“MsgBox strmsg”如果希望通过MessageBox通知脚本中的错误,请取消对此行的注释。
Checkerror=True
如果结束
端函数
最后,我希望在早上,我运行一个程序,扫描3个项目日志文件中的注释、警告和错误,并向自己发送一封包含结果的电子邮件。因此,有没有办法将SAS项目日志导出到文件夹中(而不是手动导出)?那么,首先,这段代码在做什么
Set objProjectLog = objProject.ProjectLog
objProjectLog.Clear()
这将清除项目日志。这需要在项目运行之前完成-否则日志包含过去运行的数据。所以把它放在prjOBject.Run()之前
然后将项目日志导出到文本文件。当然,您可以随意调用该文本文件。您需要在程序运行之后以及关闭之前的某个地方显示此代码。就在PrjObject.Run()之后可能就可以了
您需要更新名称以匹配vbs文件的名称-它们使用objproject,而您的vbs使用prjObject,但它们是相同的,只需匹配名称即可
第二,你还能做什么?如果VBS不是你的拿手好戏,你有很多其他方法可以做到这一点
- 将EG项目导出到.sas文件中,然后在基本sas中使用正常输出选项对此进行调度。这也可以通过调度界面实现
- 使用PROC PRINT在SAS代码内重定向日志
- 将您的EG项目复制到您可以看到的位置。EG项目确实包含运行的所有内容的日志-因此没有理由不打开.egp并查看它,只要确保您没有在生产文件中这样做,因为您可能会忘记关闭
我的偏好不是安排EG项目,而是安排.sas项目;使用EG作为开发环境,然后导出到.sas。这给了你更多的灵活性。但是,有很多不同的方法可以剥这只猫的皮。那么,首先,这段代码在做什么
Set objProjectLog = objProject.ProjectLog
objProjectLog.Clear()
这将清除项目日志。这需要在项目运行之前完成-否则日志包含过去运行的数据。所以把它放在prjOBject.Run()之前
然后将项目日志导出到文本文件。当然,您可以随意调用该文本文件。您需要在程序运行之后以及关闭之前的某个地方显示此代码。就在PrjObject.Run()之后可能就可以了
您需要更新名称以匹配vbs文件的名称-它们使用objproject,而您的vbs使用prjObject,但它们是相同的,只需匹配名称即可
第二,你还能做什么?如果VBS不是你的拿手好戏,你有很多其他方法可以做到这一点
- 将EG项目导出到.sas文件中,然后在基本sas中使用正常输出选项对此进行调度。这也可以通过调度界面实现
- 使用PROC PRINT在SAS代码内重定向日志
- 将您的EG项目复制到您可以看到的位置。EG项目确实包含运行的所有内容的日志-因此没有理由不打开.egp并查看它,只要确保您没有在生产文件中这样做,因为您可能会忘记关闭
我的偏好不是安排EG项目,而是安排.sas项目;使用EG作为开发环境,然后导出到.sas。这给了你更多的灵活性。但是有很多不同的方法可以剥下这只猫的皮。带有程序输出的文本文件是一个日志文件。如果您想更方便地跟踪它们,可以将其扩展名设为.log。我不知道VBS代码在做什么,但是