设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: fyupeng
打印 上一主题 下一主题

[模块/函数] 请哪位大侠分析一下这样的文本文件转换问题!!

[复制链接]

点击这里给我发消息

11#
发表于 2010-12-22 20:54:12 | 只看该作者
百度了一下,以下26个日文字符会导致ACCESS搜索时内存溢出,大家要注意了。
ゴ ガ ギ ア ゲ ザ ジ ズ ヅ デ ド ポ ベ プ ビ パ ヴ ボ ペ ブ ピ バ ヂ ダ ゾ ゼ
12#
 楼主| 发表于 2010-12-22 21:04:01 | 只看该作者
哦,是哦,代码要怎么改,才能避开日文字符,顺利转换呢?
13#
 楼主| 发表于 2010-12-22 23:00:14 | 只看该作者
t小宝 发表于 2010-12-22 20:54
百度了一下,以下26个日文字符会导致ACCESS搜索时内存溢出,大家要注意了。
ゴ ガ ギ ア ゲ ザ ジ ズ ヅ デ ...

好像又有问题!我查了一下,Access数据库搜索时“内存溢出”的解决办法,
Function JPcode(byVal iStr,codeType)
If isNull(iStr) or isEmpty(iStr) or iStr = "" Then
  JPcode = "" : Exit function
End If
Dim F,i,E
E = array("Jn0;","Jn1;","Jn2;","Jn3;","Jn4;","Jn5;","Jn6;",_
         "Jn7;","Jn8;","Jn9;","Jn10;","Jn11;","Jn12;","Jn13;",_
         "Jn14;","Jn15;","Jn16;","Jn17;","Jn18;","Jn19;","Jn20;",_
         "Jn21;","Jn22;","Jn23;","Jn24;","Jn25;")
F = array(chr(-23116),chr(-23124),chr(-23122),chr(-23120),_
         chr(-23118),chr(-23114),chr(-23112),chr(-23110),_
          chr(-23099),chr(-23097),chr(-23095),chr(-23075),_
         chr(-23079),chr(-23081),chr(-23085),chr(-23087),_
         chr(-23052),chr(-23076),chr(-23078),chr(-23082),_
         chr(-23084),chr(-23088),chr(-23102),chr(-23104),_
         chr(-23106),chr(-23108))
       If codyType Then
  For i=0 to 25 iStr = Replace(iStr,F(i),E(i)) Next
       Else
  For i=0 to 25 iStr = Replace(iStr,E(i),F(i)) Next
       End If
       JPcode = iStr
End Function
这里已经先用到Replace了。
14#
 楼主| 发表于 2010-12-23 20:09:05 | 只看该作者
t小宝 发表于 2010-12-22 20:46
因为文本文件中有日文字符:ゼ ,在ACCESS中很多函数对日文字符都有问题,如 debug.Print "ゼ123" Like "1" ...

多谢小宝版主,此问题已解决。网上那段代码用到REPLACE不行。我是在出错时,逐字符用ASC()读,当遇到-23112等时,用空字符替换,然后再chr(asc()),成功解决。


点击这里给我发消息

15#
发表于 2010-12-23 20:26:19 | 只看该作者
fyupeng 发表于 2010-12-23 20:09
多谢小宝版主,此问题已解决。网上那段代码用到REPLACE不行。我是在出错时,逐字符用ASC()读,当遇到-2 ...

解决了,能贴出你的代码看看吗
16#
 楼主| 发表于 2010-12-23 20:32:32 | 只看该作者
本帖最后由 fyupeng 于 2010-12-23 20:35 编辑
t小宝 发表于 2010-12-23 20:26
解决了,能贴出你的代码看看吗


Function EncodeString(strWords)
    Dim i As Long
    Dim strEncodeWords
    For i = 1 To Len(strWords)
        If CStr(Asc(Mid(strWords, i, 1))) = "-23116" Or CStr(Asc(Mid(strWords, i, 1))) = "-23124" Or CStr(Asc(Mid(strWords, i, 1))) = "-23122" Or CStr(Asc(Mid(strWords, i, 1))) = "-23120" Or CStr(Asc(Mid(strWords, i, 1))) = "-23118" _
           Or CStr(Asc(Mid(strWords, i, 1))) = "-23114" Or CStr(Asc(Mid(strWords, i, 1))) = "-23112" Or CStr(Asc(Mid(strWords, i, 1))) = "-23110" Or CStr(Asc(Mid(strWords, i, 1))) = "-23099" Or CStr(Asc(Mid(strWords, i, 1))) = "-23097" _
           Or CStr(Asc(Mid(strWords, i, 1))) = "-23095" Or CStr(Asc(Mid(strWords, i, 1))) = "-23075" Or CStr(Asc(Mid(strWords, i, 1))) = "-23079" Or CStr(Asc(Mid(strWords, i, 1))) = "-23081" Or CStr(Asc(Mid(strWords, i, 1))) = "-23085" _
           Or CStr(Asc(Mid(strWords, i, 1))) = "-23087" Or CStr(Asc(Mid(strWords, i, 1))) = "-23052" Or CStr(Asc(Mid(strWords, i, 1))) = "-23076" Or CStr(Asc(Mid(strWords, i, 1))) = "-23078" Or CStr(Asc(Mid(strWords, i, 1))) = "-23082" _
           Or CStr(Asc(Mid(strWords, i, 1))) = "-23084" Or CStr(Asc(Mid(strWords, i, 1))) = "-23088" Or CStr(Asc(Mid(strWords, i, 1))) = "-230102" _
           Or CStr(Asc(Mid(strWords, i, 1))) = "-23104" Or CStr(Asc(Mid(strWords, i, 1))) = "-23106" Or CStr(Asc(Mid(strWords, i, 1))) = "-23108" Then
           strEncodeWords = strEncodeWords & " "
         Else
           strEncodeWords = strEncodeWords & Chr(Asc(Mid(strWords, i, 1)))
        End If
    Next
   
    EncodeString = strEncodeWords
End Function

声明一下,本人只要能写出来的,就不想用数组。呵呵。
Private Sub Command0_Click()
On Error GoTo Err_Command0_Click
    Dim b As String
    Dim x As String
    Open Me![text1] For Input As #1 '源文件
    Open Me![text1] & ".txt" For Append As #2
    Do Until EOF(1)
          Line Input #1, k
          x = Replace(k, Chr(10) & "", Chr(13) & Chr(10))
          Print #2, x
     Loop
    Close #1
    Close #2
    MsgBox "文件转换完毕!!!"
Exit_Command0_Click:
    Exit Sub

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
End Sub

看看有没有可以优化的地方?

点评

函数不错,但需要一个一个字来重新组合字符,我也写了一个,仅在出现日文片假名时组合字符,可能速度快一点吧 http://www.access-cn.com/forum.php?mod=viewthread&tid=95795&extra=  发表于 2010-12-23 22:21
17#
发表于 2011-1-9 20:36:44 | 只看该作者
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 19:39 , Processed in 0.081793 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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