PowerDesigner中遍历物理模型中的所有表,检查表代码、字段代码

'******************************************************************************
'* File:    comment2name.vbs
'* Author:   Jason Chen
'* Created:  2014
'* Modified: 2017/6  
'* Version: 2.0
'* Comment: 把表中的描述信息复制为Name,增强可读性  
'* Used:    打开物理模型,运行本脚本(Ctrl+Shift+X)
'* Comment:
'******************************************************************************

Option   Explicit 
ValidationMode   =   True 
InteractiveMode   =   im_Batch

Dim mdl   'the current model

'获取当前活动的model
Set mdl = ActiveModel 
If (mdl Is Nothing) Then 
      MsgBox   "There   is   no   current   Model " 
ElseIf   Not   mdl.IsKindOf(PdPDM.cls_Model)   Then 
      MsgBox   "The   current   model   is   not   an   Physical   Data   model. " 
Else 
      ProcessFolder   mdl 
End   If

Private   sub   ProcessFolder(folder) 
On Error Resume Next
      '遍历表
   Dim   Tab   
   for   each   Tab   in   folder.tables 
      if   not   tab.isShortcut   then 
         tab.name = tab.code & " " & getName(tab.comment)
         Dim   col   '   running   column 
         for   each   col   in   tab.columns 
            if col.comment="" then
            else                    
               col.name = getName(col.comment)
            end if
         next 
      end   if 
   next

   '遍历视图
   Dim view   
   for each view in folder.Views 
      if not view.isShortcut then 
         view.name = getName(view.comment)
      end if 
   next

   '遍历包
   Dim   f   'running   folder 
   For   Each   f   In   folder.Packages 
      if   not   f.IsShortcut   then 
            ProcessFolder   f 
      end   if 
   Next 
end sub

'获取名称
Function getName(colComment)
   dim index
   dim indexArray(10) '排除掉"X"后的文本
   indexArray(0) = InStr(colComment, ":") 
   indexArray(1) = InStr(colComment, vbcrlf)
   indexArray(2) = InStr(colComment, ":")
   indexArray(3) = InStr(colComment, "(")
   indexArray(4) = InStr(colComment, "【")
   indexArray(5) = InStr(colComment, "[")
   indexArray(6) = InStr(colComment, "(")
   indexArray(7) = InStr(colComment, ",")
   indexArray(8) = InStr(colComment, " ")
   indexArray(9) = InStr(colComment, ":")
   index = getArrMinValueIndex(indexArray)

   if index > 0 then 
      Output index 
      getName = Mid(colComment, 1, index-1)   
   else getName = colComment                        
   end if                     
end Function

'查找最近一个匹配字符的位置
Function getArrMinValueIndex(ByVal arr)
   Dim ix, itemMin     
   itemMin = 0
   For ix = 1 To UBound(arr)
      If arr(ix) > 0 and (itemMin = 0 or itemMin > arr(ix)) Then
          itemMin = arr(ix)          
      End If
   Next
   getArrMinValueIndex = itemMin
End Function

  

posted @ 2015-07-01 17:19  远方V3  阅读(1093)  评论(0编辑  收藏  举报