注册 登录
编程论坛 VFP论坛

如何判断某一字符串是否为数据型字符串?

自强不西 发布于 2020-11-26 16:22, 2067 次点击
如题,请各位老师不吝赐教!
10 回复
#2
schtg2020-11-26 16:44
请自己测试一下哈
aa = 123.1232
if TYPE([aa]) == "N"
   messagebox("数值型")
else
   messagebox("不是数值型")
endif
#3
吹水佬2020-11-26 19:23
? s==TRANSFORM(VAL(s))
#4
xuminxz2020-11-26 19:52
如果没小数用3楼的方法是最好的,否则可以用以下函数。
 LPARAMETER S
FOR i=0 TO 9
    s=STRTRAN(s,STR(i,1),'')
ENDFOR
return EMPTY(s) OR ALLTRIM(s)=='.'
如可能出现前导负号,最后一句再加上, OR ALLTRIM(s)=='-.' OR ALLTRIM(s)=='-'。可能有前导正号类似增加。
#5
mywisdom882020-11-27 08:46
*!* 大家看下面的情况
*!* 1)
S1='A1'
S2=TRANSFORM(VAL(S1))
?S2 && 0

*!* 2)
S1='1A'
S2=TRANSFORM(VAL(S1))
?S2 && 1
所以,简单的方法,好像没办法的,只能选逐个字符过滤


#6
sdta2020-11-27 09:17
A1 = "123"
IF EMPTY(CHRTRAN(A1, "012345789", ""))
    ?"A1 为空"
ENDIF
#7
自强不西2020-11-27 11:18
谢谢各位老师,我先试下。
#8
mywisdom882020-11-27 12:59
*!*    A1 = '-.1232'  && -0.12
*!*    A1 = '-.123-2' && 0
*!*    A1 = '.1.232'  && 0
*!*    A1 = '123A2'   && 0

A1 = '1232'
?NumStr(A1)


FUNCTION NumStr(cStr)
IF SUBSTR(cStr,1,1) = "-" && 第一个"-"
   IF RAT('-',cStr) # 1   && 有多个"-"
      RETURN 0
   ELSE
      IF AT(".",cStr) # RAT(".",cStr)  && 有多个"."
         RETURN 0
      ELSE
         IF EMPTY(CHRTRAN(cStr, "-.012345789", ""))
            RETURN TRANSFORM(VAL(cStr))
         ELSE
            RETURN 0
         ENDIF   
      ENDIF
   ENDIF
ELSE
   IF AT(".",cStr) # RAT(".",cStr)  && 有多个"."
      RETURN 0
   ELSE
      IF EMPTY(CHRTRAN(cStr, ".012345789", ""))
         RETURN TRANSFORM(VAL(cStr))
      ELSE
         RETURN 0
      ENDIF   
   ENDIF
ENDIF
ENDFUNC
#9
xuminxz2020-11-27 16:01
为了提高执行速度,用CHR代替STR
LPARAMETER S
FOR i=48 TO 57
    s=STRTRAN(s,chr(i),'')
ENDFOR
return len(s)=0 OR ALLTRIM(s)=='.' OR ALLTRIM(s)=='-.' OR ALLTRIM(s)=='-' OR ALLTRIM(s)=='+.' OR ALLTRIM(s)=='+'
#10
自强不西2020-11-28 09:33
谢谢各位老师指教!判断一个字符串是否数字型字符串,在EXCEL中,只要一个isnumber函数就解决了,现在用VFP还是比较麻烦。
#11
chxking2020-11-28 10:40
LOCAL ln1,lc1
lc1='l12341'
TRY
    IF VAL(lc1)#EVALUATE(lc1)
        lc1=.NULL.
    ENDIF
CATCH
    lc1=.NULL.
ENDTRY

IF ISNULL(lc1)
    =MESSAGEBOX('包含非数字字符!!')
ELSE
    =MESSAGEBOX('全数字字符!!')
ENDIF
1