Ankündigung

Einklappen
Keine Ankündigung bisher.

Inhalt einer datei Sortieren ????

Einklappen

Neue Werbung 2019

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

  • Inhalt einer datei Sortieren ????

    Hallo Leute,

    bin dabei mich etwas mit PHP zu beschäftigen !!
    So nun habe ich da so ein kleines Problem !!!

    Wie kann ich den Inhalt einer Datei nach dem Alphabet sortieren ??

    Meine Datei sieht momentan so aus das ich für jeden Eintrag einen String in die Datei schreibe:

    String: Name|-|Vorname|-|Strasse|-|PLZ|-|Ort

    wo bei ich |-| als Trennzeichen benutze !!

    So nun ist die Frage wie kann ich die Datei erst nach dem Namen und dann nach dem Vornamen sortieren ???

    Kann mir einer bei der Problematik helfen ??


    Danke Coolsero

  • #2
    du kannst die Dateien auslesen und mit split trennen (den Inhalt) wird aber sehr kompliziert. Benutze lieber eine Datenbank... geht einfacher & schneller.

    Kommentar


    • #3
      Fragen:
      1. Die Datei was ist das -> txt, html ->?
      2. Sind immer alle Felder ausgefüllt oder ab und zu leer?
      Ob eine Sache gelingt, erfährst du nicht, wenn du darüber nachdenkst, sondern wenn du es ausprobierst.

      Kommentar


      • #4
        Hallo c01001,

        zu 1. es ist eine TXT Datei !!
        zu 2. Leider ist ab und zu auch mal ein Feld Leer !!

        Gruß Coolsero

        Kommentar


        • #5
          Letzte fragen, hast du schon selber was ausprobiert,
          bevor ich ganz von neu anfange?
          wie viele Namen sind in eine deine Datei drin?
          Ob eine Sache gelingt, erfährst du nicht, wenn du darüber nachdenkst, sondern wenn du es ausprobierst.

          Kommentar


          • #6
            Hallo c01001,

            eine Datenbanklösung erscheint mir einfacher:

            1. Den Connect zur DB generieren (Benutzer, Passwort, Host, DB-Name)
            2. Den Connect speichern in Variable $conn
            3. Eine Tabelle "Adressen" anlegen

            weiter:
            4. Abfrage ausführen und Ergebnis ausgeben:

            Code:
            $sql_abfrage= "select * from Adressen order by nachname, vorname";
            // Abfrage zum Sortieren nach Alphabet
            
            $sql_select=mysql_query($sql_abfrage, $conn);
            // Herstellung der Verbindung mit Host und Ausführen des SQL-Befehls
            
            $anz=mysql_num_rows($sql_select);
            // Anzahl der Datensätze feststellen
            dann die Ergebnisausgabe:

            Code:
            while ($i<$anz) // falls $i=1, falls $i=0:$i<$anz+1
                {
                $a=mysql_result($sql_select, $i, "nachname");
                $b=mysql_result($sql_select, $i, "vorname");
                $c=mysql_result($sql_select, $i, "Straße");
                $d=etc....
            
            Die Variablen $a, $b,... sollten jetzt zur besseren Darstellung in eine HTML-Tabelle implementiert werden...
            
                 $i++;
                 }
            Ich denke, eine Datei auszulesen, in einen Array mit split() oder explode() zerlegen und zu speichern und ihn dann mit sort() zu sortieren ist aufwendiger.

            Hier noch 2 Linkempfehlungen:

            http://www.gbauerfeind.de/Mysql,Php/PHP/seite6.html
            http://de2.php.net/manual/en/function.mysql-query.php

            Gruß,

            Kamalo :wink:

            Kommentar


            • #7
              Die Meinung bin ich auch, aber "coolsero" will das ja nicht aus bestimmten Gründe.. Da versucht mann nun zu helfen.
              PHP->MySQL ist natürlich einfacher und das geht schneller und man hat viele weitere möglichkeiten.
              Wenn das für "coolsero" nicht in Frage kommt, dann "versucht man zu helfen".
              Aber das kann uns nur "coolsero" beantworten. Ich hoffe das er uns noch schreibt und uns nicht hier so sitzen lässt.
              Ob eine Sache gelingt, erfährst du nicht, wenn du darüber nachdenkst, sondern wenn du es ausprobierst.

              Kommentar


              • #8
                Hallo,

                hm, - ich denke auch, coolsero - melde Dich doch mal und informiere uns, ob Du Dich entschieden hast, wie Du vorgehst und -wie weit Du bist...

                Zusätzlich zu split() und explode() und sort() wird in Verbindung mit einer Textdatei ein zweidimensionales Array benötigt... . Diese Lösung ist nicht so ganz einfach. Aber möglich.

                Aber -soweit sich coolsero nicht meldet haben wir da eher ein anderes Problem? Gib doch mal ein Lebenszeichen oder aktuellen Stand... von Dir...

                Gruß,

                kamalo

                Kommentar


                • #9
                  Hallo,

                  Sorry hatte aber leider in den letzten Tagen nicht so viel Zeit !!
                  Mein Problem ist das ich bei meinem Webspace keine MySQL Dantenbank habe !!!

                  In der datei sind etwa 20 - 40 Adressen drin !!!

                  Danke für die Hilfe

                  Coolsero

                  Kommentar


                  • #10
                    Hallo coolsero,

                    ich gehe mal davon aus, daß Du den Provider nicht wechseln magst

                    Also: ich fange mal nach meinen Vorstellungen an:
                    Ich gehe davon aus, daß Deine Datei datei.txt heißt...
                    Code:
                    $file="datei.txt";    //Pfad der Datei
                    $fh=fopen($file,"r");       //Öffnen der Datei zum Lesen und Speichern des Inhaltes in die Variable $fh
                    $string=fread($fh, 100000); //Grösse festlegen, wieviele Zeichen der Datei ausgegeben werden und in die Variable $string speichern
                    fclose($fh);                //SQL-Datei schliessen
                    $groesse=filesize("datei.txt");
                    $tren = explode('|-|',$string, $groesse);   //Inhalt der SQL-Datei in verschiedene Elemente aufteilen (array), Trennzeichen: |-|
                    $strcount=count($tren);    //Elemente des arrays zählen
                    $anz=$strcount-1;
                    So dürfte zunächst einmal das Auslesen der Datei und Speichern der Einzelnen Teilstrings in einen Array funktionieren. Jetzt fehlt noch die Sortierfunktion, bspw. mit foreach: http://de.php.net/manual/de/control-...es.foreach.php

                    Gruß,

                    kamalo

                    Kommentar


                    • #11
                      Daten sortieren

                      Hi! Ich bin ebenfalls PHP-Einsteiger und habe mir gedacht, ein Tipp von jemand auf derselben Verständnisebene ist leicht(er) nachvollziehbar (so ist's mir jedenfalls gegangen).

                      Ich habe bald gemerkt, daß eine Datenbank gerade für grössere Datenmengen fast unumgänglich ist, da man sehr flexibel arbeiten kann.
                      Ich habe eine DB mit momentan ca. 50 DVDs angelegt,
                      wobei ich alle in einer Datei auflisten lasse:

                      Code:
                      $abfrage = "SELECT * FROM DVD ORDER BY'" . $_GET["sort"] . "'" . $_GET["opt"] . ",'Titel'";
                      $ergebnis = mysql_query($abfrage);
                      while($row = mysql_fetch_object($ergebnis))
                          {
                          echo "<tr><td width='280' class='texts'>" . $row->Titel . "</td>
                                    <td width='160' class='texts'>" . $row->FaktenGenre . "</td>
                                    <td width='80' class='texts'>" . $row->FaktenErscheinungsjahr . "</td>
                                    <td width='120' class='texts'>" . $row->WertungGesamt . "/100 [img]images/wertung_" . $row->WertungNote . ".gif[/img]</td></tr>";
                          }
                      Hierbei besteht die Möglichkeit, die Daten nach den vier Kritierien zu sortieren.

                      In einer weiteren Datei dvd_details.php werden Details eines Datensatzes ausgelesen:
                      Code:
                      $abfrage = "SELECT * FROM DVD WHERE Alias='" . $_GET["ID"] . "'";
                      $ergebnis = mysql_query($abfrage);
                      $row = mysql_fetch_object($ergebnis);
                      echo $row->Titel
                      Ich hoffe, diese Information kann dienlich sein; begebe mich mal in die Rolle desjenigen, der die Auskunft gibt (und nicht wie bisher meist: sie entgegen nimmt).

                      MfG redwing

                      Kommentar


                      • #12
                        @redwing
                        ja, nur leider hat unser Freund oben kein MySQL

                        @coolsero
                        Denkansatz:
                        du brauchst eigentlich nur fgets(), explode() und foreach
                        du musst allerdings ein 2-Dimensionales Array benutzen.
                        Code:
                        2-Dimensionales Array:
                        
                        -------------------------------
                        |    ID  |  Name  | Nummer    |
                        ------------------------------
                        |    1   |  Hans  |  1234     |
                        ------------------------------
                        |    2   |  Karl  |  5678     |
                        ------------------------------
                        OK?
                        du splittest Zeile für Zeile der Datei und schreibst sie in je eine Zeile deiner Datei:
                        Ich habe zur Vereinfachung einfach ein kleiners Format genommen.

                        data.txt:
                        Code:
                        ID|-|Name|-|Nummer
                        Script:
                        Code:
                        <?
                        $file = fopen("data.txt","r");
                        
                        $i = 0;
                        
                        while ($row = fgets($file)) {
                        
                           $data = explode("|-|",$row);
                           
                           $j = 0;
                        
                           foreach ($data as $col) {
                           
                              $daten[i][j] = $col;
                        
                              $j++;
                           }
                        
                           $i++;
                        }
                        jetzt hast du ein 2-Dimensionales Array und musst es nun Ordnen.

                        Kommentar


                        • #13
                          Hallo,

                          ich habe nun ein wenig recherchiert und coolseros Aufgabe zu meiner gemacht... obgleich ich gar nicht mehr weiß, ob er das liest - ich hoffe es doch zumindest: Aber das hat mich selbst mal interessiert:
                          Folgende Lösung habe ich nun:
                          Code:
                          $file = fopen("datei.txt","r"); // Öffnen Datei
                          $i=0;
                          while (!feof($file)) // Ausführen bis zum Ende der Datei
                          {
                          if(($a=urlencode(fgets($file)))!="") // lese erste Zeile (mit Umwandlung von Sonderzeichen)
                            $row[$i++] = $a; // Zähler erhöhen, damit alle Zeilen der Datei ausgelesen werden
                           }
                          sort($row); // Jede Zeile sortieren
                          for($i=0;$i<count($row);$i++){ // Zeilen durchlaufen für das zu erstellende array
                             $a=urldecode($row[$i]); // Sonderzeichenumwandlung
                             $data[$i] = explode("|_|",$a); // Hier erst die Zeile trennen und jedes Zeilenelement in einen array speichern
                            }
                          for($i=0;$i<count($data);$i++) // Zeilendurchlauf für die Ausgabe 
                          {
                          	for($j=0;$j<count($data[0]);$j++) // Erstellung zweidimensionales array
                          		echo $data[$i][$j]." ";
                          	echo "
                          "; // Ausgabe
                          }
                          Die ganze Zeile wird sortiert, bevor die einzelnen Elemente in einen array gespeichert werden. Da der Vorname an 2. Stelle hinter dem Namen steht, wird dieser bei doppelten Einträgen automatisch als zweites sortiert.

                          Ich habe es so getestet, funktioniert einwandfrei.

                          -Hoffe, ich konnte helfen :wink:

                          kamalo

                          Kommentar

                          Lädt...
                          X