Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

怎样判断连续数字的位置

chinasa  发表于:2014-08-06 16:11:15  
复制

下面三行内容是我一个字段中的文本,我现在需要判断是否存在连续10位的数字(比如:9617001100),如果存在则显示其在文本中的位置,如果不存在则返回0.

 

 

保温壶
9617001100
(单证上显示961700)

 

Top
宏鹏 发表于:2014-08-06 19:47:00
没看懂什么意思

cspa 发表于:2014-08-06 21:14:53

str1="保温壶9617001100(单证上显示961700)"

str2="9617001100"

lngLocation=instr(1,str1,str2)      'lngLocation即是[9617001100]在[保温壶9617001100(单证上显示961700)]中的起始位置。

if lngLocation=0 then

    msgbox "该字段数据中不包括所查寻内容"

end if

 



chinasa 发表于:2014-08-07 08:24:39

感谢cspa的回复。

不过9617001100并不是固定的,他只是其中一条记录。

 

宏鹏

我的记录类似下面内容,其中如果存在连续10个数字型的,我需要把这10个连续的数字取出来。

保温壶9617001100(单证上显示961700)

保温杯8755001123(单证上显示921251)

尿不湿

保温锅9999001123(单证上显示921251)

XXXX

ABC9999999999

YYYYYY

ZZZZZ

 

 



cspa 发表于:2014-08-07 08:44:15

 



宏鹏 发表于:2014-08-07 09:06:38
’?GetNum("保温壶9617001100(单证上显示961700)") =4

Function GetNum(str As String)
     Dim NumTemp As String
     Dim i, j As Integer
     NumTemp = Num(str)
     For i = Len(NumTemp) To 10 Step -1
            If Len(NumTemp) >= 10 Then
             j = InStr(1, str, Left(NumTemp, 10))
             If j <> 0 Then Exit For
             NumTemp = Mid(NumTemp, 2)
         End If
     Next
     GetNum = Nz(j, 0)
 End Function

'功能:从字符串中取出夹杂的数字
 Function Num(Exp As String) As String
     Dim lntI As Long
     Dim strWord As String

    For lntI = 1 To Len(Exp)
         strWord = Mid(Exp, lntI, 1)
         If strWord Like "[0-9]" Then
             Num = Num & strWord
         End If
     Next
 End Function
 


chinasa 发表于:2014-08-07 14:50:34

感谢宏鹏管理员的指导,但我需要的是“连续10个数字型”,而该方法可以取10个数字,但不是连续的,比如:

“保温壶1234保温杯9617001100(单证上显示961700)”

上面这个文本我需要取9617001100,而不是“1234961700”



cspa 发表于:2014-08-07 16:31:19

把Function Num简单改下:

Function Num(Exp As String) As String
     Dim lntI As Long
     Dim lntN As Long
     Dim strWord As String
     Dim strNum As String

     intN=1

     For lntI = 1 To Len(Exp)
         strWord = Mid(Exp, lntI, 1)
         If strWord Like "[0-9]" and len(nz(strNum,"0"))<=10 Then
             strNum = strNum & strWord
             intN=intN+1

             End If
             if intN-intI<>1 THEN               '此if语句为判断是否是连续数字,如不是原strNum清空,重新从intI位置开始判断

                 strNum=""

                 intN=intI

             end if

              Next
      Num=strNum

End Function



chinasa 发表于:2014-08-08 13:00:42
理论上可行,我测试下。感谢ing.....

cspa 发表于:2014-08-08 14:17:36

昨天改的程序未经调试,有一些错误,现把调好的代码再发一遍,只用以下代码即行了,其他代码都不需要了。已用你给的数据测试了结果全部正确。

Function Num(Exp As String) As String
     Dim lntI As Long
     Dim lntN As Long
     Dim strWord As String
     Dim strNum As String
    
     lntN = 1
     For lntI = 1 To Len(Exp)
         strWord = Mid(Exp, lntI, 1)
         If strWord Like "[0-9]" And Len(Nz(strNum, "0")) < 10 Then
             strNum = strNum & strWord
             lntN = lntN + 1

             End If
             If lntN - lntI <> 1 And Len(Nz(strNum, "0")) <> 10 Then           '此if语句为判断是否是连续数字,如不是原strNum清空,重新从intI位置开始判断
                 strNum = ""
                 lntN = lntI + 1
             End If
     Next
     If Nz(strNum, "") <> "" Then
         Num = InStr(1, Exp, Nz(strNum, ""))        '此即为连续10个数字在字符串中的起始位置
       Else
         Num = 0                                              '如果无连续10个数字在字符串中则返回值为0
     End If
End Function



宏鹏 发表于:2014-08-08 15:43:36
上面的代码,我测试可以的呀,如果要返回数值的,就把GetNum = Nz(j, 0)改成
GetNum = Nz(Left(NumTemp, 10), 0)

煮江品茶 发表于:2014-08-08 16:48:55

无需那么复杂,用正则表达式处理即可。


点击下载此附件




chinasa 发表于:2014-08-08 17:35:11

真是感到无比荣幸,万分感谢各位老师的指点。

请允许我学习下先,特别是煮版的正则表达式,以前从未想过,还真的消化下。

先感谢三位老师的细心指导!



煮江品茶 发表于:2014-08-08 17:51:36
不用消化,囫囵吞枣一般调用函数便可。

chinasa 发表于:2014-08-09 20:13:19

洋洋洒洒写了那么多内容在提交时竟然提醒我要登录(写太长时间,超时了),写的内容丢失了,也没激情重新写,主要是对三位老师的感谢,特别是CSPA经常帮助我的。煮版的方法让我大开眼界。同时也请教个问题:{n}应该是匹配确定次数的,为什么我输入11个数字也能匹配,这样不是与{n.}的效果一样了吗?



总记录:14篇  页次:1/1 9 1 :