现在的位置: 首页 > 综合 > 正文

PowerDesigner技巧集6 —- 用vbscript获取每个汉字中的首字母

2013年10月07日 ⁄ 综合 ⁄ 共 2328字 ⁄ 字号 评论关闭

 用vbscript获取每个汉字中的首字母。脚本如下: 

' 获得当前模型
Dim mdl
Set mdl = ActiveModel
If (mdl Is Nothing) Then
	MsgBox "不存在活动模型! "
Else
	ListObjects(mdl)
End If

' 列出所有的对象
Private Sub ListObjects(e)
	output "实体名:" & e.code
	Dim obj
		For Each obj In e.children
		TableSetNameToCode(obj)
	Next
	' 存在包时,递归包中的实体对象
	Dim f
		For Each f In e.Packages
		ListObjects f
	Next
End Sub

' 转换过程
Private Sub TableSetNameToCode(CurrentObject)
' 当对象是实体对象时执行转换
	if not CurrentObject.Iskindof(cls_Entity) then exit sub
	' 当实体为快捷方式时跳过
	if not CurrentObject.isShortcut then
		output CurrentObject.name
		'T_ 为表头,可根据需要修改。
		' 调用GetPy 子函数来完成实体名的转换
		CurrentObject.code = "T_"&GetPy(CurrentObject.name)
		Dim col ' running column
		dim index1
		index1 = 0
		' 转换每个实体中属性的名称
		for each col in CurrentObject.attributes
			dim s
			' 调用GetPy 子函数来完成属性名的转换
			s = GetPy( col.name)
			col.code = s
		next
	end if
End Sub
' 生成中文串首字母串
function GetPy(strxx)
	dim i
	dim getpy1
	for i=1 to len(strxx)
		getpy1=getpy1 & getpychar(mid(strxx,i,1))
		next
		GetPy = getpy1
End function

' 获取中文单字的首字母
Function getpychar(char)
	'Asc 函数返回与字符串的第一个字母对应的ANSI 字符代码
	' 数字、字母和下划线不予转换,直接返回
	if ((asc(char) >= asc("0") and asc(char) <= asc("9")) or(asc(char) >= asc("A") and asc(char) <= asc("Z")) or (asc(char) >= asc("a") and asc(char) <= asc("z")) or asc(char) = asc("_") ) then
	' 注意:在实际执行脚本时then 必须与if 在同一行
		getpychar = char
	else
		dim tmpp:tmpp=65536+asc(char)
		if(tmpp>=45217 and tmpp <=45252) then
			getpychar= "A"
		elseif(tmpp>=45253 and tmpp <=45760) then
			getpychar= "B"
		elseif(tmpp>=45761 and tmpp <=46317) then
			getpychar= "C"
		elseif(tmpp>=46318 and tmpp <=46825) then
			getpychar= "D"
		elseif(tmpp>=46826 and tmpp <=47009) then
			getpychar= "E"
		elseif(tmpp>=47010 and tmpp <=47296) then
			getpychar= "F"
		elseif(tmpp>=47297 and tmpp <=47613) then
			getpychar= "G"
		elseif(tmpp>=47614 and tmpp <=48118) then
			getpychar= "H"
		elseif(tmpp>=48119 and tmpp <=49061) then
			getpychar= "J"
		elseif(tmpp>=49062 and tmpp <=49323) then
			getpychar= "K"
		elseif(tmpp>=49324 and tmpp <=49895) then
			getpychar= "L"
		elseif(tmpp>=49896 and tmpp <=50370) then
			getpychar= "M"
		elseif(tmpp>=50371 and tmpp <=50613) then
			getpychar= "N"
		elseif(tmpp>=50614 and tmpp <=50621) then
			getpychar= "O"
		elseif(tmpp>=50622 and tmpp <=50905) then
			getpychar= "P"
		elseif(tmpp>=50906 and tmpp <=51386) then
			getpychar= "Q"
		elseif(tmpp>=51387 and tmpp <=51445) then
			getpychar= "R"
		elseif(tmpp>=51446 and tmpp <=52217) then
			getpychar= "S"
		elseif(tmpp>=52218 and tmpp <=52697) then
			getpychar= "T"
		elseif(tmpp>=52698 and tmpp <=52979) then
			getpychar= "W"
		elseif(tmpp>=52980 and tmpp <=53688) then
			getpychar= "X"
		elseif(tmpp>=53689 and tmpp <=54480) then
			getpychar= "Y"
		elseif(tmpp>=54481 and tmpp <=62289) then
			getpychar= "Z"
		else
			getpychar=""
		End if
	end if
End Function

抱歉!评论已关闭.