Helene: Script für Dateiausgabe

Hallo Jungs (und Mädels ? ),

ich brauche ein Script das mit für jede Zeile einer Eingabedatei  eine neue Datei, mit neuem Namen ausgibt.

Beispiel:

Datei:  link.csv
         Inhalt:
         Zeile 1 " http://www.wurstbrot.de/  "
   Zeile 2 " http://www.leberwurst.de/ "

soll ausgegeben werden als

neue1.html
         Zeile 1 " http://www.wurstbrot.de/  "
      
         und

neue2.html
         Zeile 2 " http://www.leberwurst.de/ "

usw.

Ich habe mich schon mal an einem Script versucht, das gibt auch die Datei aus, nur leider weiß ich nicht wie ich immer nach jeder Zeile eine neue Datei mit anderm Namen erstelle.

#!/usr/local/bin/perl5

$LINK = "link.csv"; # Links
$NEUE = "neue.html"; # Sortierte Links

@Zeilen = ("");
open(LINK, "<$LINK") die "Datei "+$LINK+" konnte nicht geöffnet werden\n";
while(<LINK>)
{
push(@Zeilen, $_);
}

close(LINK);

@Zeilen = sort(@Zeilen);

open(NEUE, ">$NEUE") die "Datei "+$NEUE+" konnte nicht angelegt werden\n";

for(@Zeilen)
{
print NEUE $_;
}

close(NEUE);

Für eure Hilfe wäre ich sehr dankbar !

Liebe Grüße Helene

  1. Servus

    das ist etwas krud was du da machst.
    in einer datei steht eine liste von links und für jede zeile soll eine neu datei mit jeweils einem link erstellt werden ?
    Richtig ?

    open(LINK, "<$LINK") die "Datei "+$LINK+" konnte nicht geöffnet werden\n";

    open(LINK, "$LINK") die "Datei $LINK konnte nicht geöffnet werden\n";
    @ZEILEN = <LINK>;

    zum lesen braucht man kein < und innerhalb doppleter anführungszeichen werden skalare übersetzt.
    <FILE> liest die ganze datei im arraykontext

    Eigentlich wolltest du für jede zeile eine neue datei, oder ?

    $name = 0; # Z.B.
    for( sort @Zeilen)
    {
    open NEUE, ">neue$name.html" or die "kann neue$name.html nicht öffnen";
    print NEUE $_;
    close NEUE;
    $name++;
    }

    Meinst du sowas ?

    Struppi.

    1. Das ist super !

      Vielen Dank das funktioniert einwandfrei !

      Grüße und Küsse

      Helene

  2. Hi,

    nur leider weiß ich nicht wie ich immer nach jeder Zeile eine neue Datei mit anderm Namen erstelle.

    Genauso, wie nur *eine* Datei - aber innerhalb der entsprechenden Schleife.

    open(NEUE, ">$NEUE") die "Datei "+$NEUE+" konnte nicht angelegt werden\n";
    for(@Zeilen)
    {
    print NEUE $_;
    }
    close(NEUE);

    Wenn Du open() und close() in die Schleife hinein verschiebst und dabei jeweils den Wert für $NEUE passend berechnest, dann hast Du gewonnen.

    Elegant wäre es, wenn Du mit
       for my $diese_url (@Zeilen)
    den jeweiligen Inhalt einer Eingabezeile einer lokalen Variablen zuweisen würdest, denn $_ geht Dir während der anderen Operationen innerhalb der Schleife kaputt.

    mfG - Michael