导出 SAS 项目日志文件
Exporting the SAS Project Log file
我以前每天 运行 3 个 SAS EG 项目。几天以来,我们有了一个“SAS Scheduler”,它基本上 运行 在夜间处理后者(第一个在 00:00 AM,第二个在 01:00 AM,第三个一个在 03:00 AM)。每个 SAS 项目都有多个 SAS 程序。
总而言之,这是个好消息,但这也意味着我不能再直接查看日志了。
为了跟踪夜班工作,我正在尝试寻找导出每个项目日志文件的最佳方式。我最近发现了SAS Project Log,它基本上总结了SAS Project中所有程序的日志。
我在 SAS 社区论坛上发现了 CaseySmith 的答案,主要是调整 .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
最后,我想要的是在早上,我 运行 扫描 3 个项目日志文件的注释、警告和错误的程序,并向自己发送一封包含结果的电子邮件。因此,有没有办法在文件夹中导出 SAS 项目日志(非手动)?
那么,首先,这段代码在做什么?
Set objProjectLog = objProject.ProjectLog
objProjectLog.Clear()
这会清除项目日志。这需要在 在 之前完成,您的项目是 运行 - 否则日志包含过去 运行 的数据。所以把它放在 prjOBject.Run().
之前
objProjectLog.Enabled = True
'strProjectLog = objProjectLog.Text
objProjectLog.SaveAs "c:\temp\projectLog.txt"
然后将项目日志导出到文本文件。您当然可以随意调用该文本文件。您需要此代码在您的程序 运行 之后 出现 运行,并在它关闭之前的某处出现。在 PrjObject.Run() 之后可能没问题。
您需要更新名称以匹配您的 vbs 文件的名称 - 它们使用 objproject 而您的 vbs 使用 prjObject,但它们是同一回事,只需匹配名称即可。
其次 - 你还能做什么?如果 VBS 不是您的菜,您还有很多其他方法可以做到这一点。
- 将您的 EG 项目导出到 .sas 文件,然后使用正常输出选项在 base SAS 中安排它。这也可以通过调度界面实现。
- 使用 PROC PRINTTO 将您的日志重定向到您的 SAS 代码中。
- 将您的 EG 项目复制到您可以看到的位置。 EG 项目确实包含 运行 所有内容的日志 - 所以没有理由你不能打开 .egp 并查看它,只要确保你没有对生产文件这样做,因为你可能会忘记关闭。
我的偏好不是排EG项目,而是排.sas程序;使用EG作为开发环境,然后导出为.sas。这为您提供了更大的灵活性。但是有很多不同的方法可以给这只猫剥皮。
我以前每天 运行 3 个 SAS EG 项目。几天以来,我们有了一个“SAS Scheduler”,它基本上 运行 在夜间处理后者(第一个在 00:00 AM,第二个在 01:00 AM,第三个一个在 03:00 AM)。每个 SAS 项目都有多个 SAS 程序。
总而言之,这是个好消息,但这也意味着我不能再直接查看日志了。
为了跟踪夜班工作,我正在尝试寻找导出每个项目日志文件的最佳方式。我最近发现了SAS Project Log,它基本上总结了SAS Project中所有程序的日志。
我在 SAS 社区论坛上发现了 CaseySmith 的答案,主要是调整 .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
最后,我想要的是在早上,我 运行 扫描 3 个项目日志文件的注释、警告和错误的程序,并向自己发送一封包含结果的电子邮件。因此,有没有办法在文件夹中导出 SAS 项目日志(非手动)?
那么,首先,这段代码在做什么?
Set objProjectLog = objProject.ProjectLog
objProjectLog.Clear()
这会清除项目日志。这需要在 在 之前完成,您的项目是 运行 - 否则日志包含过去 运行 的数据。所以把它放在 prjOBject.Run().
之前objProjectLog.Enabled = True
'strProjectLog = objProjectLog.Text
objProjectLog.SaveAs "c:\temp\projectLog.txt"
然后将项目日志导出到文本文件。您当然可以随意调用该文本文件。您需要此代码在您的程序 运行 之后 出现 运行,并在它关闭之前的某处出现。在 PrjObject.Run() 之后可能没问题。
您需要更新名称以匹配您的 vbs 文件的名称 - 它们使用 objproject 而您的 vbs 使用 prjObject,但它们是同一回事,只需匹配名称即可。
其次 - 你还能做什么?如果 VBS 不是您的菜,您还有很多其他方法可以做到这一点。
- 将您的 EG 项目导出到 .sas 文件,然后使用正常输出选项在 base SAS 中安排它。这也可以通过调度界面实现。
- 使用 PROC PRINTTO 将您的日志重定向到您的 SAS 代码中。
- 将您的 EG 项目复制到您可以看到的位置。 EG 项目确实包含 运行 所有内容的日志 - 所以没有理由你不能打开 .egp 并查看它,只要确保你没有对生产文件这样做,因为你可能会忘记关闭。
我的偏好不是排EG项目,而是排.sas程序;使用EG作为开发环境,然后导出为.sas。这为您提供了更大的灵活性。但是有很多不同的方法可以给这只猫剥皮。