TXT - Nur bestimmte Zeilen in array

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

  • TXT - Nur bestimmte Zeilen in array

    Hey, ich hoffe ihr könnt mir weiterhelfen...

    Fogendes Problem: Ich speichere Einträge in einer Textdatei nach dem folgenden Schema:

    Titel |Text|Katergorie
    Titel |Text|Katergorie
    Titel |Text|Katergorie

    Nun möchte ich nur die Zeilen in ein array speichern, die eine bestimmte Kategorie haben.

    Beispielsweise sollen nur Einträge in das Array eingelesen werden, die die Kategorie "Webdesign" haben.

    Ich habe mich jetzt lange mit der Problematika auseinandergesetzt, aber bis jetzt weiß ich nur, wie mand ie Einträge zählt, die die Kategorie haben...

  • #2
    Gibt es überhaupt keine eigenen Ansätze?
    Schnell dahin geklatscht und ungetestet:
    PHP-Code:
    $fp fopen('die_datei');

    while (!
    feof($fp))
    {
        
    $chunk fgets($fp);
        
    $chunk_parts explode('|'$chunk);
        
        
    $cat = array();
        if (
    $chunk_parts[0] == 'die_kategorie')
        {
            
    $cat[] = $chunk;
        }
    }

    fclose($fp); 
    Nieder mit der Camel Case-Konvention

    Kommentar


    • #3
      Re: TXT - Nur bestimmte Zeilen in array

      Original geschrieben von sinusweb
      Ich habe mich jetzt lange mit der Problematika auseinandergesetzt, aber bis jetzt weiß ich nur, wie mand ie Einträge zählt, die die Kategorie haben...
      wenn du die einträge schon zählen kannst, ist es doch ein leichtes, die entsprechenden einträge in ein array zu schreiben.
      worin liegt das problem?

      Kommentar


      • #4
        Es gibt noch ein kleines Problem...

        Ich habe nun folgenden Script geschrieben, der bis jetzt noch alle EInträge der Textdatei in den Array speichert...ich weiß einfach nciht an welcher stelle ich die Einträge filtern kann...jedes Mal kommt eine andere Fehlermeldung.


        Die Textdatei sieht folgendermaßen aus.

        45ad399c91c88|1168980360|213.160.81.6|TEXTEXTTEXT1|article1|cat1
        45ad39855886c|1168980300|213.160.81.6|TEXTEXTTEXT2|article2|cat2


        Der letzte Part steht für die Kategorie!

        NUn fange ich mit dem auslesen mal an.
        Hier wird der erste array erstellt, der anschließend weiterverarbeitet wird...


        PHP-Code:
         $fp fopen($entry_file);

          
        $data file($entry_file);

          
        $entry_count count($data);
          for (
        $row 0$row $entry_count$row++)
           {
            
        $parts explode("|"$data[$row]);

            if ((int)
        $parts[1] <= time()){ $data_s[] = $data[$row];
           
          }
         
          if (isset(
        $data_s)) $entry_count count($data_s);
          if (empty(
        $p)) $p 0

        Problem: $data_s soll nur die Zeilen enthalten, die der gewünschten Kategorie entsprechen. Beispielsweise sollen nur die ausgegeben werden, die die Kategorie "cat1" haben.

        Kommentar


        • #5
          du hast doch schon eine bedingung:
          PHP-Code:
          if ((int)$parts[1] <= time()) 
          die mußt du nur erweitern:
          PHP-Code:
          if ((int)$parts[1] <= time() && $parts[5] == 'rgendwas'
          peter
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            "if" kennst du, $parts[5] ist deine kategorie. wo liegt jetzt das problem?
            mfg

            Kommentar


            • #7
              Klingt ja logisch, habe ich danna auch gleich eingefügt...aber geht nciht, haufenweise fehlermeldungen... ( Ohne den zusatz
              PHP-Code:
              && $parts[5] == 'all'
              GEHT ALLES...

              Nun der bearbeitete script, der nciht funktioniert...


              PHP-Code:
              case "main":
                if (isset(
              $_GET['p'])) $p $_GET['p'];
                
              $data file($entry_file);

                
              $entry_count count($data);
                for (
              $row 0$row $entry_count$row++)
                 {
                  
              $parts explode("|"$data[$row]);
                  if ((int)
              $parts[1] <= time()&& $parts[5] == 'all'$data_s[] = $data[$row];
                 }

                if (isset(
              $data_s)) $entry_count count($data_s);
                if (empty(
              $p)) $p 0;
                
              $last = ($p+1) * $entries_per_page;
                if (
              $last $entry_count$last $entry_count



              Danach wird ja der array nochmal ausgelesen, um die Einträge aufzulisten...für jeden eintrag treten jetzt folgende fehler auf...

              Notice: Undefined variable: data_s in /web/www/nevon0/html/content/blog.php on line 31

              Notice: Undefined offset: 3 in /web/www/nevon0/html/content/blog.php on line 43

              Notice: Undefined offset: 4 in /web/www/nevon0/html/content/blog.php on line 44

              Notice: Undefined offset: 5 in /web/www/nevon0/html/content/blog.php on line 45


              Woran liegt das? IRgendwas wurde verändert, sodass der nachfolgende Teil des scripts nciht mehr ordnungsgemäß ausgeführt werden konnte...

              Kommentar


              • #8
                naja undefined heißt sie wurde nicht initialisiert also schreibst vor der for schleife ein
                PHP-Code:
                $data_s = array(); 
                für die restlichen Fehlermeldungen:
                welche Zeilen sind denn die mit der offset fehlermeldung?Poste mal den Code, der dafür zuständig ist

                mfg

                Kommentar


                • #9
                  EDIT:
                  Code wegen extremer Überbreite entfernt.



                  im mittleren teil dieses script, wo die einzelnen parts definiert werden, treten die offset fehler auf...
                  Zuletzt geändert von wahsaga; 18.01.2007, 14:53.

                  Kommentar


                  • #10
                    brich bitte mal deinen Code um, der hat ja mehr als überbreite!!!Und füg oben mal noch n <?php ein, dann kann man das auch besser lesen!was gibt denn
                    PHP-Code:
                    print_r($parts); 
                    aus?

                    mfg

                    Kommentar


                    • #11
                      Hey,

                      Version, die bearbeitet wurde:
                      BEispiel für eine Zeile in der Textdatei:

                      45ad39855886c|1168980300|213.160.81.6|blbal|33rw3r3rr3|all

                      PART 5 Ist also ALL und entspricht der Abfrage bezüglich der KAtegorie...

                      PHP-Code:
                      <?
                      $data_s = array();


                        for ($row = 0; $row < $entry_count; $row++)
                         {
                          $parts = explode("|", $data[$row]);

                          if ($parts[5]=='all'&&(int)$parts[1] <= time()) $data_s[] = $data[$row];
                         }
                      ?>
                      Problem: Es werden anschließend keine Daten ausgegeben, anscheinend ist $data_s LEER, obwohl die if abfrage erfüllt wird.

                      Code, der ungebremst funktioniert... ( $data_s = array(); wurde entfernt UND $parts[5]==$category in der IF-Abfrage...)
                      PHP-Code:
                      <?



                        for ($row = 0; $row < $entry_count; $row++)
                         {
                          $parts = explode("|", $data[$row]);

                          if (int)$parts[1] <= time()) $data_s[] = $data[$row];
                         }
                      ?>

                      Wo ist da etwas faul?

                      Kommentar


                      • #12
                        Original geschrieben von sinusweb
                        PART 5 Ist also ALL und entspricht der Abfrage bezüglich der KAtegorie...
                        Ja, das glaubst du ...

                        Mache bitte eine Kontrollausgabe dieses Wertes mittels var_dump().
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          Ich habe die parts abgefragt, die bei der IF abfrage mit dem Wert der von $category ( hier: all) verglichen werden...

                          string(4) "ert " string(7) "e4te4t " string(4) "all " string(4) "bla " string(4) "bla " string(4) "all "


                          es taucht zweimal "all" auf und somit müssten zwei EInträge ausgegeben werden...

                          Kommentar


                          • #14
                            Original geschrieben von sinusweb
                            es taucht zweimal "all" auf und somit müssten zwei EInträge ausgegeben werden...
                            Nein, es taucht nicht zwei mal "all" auf - Augen aufmachen, genau hinschauen (ggf. auch mal in die Quelltextansicht).
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #15
                              du hast recht ..da ist noch ein space... du bist gold wert, danke.

                              nun ist noch folgendes prob zu bewältigen..fast am ende angelangt...

                              SO sieht die ausgabe der variablen $parts[5] (var_dump...) im Qualltext aus:

                              string(4) "ert
                              "
                              string(7) "e4te4t
                              "
                              string(4) "all
                              "
                              string(4) "bla
                              "
                              string(4) "bla
                              "
                              string(4) "all
                              "

                              Wie muss die Abfrage nun aussehen?

                              PHP-Code:
                              <? if($parts[5]=="all ") ?>
                              klappt nämlich nciht, also all+leerzeichen...muss man diesen zeilenumbruch kenntlich machen, oder woran leigt es, dass immernoch nciht die if abfrage erfolgreich verläuft..?



                              ich hab das jetzt mit preg_match gelöst..aber ideal is das ja irgendwie nciht.
                              Zuletzt geändert von sinusweb; 18.01.2007, 16:23.

                              Kommentar

                              Lädt...
                              X