作者frank1983 (What?)
看板Perl
標題Re: [問題] 檔案行列互換
時間Sat Nov 21 04:02:08 2009
這樣子寫如何:)
(假設記憶體夠大)
版本一:
sub {
for my $i (0..$#{$_[0]}) {
print FHO qq($_[0][$i] @{[map { "$_:$_[$_][$i]" } 1..$#_]}\n);
}
}->(map { chomp; [ split /\s+/ ] } <FHD>);
版本二:
sub {
for ( ; $_[0] =~ /(\d+)\s*/g; print "\n") {
print FHO "$1";
$_[$_] =~ /(\d+(?:\.\d+)?)\s*/g && print FHO " $_:$1" for 1..$#_;
}
}->(<FHD>);
※ 引述《sonymezo (小緣)》之銘言:
: 我有一個檔案train.txt
: 檔案格式如下
: 0 0 0 1 1 1
: 852.98 47.07 38.78 33.68 33.26 28.48
: 98.19 14.53 14.47 14.54 15.08 12.44
: 149.72 170.97 170.44 327.91 43.15 407.72
: 35.13 29.56 35.88 81.15 27.75 50.74
: 41.7 43.22 30.03 76.04 37.33 63.91
: .
: .
: .
: 我希望轉成
: 0 1:852.98 2:98.19 3:149.72
: 0 1:47.07 2:14.53 3:170.97
: 0 1:38.78 2:14.47 3:170.44 . . .
: 1 1:33.68 2:14.54 3:327.91
: 1 1:33.26 2:15.08 3:43.15
: 1 1:28.48 2:12.44 3:407.72
: 並寫入bbb.txt
: 我得程式碼如下
: #!/usr/bin/env perl
: $file = "/home/ed/train.txt";
: $out="/home/ed/bbb.txt";
: open(FHD,"$file") || die "Can't open $file!\n";
: open(FHO,">$out") || die "Can't open $file!\n";
: while ($line=<FHD>) {
: chomp $line;
: $f1 = "$line";
: print FHO "$f1\n";
: }
: close(FHD);
: close(FHO);
: 每一次讀入檔案就是 0 0 0 1 1 1
: 852.98 47.07 38.78 33.68 33.26 28.48
: .
: .
: .
: 請問一下版上大大我需要如何改程式讓他達成我的需求?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.130.207.6
※ 編輯: frank1983 來自: 220.130.207.6 (11/21 04:07)
1F:推 jjt:這樣寫是write only code...新手看不懂也不會改吧 11/21 04:30
2F:→ jjt:如果他想要改某個功能的話 那不又要再上來問一次XD 11/21 04:36
※ 編輯: frank1983 來自: 220.130.207.6 (11/21 07:54)
※ 編輯: frank1983 來自: 220.130.207.6 (11/21 07:55)
3F:推 abliou:推,又學一招,語言果然還是要用過才會懂 11/21 11:02