Jens Arnt: Programmier Hilfe --> habe damit großes Problem

Hallo

Habe ein ganz großes Problem, soll eine Delete funktion mit CGI programmieren.
Ich weiß allerdings absolut nicht iwe ich da machen soll, habe davon keine sehr große ahnung, um genau zu sein fast garkeine.
Mit CGI habe ich aber schon programmiert, also besser gesagt habe ich mir aus dem Netz CGI-Scripte geladen und die dann so verändert wie ich das wollte.
Bei meiner letzten Aufgabe bin ich aber irgendwie auf eine ziemlich hohe Wand gestoßen und da komm ich nicht rüber. Hab im Netz nichts mehr gefunden und auch keine Ideen mehr.
Das schwierige ist ja noch, das nur ganz bestimmte Zeilen gelöscht werde soll und nicht alles.

Vielleicht kann mir von euch irgendjemand helfen oder mir einen Ansatz geben, wo ich noch suchen kann oder Ideen finden kann.

Danke schon mal im Vorraus
Jens

  1. Hi,

    Habe ein ganz großes Problem, soll eine Delete funktion mit CGI programmieren.

    Mit welcher Sprache denn, CGI beschreibt nur das Interface.
    PHP, Perl, C++ ?

    Das schwierige ist ja noch, das nur ganz bestimmte Zeilen gelöscht werde soll und nicht alles.

    Ich gehe mal davon aus, das du in einer Datei eine Zeile löschen willst, in der bestimmte Inhalte stehen?

    du musst die Datei zuerst öffnen und Zeilenweise durchlaufen:
    entweder du verwendest eine Schleife die immer eine Zeile der Datei
    ließt, oder du speicherst den Inhalt der ganzen Datei in einer Variable und splittest diese in Array, Trennzeichen ist hier "\n"
    für Zeilenende.

    Bei jedem Zeilendurchlauf, musst du prüfen ob die Zeile den zu löschenden INhalt enthält:

    wenn nein

    Zeile in ein neues Array anhängen

    wenn ja

    Zeile nicht anhängen

    Zum Schluss überschreibst du die Datei mit dem neuen Array.

    Hoffe das Hilft dir.

    ueps

    1. Hallo,

      du kannst jede Zeile durchgehen lassen (mit z.B. foreach oder while)
      und dies hier machen:

      $loeschtext = "die zu löschende ZEILE\n";
      #vergiss bei einem Zeilenumbruch "\n" nicht am ende
      #---- AKTION -----#
      $einezeile =~ s/$loeschzeile//g;

      Viele Grüße
      Torwächter

      1. Hallo,

        du kannst jede Zeile durchgehen lassen (mit z.B. foreach oder while)
        und dies hier machen:

        $loeschzeile = "die zu löschende ZEILE\n";
        #vergiss bei einem Zeilenumbruch "\n" nicht am ende
        #---- AKTION -----#
        $einezeile =~ s/$loeschzeile//g;

        Viele Grüße
        Torwächter

        1. Hallo

          Danke ersteinmal für eure Hilfe. Habe es gerade ausprobiert, schümpft auch nicht aber macht auch nichts. Weiß auch nicht wie ich das $einezeile benutzen soll.

          $loeschzeile = "die zu löschende ZEILE\n";
          #vergiss bei einem Zeilenumbruch "\n" nicht am ende
          #---- AKTION -----#
          $einezeile =~ s/$loeschzeile//g;

          Ginge es, wenn ihr mir den Quelltext ein wenig erklärt, was bedeutet z.B. ~
          oder //g ? Da hab ich keine Ahnung von.

          MFG
          Jens

          1. Hallo Jens,

            sorry, wenn ich mecker - aber solltest Du nicht lieber vorher mal ein Buch über Perl kaufen und es durchlesen? ... oder handelt es sich mal wieder um eine Hausaufgabe?

            ansonsten:
            perldoc perlfunc
            perldoc perlre

            Grüße
               K@rl

            1. sorry, wenn ich mecker - aber solltest Du nicht lieber vorher mal ein Buch über Perl kaufen und es durchlesen? ... oder handelt es sich mal wieder um eine Hausaufgabe?

              Du könntest auch einfach hier auf Selfhtml nachschauen, da stehts auch.
              mfg

          2. oder //g ? Da hab ich keine Ahnung von.

            s/$loeschzeile//g;
            Durch das s wird angezeigt, das eine Substitution statfindet, d.h. das ersetzt werden soll.
            s/suchtext/wird hierdurch ersetzt/optionen.
            g bedeutet global
            MFG
            Andres Freund

          3. $loeschzeile = "die zu löschende ZEILE\n";
            #vergiss bei einem Zeilenumbruch "\n" nicht am ende
            #---- AKTION -----#
            $einezeile =~ s/$loeschzeile//g;

            Ginge es, wenn ihr mir den Quelltext ein wenig erklärt, was bedeutet z.B. ~
            oder //g ? Da hab ich keine Ahnung von.

            Das ~ steht für ersetzen sprich $einezeile wird dursucht und ggf. ersetzt.

            s/$loeschzeile//g

            s -> wie suche / $loeschzeile -> suchtext /ersatztext -> hier leer /g -> im gesamten string suchen und ersetzen

        2. Hallo,

          $loeschzeile = "die zu löschende ZEILE\n";
          #vergiss bei einem Zeilenumbruch "\n" nicht am ende
          #---- AKTION -----#
          $einezeile =~ s/$loeschzeile//g;

          Wobei ich das für einen nicht gerade glücklichen Einsatz von Regulären Ausdrücken halte. Erstens kann das ziemlich rechenintensiv sein, zweitens ist es in der Form, wie Du es präsentiert hast, nicht 'krisensicher', sprich es kann durhcaus passieren, daß ein ungewünschtes Ergebnis erzielt wird. Außerdem wird so der Code weniger klar leserlich sein.

          Eine einfache Abfrage auf Gleichheit der beiden Strings würde IMHO für dieses Problem das geeignetere sein.

          Grüße
            Klaus