Re: [問題] 讀取檔案的內容
use Data::Dumper ;
my %count_of_si ; #統計si出現的次數
my %p_of_si ; #統計si為0的次數
my $raw_read_in ;
while($raw_read_in = <>){
#樣式比對 把該行內首先出現的,被space or tab 分隔的兩組數字放入list內
#樣式最後的x代表空格會被忽略
my @filtered
= ( $raw_read_in =~ m/^ [\s\t]* (\d+) [\s\t]+ (\d+) /x ) ;
#如果比對失敗 @filtered的內容為 undef, 進入下輪迴圈
next if ( !defined $filtered[0] ) ;
#首次執行到這裡時@filtered內為(0,1) , $count_of_si{1} == undef,
#執行完這一行 $count_of_si{1}==1
$count_of_si{ $filtered[1] }++ ;
#類推
$p_of_si{ $filtered[1] }++ if $filtered[0] == 0 ;
}
print Dumper( @count_of_si{ sort keys %count_of_si } ) ;
print "\n" ;
print Dumper( @p_of_si{ sort keys %p_of_si} ) ;
__END__
順便說一下, eq, lt, gt是拿來作字串比對用的
==, <, > 才是拿來作數字比對用的
有不恰當的地方還請指正喔~
※ 引述《hws110 ( only you )》之銘言:
: 大家好
: 小弟最近在用perl去讀取檔案並取值
: 檔案的內容是這樣
: 0 1
: 0 2
: 0 3
: 0 4
: 1 1
: 0 2
: 2 3
: 1 4
: 0 1
: 1 2
: 右邊的1、2、3、4是代號
: 左邊的數字則是得到的資料
: 我的程式是將1、2、3、4的資料統計出來
: 例如說0有幾個,1有幾個,2有幾個這樣
: 我的寫法如下
: -----------------
: if ($si eq 1)
: {
: $si_1++;
: if ($sb eq 0)
: { $si1_p++; }
: }
: if ($si eq 2)
: {
: $si_2++;
: if ($sb eq 0)
: { $si2_p++; }
: }
: if ($si eq 3)
: {
: $si_3++;
: if ($sb eq 0)
: { $si3_p++; }
: }
: if ($si eq 4)
: {
: $si_4++;
: if ($sb eq 0)
: { $si4_p++; }
: }
: -----------------------
: $si表示右邊的代號1、2、3、4
: $sb表示左邊的資料
: 當$si=1時,代號1的數量+1,如果$sb=0,$si1_p就+1,
: 以此來計算共有幾個代號1,並其中有幾個0
: 代號2、3、4以此類推
: 但是現在有個問題
: 就是檔案內容會有變動
: 右邊那列有可能會是代號1到2或者代號1到8的變化
: 我想讓代號1~2或者1~8的變化都可以通用
: 有沒有什麼寫法,可以不管代號有幾個
: 都可以達到我的需求呢?
: 還請大家不吝指教
: 感謝~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 36.234.222.61
推
11/02 21:06, , 1F
11/02 21:06, 1F
討論串 (同標題文章)
Perl 近期熱門文章
PTT數位生活區 即時熱門文章