Thread mehre dateien in eine kopieren (15 answers)
Opened by mark05 at 2011-03-21 11:00

FIFO
 2011-03-22 13:25
#146771 #146771
User since
2005-06-01
469 Artikel
BenutzerIn

user image
2011-03-22T10:59:56 mark05
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use IO::File;
my $fh = IO::File->new();

my @files = qw(001.ts 002,ts 003.ts);



open $fh , '>' , 'completefile.ts' or die $!;
binmode $fh,':raw';

foreach my $f (@files) {


open my $read , '<' , $f or die $!;
binmode $read,':raw',

print {$fh} length $read;

while (<$read>) {
 print {$fh} $_;
}
close $read or die $!;
}
close $fh or die $!;

waehre das ungerfaehr richtig ... ist ungetestet .

holger


1. Warum der Formulierungsumweg über IO::File? Aus der IO::File-Doku:
"If IO::File::open receives a Perl mode string (">", "+<", etc.) [...], it uses the basic Perl open operator"
2. length($read) ist sinnfrei, es gibt nicht die Dateigröße zurück.
3. Das readline über <$read> funktioniert bei binmode-Files nicht wie gedacht, hier musst Du read() verwenden.
Mein zweites Beispiel macht genau, was Du wolltest, wo ist der Haken? Selbst eine C-Version ist nicht viel performanter, abgesehen davon sind Deine Kopierjobs ja nicht zeitkritisch.
4. Gewöhn Dir Doch eine sinnvolle Einrückung an, dann kann man Deinen Code besser lesen. Auch die 'Perl'-Codetags sind hilfreich.

btw: Das ':raw' beim binmode kannst Du weglassen, oder (ab Perl 5.8) gleich ganz ins open-Statement packen.

Gruß FIFO

Edit: Da ist noch mehr Murks: print {$fh} $_; ???, Komma im Dateinamen ...
Vielleicht doch mal mit den basics anfangen, bevor man sich an IO-Internals macht ;)

Editiert von FIFO: typo etc.
Last edited: 2011-03-22 14:31:45 +0100 (CET)
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it? -- Brian Kernighan: "The Elements of Programming Style"

View full thread mehre dateien in eine kopieren