Tobias Beck: Löschen einer bestimmten Zeile

Hallo, liebe Forumer/innen,

ich hab malwieder ein Problemchen. Ich möchte eine bestimmte
Zeile aus einer Textdatei löschen. Hier erstmal der Codeschnippsel:

@Zeile = "";
$Tester = 0;

open(LESEN, "< shop.txt");
        while (<LESEN>) {
                push(@Zeile,$_);
        }
        $ZeilenAnz = $.;
close(LESEN);

for ($i = $ZeilenAnz; $i > 0; $i--) {
        @Eintrag = split(/&trenn/, $Zeile[$i]);
        if ($Eintrag[0] =~ /&start/ and $Eintrag[2] =~ /$ID/) {

open(SCHREIBEN, "> shop.txt");
                    print SCHREIBEN $Zeile[0]...$Zeile[$i-1];
                    print SCHREIBEN $Zeile[$i+1]...$Zeile[$ZeilenAnz];
        close(SCHREIBEN);

print "Zeile $i <br>";
        print "ID: $ID <br>";
        print "Datei wurde geloescht!";
        print "<br><br><a href='$EintragUrl'>Zur Shopeingabe</a>";
        $Tester = 1;
        }
}

Es wird erst die Textdatei nach der ID durchsucht und dann soll die
Textdatei geöffnet werden und alle Zeilen reingeschrieben werden außer
die Zeile mit der ID. Ich glaub da liegt der Fehler weil ich mir mit
dem $Zeile[0]...$Zeile[$i-1]; und $Zeile[$i+1]...$Zeile[$ZeilenAnz];
nicht so sicher bin und in der Textdatei dann nach dem Ausführen
nur noch die Zeile nach der zu Löschenden steht.

Also Dankeschön

Ciao,
   Tobi

<img src="http://www383.l7.xodox.com/87ba30.gif" alt="Tobi`s Welt" style="cursor:hand;" onmouseup="window.location.href='http://www383.l7.xodox.com'" onmouseover="window.status='http://www.tobi-beck.de';return true;" onmouseout="window.status='';return true">

  1. Hi,

    ich hab malwieder ein Problemchen. Ich möchte eine bestimmte
    Zeile aus einer Textdatei löschen.

    im Common Gateway Interface ist keine Methode zum Bearbeiten von Dateien definiert.

    Oder... ach, Du meinst in Perl?

    open(LESEN, "< shop.txt");
            while (<LESEN>) {
                    push(@Zeile,$_);

    push(@Zeile,$_) if ($bedingung);

    }
            $ZeilenAnz = $.;

    $ZeilenAnz = scalar @Zeile;

    close(LESEN);

    Dein $bedingung mußt Du natürlich vorher finden. Übrigens bietet es sich der Les- und Wartbarkeit Deiner Scripts wegen an, sich an übliche Konventionen zu halten, wie z.B. Variablennamen nicht groß zu schreiben.

    for ($i = $ZeilenAnz; $i > 0; $i--) {
            @Eintrag = split(/&trenn/, $Zeile[$i]);
            if ($Eintrag[0] =~ /&start/ and $Eintrag[2] =~ /$ID/) {

    open(SCHREIBEN, "> shop.txt");

    Dir ist klar, daß Du die Datei hier gerade in einer for-Schleife stetig neu schreibst?

    Cheatah

    1. Hallo Cheatah,

      Oder... ach, Du meinst in Perl?

      ja natürlich Perl sorry...

      Übrigens bietet es sich der Les- und Wartbarkeit Deiner Scripts

      wegen an, sich an übliche Konventionen zu halten, wie z.B.
      Variablennamen nicht groß zu schreiben.

      OK ich werde mich bessern was die kleinschreibung anbetrifft, mach
      ich sonst noch schlimme Fehler?

      for ($i = $ZeilenAnz; $i > 0; $i--) {
              @Eintrag = split(/&trenn/, $Zeile[$i]);
              if ($Eintrag[0] =~ /&start/ and $Eintrag[2] =~ /$ID/) {

      open(SCHREIBEN, "> shop.txt");

      Dir ist klar, daß Du die Datei hier gerade in einer for-Schleife stetig neu schreibst?

      Ich glaub wir haben uns noch etwas missverstanden. $ID kommt in der
      ganzen txt Datei nur einmal vor, also wird dieser if Zweig nur
      einmal ausgeführt.
      Diesen Teil wollte ich eigendlich lassen weil ich damit auch gleich
      die Meldung (also ich meine mit print) an den Browser gebe.
      Kann mir jemand bitte sagen wie die Perl Syntax ist um die Zeilen 0 -
      Variable und variable + 1 bis letzte Zeile zu schreiben?

      print SCHREIBEN $Zeile[0]...$Zeile[$i-1];
      print SCHREIBEN $Zeile[$i+1]...$Zeile[$ZeilenAnz];

      ist ja anscheinend falsch.

      Danke

      Ciao,
         Tobi

      <img src="http://www383.l7.xodox.com/87ba30.gif" alt="Tobi`s Welt" style="cursor:hand;" onmouseup="window.location.href='http://www383.l7.xodox.com'" onmouseover="window.status='http://www.tobi-beck.de';return true;" onmouseout="window.status='';return true">

      1. Hi,

        Oder... ach, Du meinst in Perl?

        ja natürlich Perl sorry...

        ich hoffe, Dir ist der Unterschied klar :-)

        Übrigens bietet es sich der Les- und Wartbarkeit Deiner Scripts
        wegen an, sich an übliche Konventionen zu halten, wie z.B.
        Variablennamen nicht groß zu schreiben.

        OK ich werde mich bessern was die kleinschreibung anbetrifft, mach
        ich sonst noch schlimme Fehler?  ^

        Naja, jetzt übertreibst Du es ein wenig *g*

        Dir ist klar, daß Du die Datei hier gerade in einer for-Schleife stetig neu schreibst?

        Ich glaub wir haben uns noch etwas missverstanden. $ID kommt in der
        ganzen txt Datei nur einmal vor, also wird dieser if Zweig nur
        einmal ausgeführt.

        Ah, in der Tat, mein Fehler. Dann sieh meine Anmerkung bitte als Stilfrage - innerhalb der for-Schleife sollte nur stehen, was innerhalb der Schleifendurchgänge getan werden soll. Einmalige Aktionen gehören dort ergo nicht rein. Aber wie wäre es mit:

        for ... {
          last if (...);
          ...
        }

        Dann hast Du Dein $i gerettet.

        Diesen Teil wollte ich eigendlich lassen weil ich damit auch gleich
        die Meldung (also ich meine mit print) an den Browser gebe.

        Hm, das solltest Du trotzdem anders regeln.

        Kann mir jemand bitte sagen wie die Perl Syntax ist um die Zeilen 0 -
        Variable und variable + 1 bis letzte Zeile zu schreiben?

        print SCHREIBEN @Zeile[0..$i-1];

        print SCHREIBEN $Zeile[0]...$Zeile[$i-1];

        Naja, hiermit schreibst Du eben $Zeile[0], drei Punkte und $Zeile[$i-1]. Perl kann zwar viel, aber nicht hellsehen :-)

        Cheatah

        1. Hallo Cheatah,

          ich hoffe, Dir ist der Unterschied klar :-)

          glaub schon Perl ist eine Programmiersprache und CGI ist eine
          Schnittstelle zwischen Browser und Server (hoffe ich). CGI Scripts
          können z.B. in Perl geschrieben sein. Genaueres steht hier:
          <../../tg.htm> *g*

          print SCHREIBEN @Zeile[0..$i-1];

          za SUPER das hat funktioniert... das ist ja einfach *g*

          Perl kann zwar viel, aber nicht hellsehen :-)

          ja leider, aber dann wärs ja auch irgendwie langweilig...

          Nochmal Vielen Dank gell

          Ciao,
             Tobi

          <img src="http://www383.l7.xodox.com/87ba30.gif" alt="Tobi`s Welt" style="cursor:hand;" onmouseup="window.location.href='http://www383.l7.xodox.com'" onmouseover="window.status='http://www.tobi-beck.de';return true;" onmouseout="window.status='';return true">

          1. Hi,

            ich hoffe, Dir ist der Unterschied klar :-)

            glaub schon Perl ist eine Programmiersprache und CGI ist eine
            Schnittstelle zwischen Browser und Server (hoffe ich).

            ja, close enough. Eigentlich zwischen Server und Server ;-) aber Deine Beschreibung trifft es schon.

            CGI Scripts
            können z.B. in Perl geschrieben sein. Genaueres steht hier:
            <../../tg.htm> *g*

            *lol* :-)

            Cheatah