Datensätze nach bestimmten Wort filtern

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

  • Datensätze nach bestimmten Wort filtern

    Hallo,
    ich möchte aus einer csv-Datei nur bestimmte Datensätze ausgeben und in eine neue Datei schreiben:

    name; vorname; plz; ort
    schröder; franz; 13579; berlin
    meyer; peter; 12345; hamburg
    müller; ullli; 67890; berlin

    zb. nur die Datensätze wo der Ort "berlin" ist.

    Das schreiben aller Datensätze in eine neue Datei bekomme ich hin, allerdings hab ich keine Idee, wie ich nur bestimmte Datensätze rausfiltern kann. (Bin absoluter PHP-Einsteiger)

    Kleiner Tipp wär super. Danke.

  • #2
    Du könntest z.B

    - Datei öffnen
    - Zeilenweise auslesen
    - Mit explode() die Zeile anhand -> ; <- auseinandernehmen
    - WENN der letzte begriff beispielsweise Berlin ist den ganzen Datensatz in eine neue Datei schreiben....
    gruss Chris

    [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

    Kommentar


    • #3
      - Datei öffnen
      - Zeilenweise auslesen
      - Mit explode() die Zeile anhand -> ; <- auseinandernehmen

      das klappt alles schon.
      Aber mit welchem Befehl prüfe ich auf einen bestimmten Wert schreibe dann nur diesen Datensatz in einie Datei?

      // CSV-Datei einlesen
      $i = 0;
      $fp = fopen ($ordner_daten."/".$csvfile, "r");
      while (! feof ($fp)) {
      $line[$i] = fgets($fp, 1000000);
      $i++;
      }

      $fp = fopen ("test.html", "w");
      // Start: Schleife Datendurchlauf
      $anzds = 0;
      $anz = $dsstop - $dsstart;
      while ($anzds <= $anz) {

      $datensatz = $line[$anzds + $dsstart]; // Zeilennummer des Datensatzes
      $daten = explode (";", $datensatz); // Daten nach ; extrahieren

      fwrite ($fp, $tpldata);
      }
      $anzds++;
      }
      fclose ($tplfile);
      fclose ($fp);

      so in etwas sieht meine Datei aus, nur noch etwas komplexer, da ich noch ein Template einlese aus dem ich dann die neue Datei erzeuge.

      Kommentar


      • #4
        Hi!
        Grundlegendes zu deiner Struktur.
        Wenn du schon mit Dateien arbeitest, die du später durch den explode() jagst, würde ich dies nicht an Hand einer Zeile tun. Denn was machst du wenn du mal deine Datensätze um einge Daten wie Z.B Signaturen erweitern möchtest, und für einen Datensatz mehr als eine Zeile benötigst?

        Deshalb mach dir einfach am besten 2 Markierungen. Eine für eine Spalte und eine für eine Zeile.

        Beispiel:
        name|||vorname|||plz|||ort###schröder|||franz|||13579|||berlin###meyer|||peter|||12345|||hamburg###. .......u.s.w.


        Wenn du mit PHP einen Teil einer Datei ändern möchtest, gehst du am besten wie folgt vor:

        1. Variablen definieren
        $datei = " "; // String
        $zeilenende = "###" //Was markiert das Zeilenende?
        $spaltenende = "|||" //Was markiert das Spaltenende?

        2. Zuerst solltest du die Datei einlesen
        $datei = file_get_contents("Pfad_zur_Datei/Datei.Endung");

        Jetzt hast du in $datei deinen String, der den Inhalt deiner Datei beinhaltet. Dann solltest du einfach einen beliebigen Wert auslesen können. Dazu eignet sich ganz gut eine Funktion!

        Ich gehe in meinem Beispiel davon aus, dass du via URL 2 Angaben mitlieferst, die du ausgeben möchtest.

        www.deineseite.de?zeile=0&spalte=1

        So könntest du jeden belibigen Wert auslesen:

        3. Aulesen der URL Daten
        if(!is_numeric($_GET['zeile']) || !is_numeric($_GET['spalte'])) {
        $zeile = 0;
        $spalte = 0;
        }

        4. Funktion erstellen
        function datensatz_ausgeben($zeile,$spalte,$datei) {
        global $zeilenende, $spaltenende;
        $zeilen = explode($zeilenende,$datei);
        $spalten = explode($spaltenende,$zeilen["$zeile"]);
        $rueckgabe = $spalten["$spalte"];
        return $rueckgabe;
        }

        5. Datensatz auslesen und ausgeben
        echo datensatz_ausgeben($zeile,$spalte,$datei);
        Zuletzt geändert von LGC; 14.08.2005, 10:27.

        Kommentar


        • #5
          Hmm

          PHP-Code:
          // CSV-Datei einlesen
          // $i = 0; Wozu ein Zähler?

          $fp fopen ($ordner_daten."/".$csvfile"r");
          while (! 
          feof ($fp)) {
             
          $line fgets($fp1000000); 
             
          $temp explode(";",$line);
             if (
          trim($temp[3]) == 'berlin'
             {
                
          $line in deine neue Datei schreiben
             
          }

          Nur zum verstehen. Ausbauen musste selber
          gruss Chris

          [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

          Kommentar


          • #6
            Meine halt eben was bringt

            $line = fgets($fp, 1000000);

            wenn es hier ein Datensatz mal länger wird wie eine Spalte


            ...stimmts nacher nicht mehr mit dem Wert so genau...

            man könnte ja auch:
            $daten = explode('###',file_get_contents("Pfad_zur_Datei/Datei.Endung"));

            $daten = explode('|||',$daten[' deine Zeile ']);

            echo $daten['deine Spalte'];

            Wäre auch hübsch und kurz!
            Zuletzt geändert von LGC; 14.08.2005, 10:42.

            Kommentar


            • #7
              Original geschrieben von LGC
              .....was bringt

              $line = fgets($fp, 1000000);

              wenn es hier ein Datensatz mal länger wird wie eine Spalte

              Nichts bringts

              Ich denke das sollte der Poster selbst entscheiden.
              Er möchte eine einfache CSV datei auslesen.. Nach mehr hat er nicht gefragt.
              gruss Chris

              [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

              Kommentar


              • #8
                Ja klar da hast du Recht!!

                Ich meine es auch nur gut. Eine Lösung mit der Datenbank wäre ohne hin besser. Aber das ist ja wieder so eine dumme Angewohnheit von mir, immer einen Roman daraus zu schreiben.

                Code halt liebend gerne!

                Liebe Grüsse!

                Kommentar


                • #9
                  Lösung mit ner Datenbank?

                  Erst die CSV auslesen in eine DB schreiben und dann wieder zurück?
                  Soweit ich das aus dem erst Posting entnehmen kann möchte er scheinbar eine neue CSV erstellen. Kein Wort von Datenbank

                  Kann ja auch anders sein, aber das wird sich zeigen
                  gruss Chris

                  [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

                  Kommentar

                  Lädt...
                  X