設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

返回列表 發(fā)新帖
查看: 3261|回復(fù): 9
打印 上一主題 下一主題

[模塊/函數(shù)] 暴力清除日文片假名字符

[復(fù)制鏈接]

點(diǎn)擊這里給我發(fā)消息

跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2010-12-23 22:18:30 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 t小寶 于 2010-12-24 09:20 編輯

各位看到標(biāo)題不要想到中日之間的什么事哦,其實(shí)只是,日文片假名字符在ACCESS中一出現(xiàn),就會(huì)惹來不少麻煩,
諸如表的記錄含有日文片假名字符時(shí),查詢記錄會(huì)導(dǎo)致內(nèi)存溢出,處理字符串的函數(shù)遇到日文片假名字符會(huì)出錯(cuò)等,
具體可用ACCESS和日文為關(guān)鍵字百度一下。
其實(shí)這也不能怪日本,怪就怪微軟,真不知微軟是什么心態(tài),搞這么一個(gè)BUG,影響中日關(guān)系。。。
那么,在ACCESS中就要堅(jiān)決清除日文片假名字符,不能讓它與ACCESS共存,
但用Replace、InStr來處理都出錯(cuò),所以只能用暴力一個(gè)字一個(gè)字來解決了。
http://ctxi.cn/thread-95783-1-1.html此帖中fyupeng 版友遇到了此問題,并找到了解決方法,
本人也寫了個(gè)函數(shù),誰有更好的辦法快來指正。。。

'清除日文片假名字符函數(shù)
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 分享分享 分享淘帖 訂閱訂閱

點(diǎn)擊這里給我發(fā)消息

2#
發(fā)表于 2010-12-23 22:53:17 | 只看該作者
以暴制暴了 溢位這個(gè)問題,以前遇到過. 也是因?yàn)檫@個(gè)原因
是否可以根據(jù)文字的ASCW來判斷,落在哪個(gè)范圍,不過我沒有試過
3#
發(fā)表于 2010-12-23 23:11:15 | 只看該作者
t小寶 發(fā)表于 2010-12-23 22:18
各位看到標(biāo)題不要想到中日之間的什么事哦,其實(shí)只是,日文片假名字符在ACCESS中一出現(xiàn),就會(huì)惹來不少麻煩 ...

我把
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)
運(yùn)行錯(cuò)誤“6 ”,溢出
這一句: For i = 1 To Len(Expression)
4#
發(fā)表于 2010-12-24 07:26:58 | 只看該作者
t小寶 發(fā)表于 2010-12-23 22:18
各位看到標(biāo)題不要想到中日之間的什么事哦,其實(shí)只是,日文片假名字符在ACCESS中一出現(xiàn),就會(huì)惹來不少麻煩 ...

5#
發(fā)表于 2010-12-24 08:16:01 | 只看該作者
謝謝分享
學(xué)習(xí)了
收藏

點(diǎn)擊這里給我發(fā)消息

6#
 樓主| 發(fā)表于 2010-12-24 09:18:17 | 只看該作者
fyupeng 發(fā)表于 2010-12-23 23:11
我把
Err_Command0_Click:
      If Err.Number = 5 Then

因?yàn)楂@取字符數(shù)的變量類型為 Integer , 而你的文本文件太大, 所以溢出, 我把變量類型改為 Long 就可以了, 轉(zhuǎn)換速度還蠻快的.

點(diǎn)擊這里給我發(fā)消息

7#
 樓主| 發(fā)表于 2010-12-24 09:20:04 | 只看該作者
回復(fù) tmtony 的帖子

那些字符的ASCW不是連續(xù)的, 也要一個(gè)一個(gè)來判斷, 所以干脆直接判斷字符
8#
發(fā)表于 2010-12-24 19:41:20 | 只看該作者
小寶版主的代碼正解。佩服
9#
發(fā)表于 2011-12-31 08:36:33 | 只看該作者
學(xué)習(xí)
10#
發(fā)表于 2011-12-31 09:44:48 | 只看該作者
我也來學(xué)習(xí)
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機(jī)版|Office中國/Access中國 ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2024-10-23 04:39 , Processed in 0.120949 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表