Zeilen mit mehreren Durchgängen löschen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zeilen mit mehreren Durchgängen löschen

    Hi, ich hab ein Problem, was aber sehr schwer zu erklären ist, aber ich versuchs mal. :?
    Also, ich hab ein Linkliste mithilfe von Textdateien erstellt. Dabei hat jeder Link seine eigene Zeile. Nun hab ich ein Formular erstellt, mit dem man die Links löschen kann. Die Zeilen (also die Links), die gelöscht werden sollen, sind in der Variable $loesche_links in der Form "5;9;4;12;" und so weiter gespeichert und werden und mit explode() in ein Array, das ebenfalls $loesche_links heißt, gespeichert.
    Schaut einfach mal den Code an:

    PHP-Code:
    $loesche_links explode(";"$loesche_links);
     
    $anzahl_links count ($loesche_links)-1;

     
    $datei "links.dat";

     for (
    $i 0$i $anzahl_links$i++)
      {
      function 
    delete_line($file$line$change_in "")
        {
        
    $entries file($file);
        if(empty(
    $change_in))
         {
         unset(
    $entries[$line-1]);
         }
        else
         {
         
    $entries[$line-1] = $change_in;
         }
        
    $newentries implode(""$entries);
        
    $datei fopen($file"w");
        
    fputs($datei$newentries);
        
    fclose($datei);
        }
       
    delete_line($datei$loesche_links[$i]);
      } 
    Ich weiß dass es nicht funktionieren kann, weiß aber auch nicht wie ich es machen kann, dass es funktioniert. Hoffe ihr wießt wie's geht... :dontknow

  • #2
    Also ich würde mit fget() die Datei Zeilenweise in ein Array speichern und dann die Elemente, die nicht gelöscht werden sollen, wieder in eine temporäre Datei schreiben.
    Danach die Quelldatei löschen und die temporäre umbenennen, damit sie wieder den Namen der ursprünglichen Datei hat.

    hier noch ein link dazu:
    http://www.dclp-faq.de/q/q-datei-einfuegen.html
    [color=red]Geht nicht[/color] ist keine Fehlermeldung

    Kommentar


    • #3
      Also zuerstmal solltest du die Funktion aus der for-Schleife rausnehmen. Die hat dort nichts verloren. (der Aufruf reicht).
      Dann macht es imho weinig sinn wegen jeder spalte die Datei neu zu auszulesen und neuzuschreiben. Mal n Vorschlag (ohne Garantie):
      PHP-Code:
      function delete_lines($file$strLines$strChangeIn ""){
          
      $arrChangeIn=explode(";"$strChangeIn);
          
      $arrLines=explode(";"$strLines);
          
      $intAnzahl=count($arrLines);
          
      $entries file($file);
          for(
      $i=0;$i<$intAnzahl;$i++){
              if(empty(
      $arrChangeIn)) array_splice($entries,$arrLines[$i],1);
              else 
      $entries[$arrLines[$i]] = $arrChangeIn[$i];
          }
          
      $newentries implode(""$entries);
          
      $datei fopen($file"w");
          
      fputs($datei$newentries);
          
      fclose($datei);
      }
      $loesche_links ='2;5;18';
      $datei "links.dat";
      delete_lines($datei,$loesche_links); 
      Wie du siehtst steht die for Schleife jetzt in der Funtion und nicht umgekehrt. Die Funktion array_splice macht hier nichts anderes wie unset mit dem Unterschied, dass das Array neu indiziert wird (es enstehen also keine Lücken)
      Zum Ablauf:
      Die datei wird in ein Array gelesen
      Alle Einträge die in $arrLines stehen werden gelöscht bzw. durch den entsprechenden Eintrag in $arrChangeIn ersetzt.
      Datei wird neu geschrieben (ohne die gelöschten Einträge)

      Kommentar


      • #4
        PHP-Code:
        function delete_lines($filename$lines){

        $lines explode(";",$lines);
        $file file($filename);
        foreach(
        $lines AS $line) unset($file[$line-1]); // Da ein array von 0 beginnt!
        $newentries implode("\n"$file);
            
        $datei fopen($filename"w");
            
        fputs($datei$file);
            
        fclose($datei);
        }
        $loesche_links ='2;5;18';
        $datei "links.dat";
        delete_lines($datei,$loesche_links); 
        ungetestet..

        Kommentar

        Lädt...
        X