2015-04-14 113 views
-1

我有一個CSV輸入文件(input.csv)用數字看起來像:Perl腳本編輯CSV文件

1.34,7.56,4.57,6.7,4.9, 3.4,5.7,5.4,........ 

我想編輯的文件,插入數字和字段之間用冒號喜歡;

1:1.34 2:7.56 3:4.57 4:6.7 5:4.9 6:3.4 7:5.7 8:5.4.......... 

這裏是我的腳本:

#!/usr/bin/perl 
use strict; 
use warnings; 

#Opening the CSV file 

my $csv_file = "input.csv"; 

open (my $fh, "<", $csv_file) or die "Cannot open '$csv_file': $! "; 

#parsing 

while (my $lines = <$fh>) { 

    chomp $lines; 

    my @features = split (',', $lines); 
    print "$lines \n"; 
} 

#inserting numbers 

for (my $x = 1; $x <= 1371; $x++){ 
    print $x . ":" . $features[$x-1]; 
} 

我得到一個錯誤: 全局符號 「@features」 需要在script_T.pl行明確包名23

+0

這將幫助大家讀你的代碼如果你更整齊地佈置它。這次我爲你做了。未來,請嘗試發佈更好的東西 – Borodin

+0

嗨鮑羅丁,我的道歉,剛剛學習Perl,我沒有什麼編程經驗,所以我知道腳本生鏽,但我會改善。謝謝 – milcah

回答

0

之前定義@features while循環:

my @features; 
while (my $lines = <$fh>) { 
    chomp $lines; 
    @features = split (',', $lines); 
    print "$lines \n"; 

    for(my $x=1; $x <=1371 ; $x++){ 
     print $x .":".$features[$x-1]; 
    } 
} 
+0

謝謝,,,,我在perl中很綠 – milcah

1

這可以整齊地splitmapjoin,這樣來完成。

#!/usr/bin/perl 
use strict; 
use warnings; 

while (<>) { 
    my @fields = split /\s*,\s*/; 
    print join ' ', map "$_:$fields[$_-1]", 1 .. @fields; 
} 

輸出

1:1.34 2:7.56 3:4.57 4:6.7 5:4.9 6:3.4 7:5.7 8:5.4 9:........ 

程序期望的路徑,輸入文件作爲命令行參數,這樣

./count_fields.pl input.csv