免费注册 查看新帖 |

Chinaunix

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

求教格式检查的方法 [复制链接]

论坛徽章:
0
发表于 2009-05-06 17:42 |显示全部楼层
10可用积分
请教各位大虾,现在有如下类型的数据

  1. 70  ABC123******DEF456******
  2. 70  AB12********DE4*********
复制代码

其中“*”应该是空格,为了醒目,现在用“*”来替代。
偶现在要做的是保证数据第2个field( ABC123 )是从第五个字符位开始到16位;
                      第3个field( DEF456 )是从第17个字符位开始到第28位。
各个field的字符串中间没有空格,空格就是用分隔和补充位的。

然后,假如数据移位了,
少了空格:

  1. 70  ABC123******DEF456******
  2. 70  AB12*******DE4*********
复制代码

多了空格:

  1. 70  ABC123******DEF456******
  2. 70  AB12********DE4**********
复制代码

使用什么方法可以检查出来,请大家不吝赐教,谢谢哈。
或者,可以用XML来做检查吗?怎么做呢?^_^

最佳答案

查看完整内容

就喜欢给分的

论坛徽章:
0
发表于 2009-05-06 17:42 |显示全部楼层
就喜欢给分的


  1. while(<DATA>){
  2.   print 'problem 1' if substr($_, 4, 11) =~ m/\s[^\s]+\s*$/;
  3.   print 'problem 2' if substr($_, 16, 11) =~ m/^\s/;
  4. }
复制代码

论坛徽章:
0
发表于 2009-05-06 18:06 |显示全部楼层

回复 #2 DQP 的帖子

难道你就不怕我不识货?
呵呵,下班了,明天我再试试效果。
明天通过就马上给分。

论坛徽章:
0
发表于 2009-05-06 20:53 |显示全部楼层
有检查的功夫,你重新格式化不行么

论坛徽章:
0
发表于 2009-05-07 10:15 |显示全部楼层

回复 #4 cobrawgl 的帖子

哦,关键是数据是本身存在的,如果格式不对,我读的数据就不对,怎么再格式化啊?而且我不是需要格式化的数据,我只是需要保证读出的数据是正确的。所以读数据之前的一步是我必须先确认数据的格式正确,然后再读。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2009-05-07 10:25 |显示全部楼层
原帖由 不死草 于 2009-5-7 10:15 发表
哦,关键是数据是本身存在的,如果格式不对,我读的数据就不对,怎么再格式化啊?而且我不是需要格式化的数据,我只是需要保证读出的数据是正确的。所以读数据之前的一步是我必须先确认数据的格式正确,然后再读。

我觉得你读数据的代码写的有问题,对格式太挑剔了。

论坛徽章:
0
发表于 2009-05-07 10:34 |显示全部楼层

回复 #2 DQP 的帖子

你的方法不行哦,解决不了第二种错误情况。

论坛徽章:
0
发表于 2009-05-07 10:37 |显示全部楼层
如果字段中没有空格那么 按空格分不好么.

这时候就体现出用csv YAML 或 XML的好处了。 定义的更明确。 等易用。
更重要的是有一大堆现成的工具可以利用。

论坛徽章:
0
发表于 2009-05-07 10:45 |显示全部楼层

回复 #6 MMMIX 的帖子

哦,算是读数据的代码的问题吧,但是我不可能现在去修改所有的程序的读读数据的方式,再说这个也是对数据本身的要求。这只是一个常规的读数据,并且需要保证数据的正确性的做法哦。你想想看哈,假如我现在需要读“123456**adb5689**”中的前面的字段“123456“这一部分,而我给这部分数据预留的数据长度是8位,但是做数据的人不小心输入错误,输入成了“***123456”,那么我使用按位读取的数据只能截取读到“***12345”,格式处理后我也只能得到“12345”,而不是我本来要得到的“123456”啦而且后面那部分的数据本身应该是读到“adb5689”但是结果会变成“6adb5689”。

论坛徽章:
0
发表于 2009-05-07 10:48 |显示全部楼层

回复 #8 DQP 的帖子

知道XML好也没用啊,我们现在所用的体制就是这么用的,我只能补漏洞,而不能马上全部更换全部的东西,大工程啊。我们最老的Program用AI倒是可以完全控制格式,可惜我不会,而且现在也不用那玩意儿啦。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP