Am Dienstag, 17. Februar 2004 22:57 schrieb Joel HATSCH:
> On Tue, 17 Feb 2004 18:48:40 +0100
>
> Stefan Blechschmidt <[EMAIL PROTECTED]> wrote:
> > dann ist der Weg zu perl nicht weit :-)
> >
> > ,---[ csvtostuct.pl ] ---------------------
> >
> > |  #!/usr/bin/perl
> > |  open (FH, "<$ARGV[0]");
> > |  while (<FH>) {
> > |     chomp;
> > |     @inhalt = split (';', $_);
> > |     system("mkdir $inhalt[0]");
> > |     system("echo \"$inhalt[2]\" > $inhalt[0]/$inhalt[1]");
> > |  }
> > |  close(FH);
> >
> > `-----------------------------------
>
> fuktionniert prinzipiell, aber wenn ich mich richtig erinnere
> werden bei deinen 2 system()-Aufrufe jeweils shell-child-Prozesse
> gestartet. kostet Zeit.
> bei ein Paar Zeilen kein Problem, bei viele viele Aufrufe tötlich
> langsam !
> bei dem Shell-Skript hast Du eben das Problem nicht.
>
> Wie gesagt, frei aus dem Gedächtnis raus

Das ist ein tödlicher Irrtum ;-) In einem Shell-Script werden 
natürlich auch für _jeden_ Befehl, der nicht Shell-Builtin ist, 
Childs gestartet, also im Allgemeinen deutlich mehr als in 
Perl-Programmen (Du musst ja die Zeile parsen - z. B. per cut).

Prinzipiell hast Du mit dem Einwand recht, aber Perl wäre nicht 
Perl, wenn man das nicht besser lösen könnte ;-)

#!/usr/bin/perl
open (FH, "<$ARGV[0]") or die $!;
while (<FH>) {
    chomp;
    @inhalt = split /;/;
    mkdir $inhalt[0];
    open (OUT, ">" . $inhalt[0] . "/" . $inhalt[1]) or die $!;
    print OUT $inhalt[2], "\n";
    close OUT;
 }
close(FH);

Jan


--
Haeufig gestellte Fragen und Antworten (FAQ):
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)

Reply via email to