perl的問題(分割及$#)~20點

2010-10-22 3:34 am
我用perl 中的split切割字串,發現切割完,無法將他一行一行輸出,他只會黏在一起,例如:a a a a->aaaa,可是我希望出現 一排直得的a。
我的程式碼
open(IN,"test1.txt");
open(OUT,">123.txt");
chomp(@x=<IN>);
for($i=0;$i<10;$i++)
{
$a=@x[$i] ;
@y=split(/ /,$a);
print OUT @y,"\n" ;

}


另外我到網路上時發現有人用
$i=0;
while ($#total != -1){
print "$i ";
print shift @total;
print "\n";
$i++;
}
想知道$#是甚麼意思
更新1:

補充第一題: 他輸出aaaa 而我要 a a a a

回答 (2)

2010-10-23 9:42 pm
✔ 最佳答案
1、
因為您是直接將整個陣列的內容一次印出來(print @y),
中間並沒有插入其它的分隔字元,
所以就會連成一串,
只要再加個 join 就解決了。


以下存成「split_01.pl」或到這裡下載完整的程式碼:http://www.fileserve.com/list/jPjsKRq

#------------------------------------
# split_01.pl
#------------------------------------

open(IN,"test1.txt");
open(OUT,">123.txt");
chomp(@x= );
for($i=0; $i<@x; $i++) #也可用 for($i=0; $i {
$a=@x[$i] ;
@y=split(/ /,$a);
print OUT join("\n", @y), "\n";
}
close(OUT);
close(IN);

2、
$# 代表是陣列元素個數-1,或者陣列的最後一個元素的索引值。
而且這是舊版本的寫法,在 Perl 5.10 以後將不再支援。

要取得陣列元素個數另外可使用:
scalar(@x); #轉換陣列所得到的純量變數代表的就是它的個數

$a = @x;

請參考:http://perldoc.perl.org/perlvar.html
2010-10-22 5:16 pm
#!/usr/bin/perl -w

open( IN, "test1.txt" );
open( OUT, ">123.txt" );
chomp( $test= );
@chars = split(//, $test);

for ( $i = 0; $i < length($test); $i++ ) {
print OUT $chars[$i];
print OUT "\\n";
}
close( OUT );
close( IN );


收錄日期: 2021-04-30 15:15:01
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20101021000016KK05633

檢視 Wayback Machine 備份