2014-02-20 27 views
0

我導出大量的csv文件(> 2000),我想將它們合併到一個大文件中,但我也需要重新編號這些節點。下面的例子,使其理解合併csv文件並在Perl中重新編號

Export01.csv

Node Number, X [ m ], Y [ m ], Z [ m ], massflow [ kg/s ] 

0, 9.65997651e-02, 2.19999515e-02, -9.62853723e-04 

1, 9.65997726e-02, 2.20612120e-02, -9.62852850e-04 

2, 9.65411291e-02, 2.20607035e-02, -9.81093850e-04 

3, 9.65427309e-02, 2.19999403e-02, -9.80595709e-04 

4, 9.65997800e-02, 2.21210755e-02, -9.62849939e-04 

5, 9.65387151e-02, 2.21203361e-02, -9.81845544e-04 

[Faces] 

0, 1, 2, 3 

1, 4, 5, 2 

Export02.csv

Node Number, X [ m ], Y [ m ], Z [ m ], massflow [ kg/s ] 

0, 1.01048574e-01, 1.68000087e-02, 5.73535908e-05 

1, 1.01048581e-01, 1.68612748e-02, 5.73558682e-05 

2, 1.00987844e-01, 1.68607645e-02, 4.80981507e-05 

3, 1.00989506e-01, 1.67999957e-02, 4.83512231e-05 

4, 1.01048574e-01, 1.69211421e-02, 5.73557772e-05 

5, 1.00985348e-01, 1.69204008e-02, 4.77131580e-05 

6, 1.01048581e-01, 1.69791635e-02, 5.73566977e-05 

7, 1.00984685e-01, 1.69786215e-02, 4.76094247e-05 

[Faces] 

0, 1, 2, 3 

1, 4, 5, 2 

4, 6, 7, 5 

Export02.csv的節點數量必須啓動其中Export01.csv的最後一個節點結束。所以節點0Export02.csv變成節點6。這也是要做的臉。 Export02.csv 0,1,2,3中的第一張臉也將變爲6, 7, 8, 9。所以新文件將是:

Node Number, X [ m ], Y [ m ], Z [ m ], massflow [ kg/s ] 

0, 9.65997651e-02, 2.19999515e-02, -9.62853723e-04 

1, 9.65997726e-02, 2.20612120e-02, -9.62852850e-04 

2, 9.65411291e-02, 2.20607035e-02, -9.81093850e-04 

3, 9.65427309e-02, 2.19999403e-02, -9.80595709e-04 

4, 9.65997800e-02, 2.21210755e-02, -9.62849939e-04 

5, 9.65387151e-02, 2.21203361e-02, -9.81845544e-04 

6, 1.01048574e-01, 1.68000087e-02, 5.73535908e-05 

7, 1.01048581e-01, 1.68612748e-02, 5.73558682e-05 

8, 1.00987844e-01, 1.68607645e-02, 4.80981507e-05 

9, 1.00989506e-01, 1.67999957e-02, 4.83512231e-05 

10, 1.01048574e-01, 1.69211421e-02, 5.73557772e-05 

11, 1.00985348e-01, 1.69204008e-02, 4.77131580e-05 

12, 1.01048581e-01, 1.69791635e-02, 5.73566977e-05 

13, 1.00984685e-01, 1.69786215e-02, 4.76094247e-05 

[Faces] 

0, 1, 2, 3 

1, 4, 5, 2 

6, 7, 8, 9 

7, 10, 11, 8 

10, 12, 13, 11 

什麼將是最有效的方式來編程?

回答

0

試試這個。

#/usr/bin/perl -w 

use strict; 
use warnings; 

my $i = 0; 
my $filename = "final.csv"; # created file name 

open my $final_fh, ">>", $filename; 

while (defined(my $file = glob '*.csv')) { # csv files in the same dir of the script 
    open my $fh, "<", $file; # lexical file handles, automatic error handling 

    while (defined(my $line = <$fh>)) { 
    my @parts = split(/,\s*/, $line); 
    shift @parts; #remove index 

    print $final_fh "$i, " . join(", ", @parts) . "\n"; 
    $i++; 
    } 
    close $fh; 
} 
close $final_fh; 
+0

非常感謝。我會嘗試。 – user3331955

+0

moin moin ...我沒有得到final.csv。我想我做錯了 – user3331955

+0

好吧,現在,我得到最終的.csv,但結構不適合 – user3331955