To run this API, you must have already run a Flow analysis, and the required study file should be selected and open.
'%RunPerInstance '@ '@ DESCRIPTION '@ This script shows how to extract information from the screen out (.out) file. '@ Several examples are shown '@ '@ This script perfoms a similar function to the studyrlt command '@ studyrlt <study> -message <sequence> <message ID> <occurrence> <item> '@ Some knowledge of the format used in the .out file is required. '@ please see details in the ..../data/dat/cmmesage.dat for details '@ Some know of the analysis sequences is required. '@ please see details in the ..../data/dat/process.dat for details '@ '@ SYNTAX '@ RaadScreenOutput '@ '@ PARAMETERS '@ none '@ '@ DEPENDENCIES/LIMITATIONS '@ Assumes a Flow analysis has been run and the required study file is selected and open. '@ Some knowledge of the MSCD format as defined in message.dat is required '@ Limited error checking is performed '@ '@@ Option Explicit SetLocale("en-us") Dim Synergy Dim SynergyGetter On Error Resume Next Set SynergyGetter = GetObject(CreateObject("WScript.Shell").ExpandEnvironmentStrings("%SAInstance%")) On Error GoTo 0 If (Not IsEmpty(SynergyGetter)) Then Set Synergy = SynergyGetter.GetSASynergy Else Set Synergy = CreateObject("amiws.Synergy") End If Dim StudyDoc Set StudyDoc = Synergy.StudyDoc() ' Get the name of the .out file associated with the flow results. ' NOTE: This assumes a Flow analysis sequence was run. Dim lName lName = StudyDoc.GetResultPrefix("Flow") Dim lOutName lOutName = lName & ".out" ' Create and Populate the ScreenOutput Class for the lOutName Dim lMessages Set lMessages = New ScreenOutput lMessages.LoadOutputFile(lOutName) Dim MM, lStr ' Find the Total Projected Area ' return the array of numerical values associated with the first instance of Message ID (MSCD) 39410 ' MSCD 39410 1 0 0 0 0 0 5 ' Total projected area = %11.4G ' m^2,1,1 ' Note: Please see .../data/dat/shared/cmmesage.dat for format details Set MM = lMessages.GetMessage(39410,1) lStr = " Total Proejcted Area = " & CStr(MM.GetFloat(0)) MsgBox CStr(lStr) ' Read Maximum Injection pressure and the time it occurred ' return the array of numerical values associated with the last instance of Message ID (MSCD) 39410 ' MSCD 41400 1 0 0 0 0 0 5 ' Maximum injection pressure (at %11.4G) = %11.4G ' s,1,2 ' Pa,1,1 ' Note: Please see .../data/dat/shared/cmmesage.dat for format details Set MM = lMessages.GetMessage(41400,0) lStr = "Maximum injection pressure occured at " & CStr(MM.GetFloat(1)) & " Pressure = " & CStr(MM.GetFloat(0)) MsgBox CStr(lStr) MsgBox "Script Complete" ' ---- Message class Class Message Private mMSCD ' MSCD Message ID Private mNumString ' Number of Strings associated with the Message Private mNumFloat ' Number of Floats Associated with the Message Private mStrings() ' The Strings Associated with the Message Private mFloats() ' The Numerical Values Associated with the Message Public Sub SetMSCD(aMSCD) mMSCD = aMSCD End Sub Public Sub SetNumString(aNumString) mNumString = aNumString End Sub Public Sub SetNumFloat(aNumFloat) mNumFloat = aNumFloat End Sub Public Sub AddFloat(aFloat) mNumFloat = mNumFloat + 1 ReDim Preserve mFloats(mNumFloat) mFloats(mNumFloat-1) = aFloat End Sub Public Sub AddString(aString) mNumString = mNumString + 1 ReDim Preserve mStrings(mNumString) mStrings(mNumString-1) = aString End Sub Public Function GetMSCD() GetMSCD = mMSCD End Function Public Function GetString(aIndex) GetString = "" If aIndex >= 0 And aIndex < mNumString Then GetString = mStrings(aIndex) End if End Function Public Function GetFloat(aIndex) GetFloat = "" If aIndex >= 0 And aIndex < mNumFloat Then GetFloat = mFloats(aIndex) End if End Function Public Function GetNumString() GetNumString = mNumString End Function Public Function GetNumFloat() GetNumFloat = mNumFloat End Function Private Sub Class_Initialize mMSCD = -1 mNumString = 0 mNumFloat = 0 End Sub End Class Class ScreenOutput Private mMessages() ' Array of Messages associate with the screen output File Private mNumMessages ' Number of messages in the screen output file Public Function LoadOutputFile(aFile) Const ForReading = 1 Dim FS Set FS = CreateObject("Scripting.FileSystemObject") Dim File Set File = FS.OpenTextFile(aFile, ForReading) While Not File.AtEndOfStream Dim ID ID = -1 ' Read the MSCD Dim Line,lenLine Line = File.ReadLine lenLine = len(Line) If Not File.AtEndOfStream or lenLine >= 1 Then ID = Line Dim curMessage Set curMessage = New Message curMessage.SetMSCD(ID) ' Read the number of strings Line = File.ReadLine lenLine = len(Line) If Not File.AtEndOfStream or lenLine >= 1 Then Dim numString numString = Line ' Read Strings Dim i For i = 1 To numString Line = File.ReadLine lenLine = len(Line) If Not File.AtEndOfStream or lenLine >= 1 Then CurMessage.AddString(Line) End if Next End if ' Read the number of floats Line = File.ReadLine lenLine = len(Line) If Not File.AtEndOfStream or lenLine >= 1 Then Dim numFloat numFloat = Line ' Read Floats For i = 1 To numFloat Line = File.ReadLine lenLine = len(Line) If Not File.AtEndOfStream or lenLine >= 1 Then CurMessage.AddFloat(Line) End if Next End If ' Add current message to the list AddMessage(CurMessage) End If Wend File.Close End Function Public Sub AddMessage(aMessage) mNumMessages = mNumMessages + 1 ReDim Preserve mMessages(mNumMessages) Set mMessages(mNumMessages-1) = aMessage End Sub Public Function GetNumMessages() GetNumMessages = mNumMessages End Function Public Function GetMessage(aMSCD,aOccur) Set GetMessage = Nothing Dim j Dim lFindInstance lFindInstance = aOccur If aOccur < 0 Then lFindInstance = 0 End if Dim Count Count = 0 For j = 0 To mNumMessages-1 'MsgBox mMessages(j).GetMSCD &"|"& aMSCD If CStr(mMessages(j).GetMSCD) = CStr(aMSCD) Then Count = Count + 1 If Count >= lFindInstance Then Set GetMessage = mMessages(j) Exit Function End if End if Next End Function Private Sub Class_Initialize mNumMessages = 0 End Sub End Class