设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[其它] [求助]拆分表字段,请斑竹关注,比较难办!急

[复制链接]
跳转到指定楼层
1#
发表于 2005-11-25 20:20:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何将表中的某一字段,分别提取出汉字、英文字母(A,B,C......Z)和其它单字节符号(如   -   /    \    )和数字,并分列显示?我想到用生成表查询,但在通配符的使用上还是比较菜,请高手指点。谢谢

例如:



文本(其中有文字,有字母,有数字,有符号)例如:中国zg2008k/300个人.....

请问如何实现从该文本中将下列数据分别提取出来并存放:   

                                                   中国   

                                                    zg

                                                   2008

                                                     k
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2005-11-27 03:56:00 | 只看该作者
如果此类数据非常有规律,COPY到EXCEL里用“数据分列”(TextToColumn).
3#
发表于 2005-11-27 04:06:00 | 只看该作者
要放例子上来看出规律才好说。
4#
 楼主| 发表于 2005-11-27 19:30:00 | 只看该作者
几十万条记录,没有固定的格式,都是中英文、符号、数字交叉

如果有规律都好弄了,现在记录的规律就是没有,而且记录数太多.所以会要寻代码解决,或查询公式解决问题.我在EXCEL中也发布了求助,而且自己编写了一部分代码,就是没有办法显示出结果.中断程序可以部分显示,已经可以达到要求,但最后的结果没有.

需要处理的记录达几十万条,在EXCEL中单个工作表最多可以处理6万多条,把这么多的记录要分成若干个表,然后重复若干次操作,这样是非常累的.而且在EXCEL中通配符没有ACCESS中丰富.所以想在ACCESS中集中处理.或在EXCEL中用自定义公式一次性达到目的.这样即使表格多几个问题也不大了.现在把我的思路(EXCEL中的代码)写出来,请大家修改.谢谢.

Private Function cs(A As Range) As String
Application.Volatile

    Dim lo, strtyp1, strtyp2, c, d As Integer
    Dim lu%, hw$, hx$
    Dim hw, hx
   
    lo = LenB(A)
   
   
    For lu = 1 To lo
        hw = Mid(A, lu, 1)
        hx = Mid(A, lu + 1, 1)
        c = Asc(hw)
        d = Asc(hx)
        '对当前字符进行判断
        If c > 255 Or c < 0 Then '判断汉字  并赋值
        strtyp1 = 1
           Else
           If (c >= 0 And c < 48) Or (c >= 58 And c <= 255) Then '判断字母  并赋值
           strtyp1 = 2
               Else
               If c < 58 And c >= 48 Then '判断数字  并赋值
               strtyp1 = 3
               End If
           End If
        End If
        '对下一个字符进行判断
        If d > 255 Or d < 0 Then
        strtyp2 = 1
           Else
           If (d >= 0 And d < 48) Or (d >= 58 And d <= 255) Then
           strtyp2 = 2
               Else
               If d < 58 And d >= 48 Then
               strtyp2 = 3
               End If
           End If
        End If
       '比较前后两个字符,如果类型不一致,则加一个分隔符
       If strtyp1 > strtyp2 Or strtyp1 < strtyp2 Then
       hw = hw & "\"
       cs = cs & hw
       'lu = lu + 1
       'lo = lo + 1
       Else
       hw = hw
       cs = cs & hw
       End If
       'cs = cs & hw
    Next
'cs = cs & hw
End Function





<COLGROUP>

<COL style="WIDTH: 332pt; mso-width-source: userset; mso-width-alt: 14144" width=442>





自己没有解决的问题:



1、循环的次数,加了“\”以后应该动态改变,目前没有实现



2、最后一个记录,没有hx该如何处理?



3、增加了“\”以后,再取出来的字符是否有问题?比如说:软件\O…,再取第3位就变成了"\",而不是O了






[此贴子已经被作者于2005-11-27 11:46:00编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
5#
发表于 2005-11-28 06:48:00 | 只看该作者
1) 不用“\”做分隔,如果原串中有\怎么办?要存进表的不同字段中。

2)循环体内只处理一个字符,与最后一个字符类型比较,不要处理两个字符。

6#
 楼主| 发表于 2005-11-28 17:41:00 | 只看该作者
我需要对源代码进行修改,谢谢
7#
发表于 2005-11-28 22:03:00 | 只看该作者
你的例子呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 18:57 , Processed in 0.091467 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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