Office学院 加入收藏
Office学院 Access Word Excel Powerpoint Wps Access Outlook Tags  
您现在的位置: Office学院 - Access - 英文姓名转换案例

英文姓名转换案例

添加记录: 英文姓名转换案例 类别: Access 发布日期: 2006.07.19

发布日期:2005年1月6日

原 作 者:Jay Holovacs

译    者:竹笛

正    文:

下面的函数集可以让开发人员按规则对英文的姓名进行转换

在窗体中创建按钮Command4,在单击事件中复制下面的代码:

Private Sub Command4_Click()
Dim retval As String
retval = mixed_case("zhi qiang zhang")

Debug.Print retval
End Sub

运行后的结果为:Zhi Qiang Zhang

将下面的函数代码复制到窗体模块中:

'************** Code Start *************
'This code was originally written by Jay Holovacs.
'It is not to be altered or distributed,
'except as part of an application.
'You are free to use it in any application,
'provided the copyright notice is left unchanged.
'
'Code Courtesy of
'Jay Holovacs
'
Public Function mixed_case(str As Variant) As String
'returns modified string, first character of each word us uppercase
'all others lower case
Dim ts As String, ps As Integer, char2 As String
    If IsNull(str) Then
        mixed_case = ""
        Exit Function
    End If
    str = Trim(str) 'added 11/22/98
    If Len(str) = 0 Then
        mixed_case = ""
        Exit Function
    End If
    ts = LCase$(str)
    ps = 1
    ps = first_letter(ts, ps)
    special_name ts, 1 'try to fix the beginning
    Mid$(ts, 1) = UCase$(Left$(ts, 1))
    If ps = 0 Then
        mixed_case = ts
        Exit Function
    End If
    While ps <> 0
        If is_roman(ts, ps) = 0 Then 'not roman, apply the other rules
            special_name ts, ps
            Mid$(ts, ps) = UCase$(Mid$(ts, ps, 1)) 'capitalize the first letter
        End If
        ps = first_letter(ts, ps)
    Wend
    mixed_case = ts
End Function
Private Sub special_name(str As String, ps As Integer)
'expects str to be a lower case string, ps to be the
'start of name to check, returns str modified in place
'modifies the internal character (not the initial)

Dim char2 As String
char2 = Mid$(str, ps, 2) 'check for Scots Mc
If (char2 = "mc") And Len(str) > ps + 1 Then '3rd char is CAP
    Mid$(str, ps + 2) = UCase$(Mid$(str, ps + 2, 1))
End If

char2 = Mid$(str, ps, 2) 'check for ff
If (char2 = "ff") And Len(str) > ps + 1 Then 'ff form
    Mid$(str, ps, 2) = LCase$(Mid$(str, ps, 2))
End If

char2 = Mid$(str, ps + 1, 1) 'check for apostrophe as 2nd char
If (char2 = "'") Then '3rd char is CAP
    Mid$(str, ps + 2) = UCase$(Mid$(str, ps + 2, 1))
End If

Dim char3 As String
char3 = Mid$(str, ps, 3) 'check for scots Mac
If (char3 = "mac") And Len(str) > ps + 1 Then 'Mac form
    Mid$(str, ps + 3) = UCase$(Mid$(str, ps + 3, 1))
End If

Dim char4 As String
char4 = Mid$(str, ps, 4) 'check for Fitz
If (char4 = "fitz") And Len(str) > ps + 1 Then 'Fitz form
    Mid$(str, ps + 4) = UCase$(Mid$(str, ps + 4, 1))
End If

End Sub
Private Function first_letter(str As String, ps As Integer) As Integer
'ps=starting point to search (starts with character AFTER ps)
'returns next first letter, 0 if no more left
'modified 6/18/99 to handle hyphenated names
Dim p2 As Integer, p3 As Integer, s2 As String
    s2 = str
    p2 = InStr(ps, str, " ") 'points to next blank, 0 if no more
    p3 = InStr(ps, str, "-") 'points to next hyphen, 0 if no more
    If p3 <> 0 Then
        If p2 = 0 Then
            p2 = p3
        ElseIf p3 < p2 Then
            p2 = p3
        End If
    End If
    If p2 = 0 Then
        first_letter = 0
        Exit Function
    End If
    'first move to first non blank, non punctuation after blank
    While is_alpha(Mid$(str, p2)) = False
        p2 = p2 + 1
        If p2 > Len(str) Then 'we ran off the end
            first_letter = 0
            Exit Function
        End If
    Wend
    first_letter = p2
End Function
Public Function is_alpha(ch As String)
'returns true if this is alphabetic character
'false if not
    Dim c As Integer
    c = Asc(ch)
    Select Case c
        Case 65 To 90
            is_alpha = True
        Case 97 To 122
            is_alpha = True
        Case Else
            is_alpha = False
    End Select
   
End Function
Private Function is_roman(str As String, ps As Integer) As Integer
'starts at position ps, until end of word. If it appears to be
'a roman numeral, than the entire word is capped in passed back
'string, else no changes made in string
'returns 1 if changes were made, 0 if no change
Dim mx As Integer, p2 As Integer, flag As Integer, i As Integer
    mx = Len(str) 'just so we don't go off the edge
    p2 = InStr(ps, str, " ") 'see if there is another space after this word
    If p2 = 0 Then
        p2 = mx + 1
    End If
    'scan to see if any inappropriate characters in this word
    flag = 0
    For i = ps To p2 - 1
        If InStr("ivxIVX", Mid$(str, i, 1)) = 0 Then
            flag = 1
        End If
    Next i
    If flag Then
        is_roman = 0
        Exit Function 'this is not roman numeral
    End If
    Mid$(str, ps) = UCase$(Mid$(str, ps, p2 - ps))
    is_roman = 1
End Function
'************** Code End  *************


 

顶一下
上一篇:获取文件夹名称的函数
下一篇:远程连接access数据库的方法
Tags: word 按钮 函数

相关信息
  • 获取文件夹名称的函数
  • 统计代码行的源程序
  • 用VB制作文件下载程序
  • 利用Winsock控件实现局域网通信
  • 在VB中如何使用 Winsock 控件
  • 菜单和工具栏知识(9)-菜单项和工具栏控件的IDs
  • 菜单和工具栏知识(8)-对工具栏的运行时刻修改
  • 菜单和工具栏知识(7)-工具栏
  • 菜单和工具栏知识(6)-菜单系统的运行时刻修改
  • 菜单和工具栏知识(5)-菜单系统的设计时刻修改
  • 菜单和工具栏知识(4)-菜单系统
  • 菜单和工具栏知识(3)-选择对用户界面进行最佳增强
  • 菜单和工具栏知识(2)-用户界面的更改范围
  • 菜单和工具栏知识(1)-修改用户界面的工具
  • 使用 Access 2003 对象模型的 XML 功能
  • 远程连接access数据库的方法
  • 第三届网站之星评选活动
  • 赞助ACCESS软件网
  • 赞助帐号与付款方式
  • 招北京ACCESS编程人员
  • Access无需DSN文件快速连接SQL Server的方法!
  • 无需*.DSN文件创建对SQL SEVER数据库的链接
  • 控件自适应屏幕分辩率或调整窗体大小变化
  • ACCESS编程技巧数据库
  • 网站赞助名单
  • 解决联合查询溢出的一个方法
  • 用ADOX创建一个新的ACCESS2000数据库
  • 窗体间变量的传值方法汇总
  • 在ACCESS开发中应用匈牙利命名法
  • 祝贺本站朱亦文zhuyiwen再次当选微软MVP














  • 生日密码
    血型分析
    生肖分析



    制作单位 Office学院 © 版权所有


    联系我们 关于我们 友情链接 站点地图 免责声明


    Office学院,致力于打造专业的OFFICE应用交流平台。