作者jacobliu (DDDDD)
看板Perl
标题[问题] 资料排序
时间Wed Feb 1 17:41:10 2012
目前我有一笔资料,资料格式与内容如下,想要根据/I0/MXX来做排序
(XX代表数字)
/I0/M48 region: 1
/I0/M1 region: 2
/I0/M0 region: 2
/I0/M18 region: 1
/I0/M48 region: 1
/I0/M1 region: 2
/I0/M0 region: 2
/I0/M18 region: 1
/I0/M48 region: 1
/I0/M1 region: 2
/I0/M0 region: 2
/I0/M18 region: 1
/I0/M48 region: 1
/I0/M1 region: 2
/I0/M0 region: 2
/I0/M18 region: 2
/I0/M48 region: 1
/I0/M1 region: 2
/I0/M0 region: 2
/I0/M18 region: 1
参考板上资料排序的写法,加上自己的乱改,程式如下
########################################################################
#!/usr/bin/perl -w
open( IN, "bias_if_sim.op" ) or die "Cannot open file\n";
while ( my @data = <IN> )
{
@data = map { substr $_ ,1 }
sort
map { /\/(\w{1})\d{1}/; $1.$_ } @data;
open(OUT,">temp.test")or die "Cannot open!\n";
print OUT "@data";
close (OUT);
}
close (IN);
########################################################################
但是在执行时会出现
Use of uninitialized value in concatenation (.) or string at test.pl line 9
, <IN> line 24.
得到的排序完资料为
/I0/M0 region: 2
/I0/M0 region: 2
/I0/M0 region: 2
/I0/M0 region: 2
/I0/M0 region: 2
/I0/M1 region: 2
/I0/M1 region: 2
/I0/M1 region: 2
/I0/M1 region: 2
/I0/M1 region: 2
/I0/M18 region: 1
/I0/M18 region: 1
/I0/M18 region: 1
/I0/M18 region: 1
/I0/M18 region: 2
/I0/M48 region: 1
/I0/M48 region: 1
/I0/M48 region: 1
/I0/M48 region: 1
/I0/M48 region: 1
虽然顺利排好,但是有以下几个问题,想请教板上的先进:
1.要如何修改程式,让Use of uninitialized value...不要出现?
2.要如何修改程式,让排序完的资料第一列不要出现空格?
3.我想要相同/I0/MXX间用空白列隔开,该如何修改程式?
谢谢大家
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.248.111.135
2F:→ jacobliu:谢谢楼上的程式码 02/02 10:14