Скрипт замены подстроки в источниках данных графических объектов дисплеев

Обсуждение SCADA-систем ICONICS GENESIS32 и ICONICS GENESIS64.
Петр
Сообщений в теме: 1
Сообщения: 9
Зарегистрирован: 06 окт 2014, 08:01

Скрипт замены подстроки в источниках данных графических объектов дисплеев

#1

Сообщение Петр » 04 дек 2014, 09:43

Вот решил поделится другим скриптом созданном на основе предыдущего. Суть скрипта: в строке источника данных ищется заданная подстрока и заменяется на другую заданную подстроку. Поиск происходит по всем графическим объектам на дисплее в пределах слоя.

Attribute VB_Name = "ReplaceSubStringInDataSource"

'
' Function Keys

'

Sub FunctionKeyScript0()
    ReplaceSubStringInDataSource "Что заменить", "На что заменить"
End Sub


' Процедура замены sSearch на sSubStr в источниках данных объектов графических страниц

Sub ReplaceSubStringInDataSource(ByVal sSearch As String, ByVal sSubStr As String)

    Dim oObject As Object
    Dim dDynObject As Object
    Dim dSubDynObject As Object
    Dim sDataSource As String
    Dim sNewDataSource As String
    Dim i As Long
    Dim j As Long
    Dim l As Long
    Dim l2 As Long
    Dim i2 As Long

    j = 0
   
    Set oObject = ThisDisplay.GetVisibleObjectFromIndex(j)

    While Not (oObject Is Nothing)
       
        l = oObject.GetNumberOfDynamics()
       
        If l > 0 Then
       
            l = l - 1
       
            For i = 0 To l
       
                Set dDynObject = oObject.GetDynamicObjectFromIndex(i)
               
                Select Case dDynObject.GetObjectTypeName
               
                    Case "GwxDigitalColor", "GwxDigitalSelector":
                       
                        l2 = dDynObject.GetNumberOfSubDynamics

                        If l2 > 0 Then
                       
                            l2 = l2 - 1
                       
                            For i2 = 0 To l2
                           
                                Set dSubDynObject = dDynObject.GetSubDynamicObjectFromIndex(i2)
                           
                                sDataSource = dSubDynObject.dataSource
                           
                                If sDataSource <> "" Then
                                    If ReplaceSubString(sDataSource, sSearch, sSubStr, sNewDataSource) Then
                                        dSubDynObject.dataSource = sNewDataSource
                                    End If
                                End If
                               
                                Set dSubDynObject = Nothing
                           
                            Next
                                               
                        End If
                                               
                    Case Else
                   
                        sDataSource = dDynObject.dataSource
                       
                        If sDataSource <> "" Then
                            If ReplaceSubString(sDataSource, sSearch, sSubStr, sNewDataSource) Then
                                dDynObject.dataSource = sNewDataSource
                            End If
                        End If
               
                End Select
               
                Set dDynObject = Nothing
               
            Next
       
        End If
       
        Set oObject = Nothing
       
        j = j + 1
       
        Set oObject = ThisDisplay.GetVisibleObjectFromIndex(j)
       
    Wend
   
End Sub

' Функция ищет подстроку sSearch и заменяет ее на подстроку sSubStr в sDataSource,
' сформированное новое значение возвращает в sNewDataSource. Если замена произошла функция возвращает True, иначе False.

Function ReplaceSubString(ByVal sDataSource As String, ByVal sSearch As String, _
                                   ByVal sSubStr As String, ByRef sNewDataSource As String) As Boolean

    Dim b As Long
    Dim l As String
    Dim r As String
   
    ' Поиск подсроки sSearch
   b = InStr(sDataSource, sSearch)
   
    Select Case (b)
   
    Case 0: ' Нет совпадения, поэтому выходим из функции с соответствуующим результатом

        ReplaceSubString = False
       
    Case Else
   
        l = Left(sDataSource, b - 1)
        r = Right(sDataSource, Len(sDataSource) - b - Len(sSearch) + 1)
        sNewDataSource = l & sSubStr & r
       
        ReplaceSubString = True
   
    End Select
   
End Function



Если эта тема может быть полезна другим, поделитесь ссылкой:

Вернуться в «ICONICS GENESIS»