设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3319|回复: 9
打印 上一主题 下一主题

[模块/函数] 暴力清除日文片假名字符

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2010-12-23 22:18:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2010-12-23 22:53:17 | 只看该作者
以暴制暴了 溢位这个问题,以前遇到过. 也是因为这个原因
是否可以根据文字的ASCW来判断,落在哪个范围,不过我没有试过
3#
发表于 2010-12-23 23:11:15 | 只看该作者
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)
4#
发表于 2010-12-24 07:26:58 | 只看该作者
t小宝 发表于 2010-12-23 22:18
各位看到标题不要想到中日之间的什么事哦,其实只是,日文片假名字符在ACCESS中一出现,就会惹来不少麻烦 ...

5#
发表于 2010-12-24 08:16:01 | 只看该作者
谢谢分享
学习了
收藏

点击这里给我发消息

6#
 楼主| 发表于 2010-12-24 09:18:17 | 只看该作者
fyupeng 发表于 2010-12-23 23:11
我把
Err_Command0_Click:
      If Err.Number = 5 Then

因为获取字符数的变量类型为 Integer , 而你的文本文件太大, 所以溢出, 我把变量类型改为 Long 就可以了, 转换速度还蛮快的.

点击这里给我发消息

7#
 楼主| 发表于 2010-12-24 09:20:04 | 只看该作者
回复 tmtony 的帖子

那些字符的ASCW不是连续的, 也要一个一个来判断, 所以干脆直接判断字符
8#
发表于 2010-12-24 19:41:20 | 只看该作者
小宝版主的代码正解。佩服
9#
发表于 2011-12-31 08:36:33 | 只看该作者
学习
10#
发表于 2011-12-31 09:44:48 | 只看该作者
我也来学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-18 02:27 , Processed in 0.092256 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表