作者salagadoola (南瓜)
看板perl
标题Re: [问题] 抓字元至一维阵列或二维阵列!?
时间Wed Aug 8 12:12:46 2007
※ 引述《pttask (批踢踢.问.XD)》之铭言:
: ※ 引述《LiloHuang (相见不如怀念)》之铭言:
: : my @array = split(//,"137248 59 6 ");
: : print $array[7];
: (以下空白字元用^做表示)
: 我的data可能从文字档读进来就是以下状态
: acg
: bdh
: ei
: f
: 这样的型式
: 我试过如果split之後
: 我的$array[0]会是ab^^
: $array[1]会是cdef
: $arrat[2]会是ghi^
: 但是我所期望的会是我的$array[0]是a ...
: $array[1]是c ...
: :
: :
: $array[6]是空白字元 ...
: 这该怎麽做呢?
: 我记得是否可以把换行的资料全部转为一行呢?
这里要的是像 s/\n//g; 这种东西吗
my $str = <<HERE;
acg
bdh
ei
f
HERE
$str =~ s/\n//g;
my @array = split //, $str;
print $array[6], "\n";
: : my $str ='137
: : 248
: : 59
: : 6 ';
: : for($i=0;$i<3;$i++) {
: : for($j=$i;$j<=12+$i;$j+=4) {
: : print substr($str,$j,1);
: : }
: : print $/;
: : }
: 同样的data
: 我希望我的$array[0][0]是a
: $array[0][1]是c
: :
: :
: $array[1][2]是h
: $array[2][0]是空白字元
: 这样的状况
: 这样是否是可行可为的呢?
: 麻烦前辈指点 :~)
my $str = <<HERE;
acg
bdh
ei
f
HERE
my @array;
foreach my $line ( split /\n/, $str ) {
my @arr = split //, $line;
push @array, \@arr;
}
## 印出「a-c-h-」
print join("-", $array[0][0], $array[0][1], $array[1][2], $array[2][0]),"\n";
另外关於横直行互转,如果可以安装模组的话会好写不少,
我个人是习惯用 CPAN 上的 List::MoreUtils 这个模组。
#!/usr/bin/perl -w
use strict;
use List::MoreUtils qw(each_arrayref);
my $str = <<HERE;
acg
bdh
ei
f
HERE
my @array;
foreach my $line ( split /\n/, $str ) {
my @arr = split //, $line;
push @array, \@arr;
}
## 印出「a-c-h-」
print join("-", $array[0][0], $array[0][1], $array[1][2], $array[2][0]),"\n";
my @array2;
my $ea = each_arrayref(@array);
while ( my @arr = $ea->() ) { push @array2, \@arr }
@array = @array2;
## 印出「a-b-e-g」
print join("-", $array[0][0], $array[0][1], $array[1][2], $array[2][0]),"\n";
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.23.102