求程序,怎么用perl在3级结构中,判断小区状态? 谢谢
时间:2010-08-29
来源:互联网
BCF-0001 BTSPLUS-M U WO
09238 11451 BTS-0001 U WO
DAXING1 RF/-
EDGE TRX-001 U WO
EDGE TRX-002 U WO
09238 11452 BTS-0002 U WO
DAXING2 RF/-
EDGE TRX-003 U BL-TRX
EDGE TRX-004 U WO
EDGE TRX-005 U WO
09238 11453 BTS-0003 U WO
DAXING3 RF/-
EDGE TRX-006 U BL-TRX
以上的一组数据有3级结构,第1级,关键字是"BCF-",它的状态是同行的“U WO”;第2级,关键字是"BTS-",它的状态是同行的“U WO”;第3级,关键字是"TRX-",它的状态是同行的“U WO”.
每个第一级(BCF-)下有最少1个,最多4个第二级(BTS-),每个第二级下最少1个,最多10个第三级(TRX-)
现在想根据这3级的状态来输出第二级(BTS-)的状态。如果第一级是“U WO" 并且 第二级是"U WO" 并且第三级至少有1个TRX-是“U WO”,则第二级(BTS-) (用每个BTS-之前的5位数字表示)的最后状态为ok,否则为bad。(循环判断,文件中有很多组这种结构)
最后想得到如下结构
11451 ok
11452 ok
11453 bad
09238 11451 BTS-0001 U WO
DAXING1 RF/-
EDGE TRX-001 U WO
EDGE TRX-002 U WO
09238 11452 BTS-0002 U WO
DAXING2 RF/-
EDGE TRX-003 U BL-TRX
EDGE TRX-004 U WO
EDGE TRX-005 U WO
09238 11453 BTS-0003 U WO
DAXING3 RF/-
EDGE TRX-006 U BL-TRX
以上的一组数据有3级结构,第1级,关键字是"BCF-",它的状态是同行的“U WO”;第2级,关键字是"BTS-",它的状态是同行的“U WO”;第3级,关键字是"TRX-",它的状态是同行的“U WO”.
每个第一级(BCF-)下有最少1个,最多4个第二级(BTS-),每个第二级下最少1个,最多10个第三级(TRX-)
现在想根据这3级的状态来输出第二级(BTS-)的状态。如果第一级是“U WO" 并且 第二级是"U WO" 并且第三级至少有1个TRX-是“U WO”,则第二级(BTS-) (用每个BTS-之前的5位数字表示)的最后状态为ok,否则为bad。(循环判断,文件中有很多组这种结构)
最后想得到如下结构
11451 ok
11452 ok
11453 bad
作者: blackantt 发布时间: 2010-08-29
用很笨的方法实现了,唯一的优点是如果数据量很大,不会耗内存。仅供参考
复制代码
如果使用范围操作符,然后正则判断一下,应该能写出更简洁高效的代码。暂时没掌握,等待高手出招。
- #!/usr/bin/perl
-
- use strict;
- use warnings;
-
- my ($c1,$c2,$c3,$lable);
- while (<DATA>) {
- if (/BCF-/i) {
- $c1 = (/U WO/i)?1:0;
- }
- elsif (/.*(\d{5}).*?BTS-/i) {
- if ($c1 && $c2 && $c3 >= 1) { print "$lable\tOK!\n"; }
- elsif ($lable) { print "$lable\tBAD!\n"; }
- $lable = $1;
- $c3 = 0;
- $c2 = (/U WO/i)?1:0;
- }
- elsif (/TRX-.*?U WO/i) { $c3++; }
- }
- if ($c1 && $c2 && $c3 >= 1) { print "$lable\tOK!\n"; }
- elsif ($lable) { print "$lable\tBAD!\n"; }
-
- <STDIN>;
-
- __DATA__
-
- BCF-0001 BTSPLUS-M U WO
- 09238 11451 BTS-0001 U WO
- DAXING1 RF/-
- EDGE TRX-001 U WO
- EDGE TRX-002 U WO
- 09238 11452 BTS-0002 U WO
- DAXING2 RF/-
- EDGE TRX-003 U BL-TRX
- EDGE TRX-004 U W O
- EDGE TRX-005 U W O
- 09238 11453 BTS-0003 U WO
- DAXING3 RF/-
- EDGE TRX-006 U BL-TRX
- BCF-0002 BTSPLUS-M U W O
- 09239 11454 BTS-0001 U WO
- DAXING1 RF/-
- EDGE TRX-001 U WO
- EDGE TRX-002 U WO
- 09239 11455 BTS-0002 U WO
- DAXING2 RF/-
- EDGE TRX-003 U BL-TRX
- EDGE TRX-004 U WO
- EDGE TRX-005 U WO
- 09239 11456 BTS-0003 U WO
- DAXING3 RF/-
- EDGE TRX-006 U BL-TRX
- BCF-0003 BTSPLUS-M U WO
- 09237 11457 BTS-0001 U WO
- DAXING1 RF/-
- EDGE TRX-001 U WO
- EDGE TRX-002 U WO
- 09237 11458 BTS-0002 U WO
- DAXING2 RF/-
- EDGE TRX-003 U BL-TRX
- EDGE TRX-004 U WO
- EDGE TRX-005 U WO
- 09237 11459 BTS-0003 U WO
- DAXING3 RF/-
- EDGE TRX-006 U BL-TRX
作者: iamlimeng 发布时间: 2010-08-29
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28