免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 8021 | 回复: 22
打印 上一主题 下一主题

ile rpg中如何判断一个字符串是否全是由0-9数字组成的? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-03 14:21 |只看该作者 |倒序浏览
ile rpg中如何判断一个字符串是否全是由0-9数字组成的?

论坛徽章:
0
2 [报告]
发表于 2010-03-03 16:38 |只看该作者
遍历其中每一个字符然后去一个由‘0123456789’的字符串里找

论坛徽章:
0
3 [报告]
发表于 2010-03-03 16:46 |只看该作者
遍历其中每一个字符然后去一个由‘0123456789’的字符串里找
george251 发表于 2010-03-03 16:38


   在没有简单点的了么?

论坛徽章:
0
4 [报告]
发表于 2010-03-03 17:24 |只看该作者
本帖最后由 passthru 于 2010-03-03 17:26 编辑

c@string                       s                   1000        varying
s@pos                         s                         3s  0  inz
c@digit                        c                                   const('0123456789')
       .....
       s@pos =   %scan(c@digit : c@string) ;
       if  s@pos > 0  and
           %len(%trim(c@string)) = %len(c@digit) ;
            //字段是'0123456789'
       else ;
        //字段不是'0123456789'
       endif ;
     .....

论坛徽章:
0
5 [报告]
发表于 2010-03-03 17:37 |只看该作者
本帖最后由 passthru 于 2010-03-03 17:57 编辑

d c@String          s      1000     varying
d c@String2        s      1000     varying
d lo                     c                   'abcdefghijklmnopqrstuvwxyz'
d hi                     c                   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

     .....
     c@String2 = c@String ;
     //小写变大写
     c@String2 = %Xlate(lo:hi:c@String2);
     if c@String <> c@String2 ;
           //字段有字符
     else ;
          //大写变小写
        c@String2 = %Xlate(hi:lo:c@String2);
            if c@String <> c@String2 ;
                  //字段有字符
        else ;
                 //都是数字组成的字符串
        endif ;
     endif ;

论坛徽章:
0
6 [报告]
发表于 2010-03-03 20:23 |只看该作者
本帖最后由 insmile 于 2010-03-03 20:38 编辑

哪里这么麻烦?

就用操作码TESTN就可以了

不过要注意指示器的用法(自己看参考资料,说不清楚)

还有就是最后一位如果是字符的话可能检查不了,需要另外的手段检查

具体自己写测试程序就知道了

ps:检测一个字符是否全部是数字,情况很复杂的,楼上的好像没有考虑空格吧,而且有可能非法字符,乱七八糟混在一起,一个一个字符拆出来判断很麻烦滴

ILE RPG Reference.pdf  里的例子

论坛徽章:
0
7 [报告]
发表于 2010-03-03 22:01 |只看该作者
回复 5# passthru

本帖最后由 passthru 于 2010-03-03 17:57 编辑


d c@String          s      1000     varying
d c@String2        s      1000     varying
d lo                     c                   'abcdefghijklmnopqrstuvwxyz'
d hi                     c                   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

     .....
     c@String2 = c@String ;
     //小写变大写
     c@String2 = %Xlate(lo:hi:c@String2);
     if c@String <> c@String2 ;
           //字段有字符
     else ;
          //大写变小写
        c@String2 = %Xlate(hi:lo:c@String2);
            if c@String <> c@String2 ;
                  //字段有字符
        else ;
                 //都是数字组成的字符串
        endif ;
     endif ;
如果字符串里还有其他的字符怎么办??如, .  @ 等等之类的特俗字符。

论坛徽章:
0
8 [报告]
发表于 2010-03-04 08:37 |只看该作者
TESTN就可以
注意指示器位置
自己试一下就明白了

论坛徽章:
0
9 [报告]
发表于 2010-03-04 08:51 |只看该作者
本帖最后由 passthru 于 2010-03-07 05:53 编辑
回复  passthru

本帖最后由 passthru 于 2010-03-03 17:57 编辑


d c@String          s      1000 ...
wyd1003 发表于 2010-03-03 22:01


    小数点不算错误字符。

    你这个问题其实是两个问题:1)数字与字符混合的判别;2)数字与其它字符的判别。
如果你想简单有效把这两类数据都做一类判别操作,可以这样做:

d c@Strint                      s                        1000         varying
d s@n                            s                            32s12    inz
    ......
      monitor ;
           s@n = %dec(c@String:32:12) ;
         on-error ;
           //非数字字符串
    endmon ;
   .....

论坛徽章:
0
10 [报告]
发表于 2010-03-09 13:33 |只看该作者
%TESTN
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP