回 帖 发 新 帖 刷新版面

主题:提取数字

象"456中华人民共和国123"类型的字符,均是汉字后有数字,
   请问各位老师怎样提取汉字后面的数字呢?

回复列表 (共17个回复)

11 楼

?SUBSTR(c1,RAT(GETWORDNUM(c1,GETWORDCOUNT( c1,"0987654321"),"0987654321"),c1)+LEN(GETWORDNUM(c1,GETWORDCOUNT( c1,"0987654321"),"0987654321")))

12 楼

?xyz("456中华人民共和国123")   && 123

**** xyz.prg
PARAMETERS cString
LOCAL I,cResult

m.cResult=""
FOR m.I=1 TO LEN(m.cString)
    IF !ISDIGIT(RIGHT(m.cString,m.I))
        m.cResult=RIGHT(m.cString,m.I-1)
        EXIT
    ENDIF
ENDFOR

RETURN m.cResult

13 楼

4楼的考师,你的代码?CHRTRAN(T1,transform(VAL(t1))+CHRTRAN(T1,"0123456789",""),"")
好像有点问题,请您试试如下:
t1="45sssss存在了456"
?CHRTRAN(T1,transform(VAL(t1))+CHRTRAN(T1,"0123456789",""),"")为6,因为t1前面数字含有后面数字中的字符。
以上有该问题的句子有几个

14 楼

我也是自定函数,比12楼老师的简单一点吧!

LPARAMETERS cValue 
cc = ''
FOR n = 1 TO LEN(cValue)
    cc = cc + IIF(BETWEEN(SUBSTR(cValue,n,1),"0","9"),SUBSTR(cValue,n,1),'')
ENDFOR 
RETURN cc

15 楼

[quote]4楼的考师,你的代码?CHRTRAN(T1,transform(VAL(t1))+CHRTRAN(T1,"0123456789",""),"")
好像有点问题,请您试试如下:
t1="45sssss存在了456"
?CHRTRAN(T1,transform(VAL(t1))+CHRTRAN(T1,"0123456789",""),"")为6,因为t1前面数字含有后面数字中的字符。
以上有该问题的句子有几个
[/quote]
按我在6楼的回复代码就不会有问题了:
我的思路是:
1。将所有数字换成空格;
2。切掉尾部的空格;
3。用原来的字符串长度减去切掉尾部空格后的字符串长度,就知道最后的数字长度了;
4。在原串取出这个数字长度。
这样不论字符串中间的数字、汉字、空格等如何变化都不会有问题。只是如果最后的数字前后是空格还会一起取出来,如果是这样,给整句代码再多加上alltrim()就万无一失了。


16 楼

[quote]我也是自定函数,比12楼老师的简单一点吧!

LPARAMETERS cValue 
cc = ''
FOR n = 1 TO LEN(cValue)
    cc = cc + IIF(BETWEEN(SUBSTR(cValue,n,1),"0","9"),SUBSTR(cValue,n,1),'')
ENDFOR 
RETURN cc[/quote]



您的程序存在一点点小的问题,
虽然行数减少了,但是它会循环完整个字符串长度,因此如果这个字符串很长的话,大量的计算时间就会消耗在不必要的循环上。

17 楼

A=串长
b="0123456789"
c=""
for i=1 to a
    d=subs(串,i,1)
    if d$b=.t.
       c=c+d
    endif
endfor

我来回复

您尚未登录,请登录后再回复。点此登录或注册