Office中国论坛/Access中国论坛

标题: 暴力清除日文片假名字符 [打印本页]

作者: t小宝    时间: 2010-12-23 22:18
标题: 暴力清除日文片假名字符
本帖最后由 t小宝 于 2010-12-24 09:20 编辑

各位看到标题不要想到中日之间的什么事哦,其实只是,日文片假名字符在ACCESS中一出现,就会惹来不少麻烦,
诸如表的记录含有日文片假名字符时,查询记录会导致内存溢出,处理字符串的函数遇到日文片假名字符会出错等,
具体可用ACCESS和日文为关键字百度一下。
其实这也不能怪日本,怪就怪微软,真不知微软是什么心态,搞这么一个BUG,影响中日关系。。。
那么,在ACCESS中就要坚决清除日文片假名字符,不能让它与ACCESS共存,
但用Replace、InStr来处理都出错,所以只能用暴力一个字一个字来解决了。
http://www.office-cn.net/thread-95783-1-1.html此帖中fyupeng 版友遇到了此问题,并找到了解决方法,
本人也写了个函数,谁有更好的办法快来指正。。。

'清除日文片假名字符函数
Function ClearKatakana(Expression As String) As String
    Dim i As Long
    Dim lngStart As Long
    Dim lngLength As Long
    lngStart = 1
    For i = 1 To Len(Expression)
        Select Case Mid(Expression, i, 1)
        Case "ゴ", "ガ", "ギ", "ア", "ゲ", "ザ", "ジ", "ズ", "ヅ", "デ", "ド", "ポ", "ベ", "プ", "ビ", "パ", "ヴ", "ボ", "ペ", "ブ", "ピ", "バ", "ヂ", "ダ", "ゾ", "ゼ"
            lngLength = i - lngStart
            If lngLength > 0 Then ClearKatakana = ClearKatakana & Mid(Expression, lngStart, lngLength)
            lngStart = i + 1
        End Select
    Next
   
    ClearKatakana = ClearKatakana & Mid(Expression, lngStart)
   
End Function


作者: tmtony    时间: 2010-12-23 22:53
以暴制暴了 溢位这个问题,以前遇到过. 也是因为这个原因
是否可以根据文字的ASCW来判断,落在哪个范围,不过我没有试过

作者: fyupeng    时间: 2010-12-23 23:11
t小宝 发表于 2010-12-23 22:18
各位看到标题不要想到中日之间的什么事哦,其实只是,日文片假名字符在ACCESS中一出现,就会惹来不少麻烦 ...

我把
Err_Command0_Click:
      If Err.Number = 5 Then
        b = EncodeString(k)
        x = Replace(b, Chr(10) & "", Chr(13) & Chr(10))
        Resume Next
      else
        msgbox err.number
        resume next
      End If

b = EncodeString(k)
换成b=ClearKatakana(k)
运行错误“6 ”,溢出
这一句: For i = 1 To Len(Expression)

作者: todaynew    时间: 2010-12-24 07:26
t小宝 发表于 2010-12-23 22:18
各位看到标题不要想到中日之间的什么事哦,其实只是,日文片假名字符在ACCESS中一出现,就会惹来不少麻烦 ...


作者: xuwenning    时间: 2010-12-24 08:16
谢谢分享
学习了
收藏
作者: t小宝    时间: 2010-12-24 09:18
fyupeng 发表于 2010-12-23 23:11
我把
Err_Command0_Click:
      If Err.Number = 5 Then

因为获取字符数的变量类型为 Integer , 而你的文本文件太大, 所以溢出, 我把变量类型改为 Long 就可以了, 转换速度还蛮快的.
作者: t小宝    时间: 2010-12-24 09:20
回复 tmtony 的帖子

那些字符的ASCW不是连续的, 也要一个一个来判断, 所以干脆直接判断字符
作者: fyupeng    时间: 2010-12-24 19:41
小宝版主的代码正解。佩服
作者: bpchan    时间: 2011-12-31 08:36
学习
作者: 风中漫步    时间: 2011-12-31 09:44
我也来学习




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3