Mfrank: Data-file Trennzeichen - Die Zweite

Hallo

Ich lese ein txt-file zeilenweise aus... kein Problem soweit.
Das file ist so aufgebaut:
***************************************
eins;Anton;Rüsselweg;Musterstadt
zwei;Berta;Lochgasse;Musterdorf
drei;Cleopatra;Auf der Pyramide;Gizeh
...
***************************************
Wie gesagt: das zeilenweise Auslesen ist nicht das Problem, aber kann ich die durch ";" getrennten Werte irgendwie an verschiedene Variablen übergeben ? ...also $nummer,$name,$strasse,$ort ??
Wenn "ja" - WIE ?
Auf meinen letzten post kam der Tip mir mal explode() und list() anzugucken... aber ich versteh das einfach nicht ! :(

Kann mir das bitte, bitte mal einer anhand eines kommentierten Beispielquelltextes gaaaanz langsam erklären ????

Danke !!!!
(der verzweifelnde) Frank

  1. bleib in Deinem Thread </?m=153485&t=28340> !

  2. hi

    Ich lese ein txt-file zeilenweise aus... kein Problem soweit.
    Das file ist so aufgebaut:
    ***************************************
    eins;Anton;Rüsselweg;Musterstadt
    zwei;Berta;Lochgasse;Musterdorf
    drei;Cleopatra;Auf der Pyramide;Gizeh
    ...
    ***************************************
    Wie gesagt: das zeilenweise Auslesen ist nicht das Problem, aber kann ich die durch ";" getrennten Werte irgendwie an verschiedene Variablen übergeben ? ...also $nummer,$name,$strasse,$ort ??

    wenn du (ich nehme an mit file() ) die Datei ausgelesen hast, hast du zum Beispiel:
    $datei[1] = "zwei;Berta;Lochgasse;Musterdorf";
    verwendest du list und split (< > und http://www.php.net/manual/de/function.split.php):
    list ($nummer, $name, $strasse, $ort) = split ('[;]', $datei[1]);
    alternativ kann man (wenn ich das richtig verstanden habe) statt split auch explode ("explode(";",$datei[1])" - http://www.php.net/manual/de/function.explode.php) verwenden

    Wenn die Inhalte nicht unbedingt in $nummer, $name usw stehen müssen kann man auch einfach "$inhalte = explode(";",$datei[1])" verwenden und auf die Inhalte mit "$inhalte[0]" bis "$inhalte[3]" zugreifen

    hth
    Tobias

    1. Hallo Tobias

      Sicherlich nett gemeint von dir, aber ich versteh es einfach nicht !!

      1. Hallo Tobias

        Sicherlich nett gemeint von dir, aber ich versteh es einfach nicht !!

        irgendwie bekomme ich statt der gewünschten Werte immer ein
        "Resource id #1" ?!?

        Gruss
        Frank

      2. hi

        Sicherlich nett gemeint von dir, aber ich versteh es einfach nicht !!

        wo liegt das Problem? was verstehts du nicht? Wenn ich dir helfen soll musst du schon sagen wo es klemmt und evtl. deine bisherigen Versuche posten.

        gruß
        Tobias

        1. So sieht der Quelltext aus:

          <?PHP
          $dateiname = "waren.txt";
          $filename = $dateiname;
          $datafile = fopen($filename , "r");
          if ($datafile <=0)
          {
           echo "Datenfile nicht gefunden !";
           exit;
          }
          else
           {
          $array = split(";",$datafile,3);
          echo "<table cellspacing='2' cellpadding='2' border='0' align='center'><tr>";
          echo "<td>Name</td><td>Bez.</td><td>Men.</td></tr>";
          echo "<tr><td>$array[0]</td><td>$array[1]</td><td>$array[2]</td></tr></table>";
          }
           ?>

          die Ausgabe so:

          Name       Bez.      Men.
          Resource id #1

          das textfile sieht so aus:
          text1;text2;text3

          eigentlich sollte doch
          $array[0] = text1
          $array[1] = text2
          $array[2] = text3    sein ?
          ... und was bedeutet dieses "resource id #1" ??

          Danke
          Frank

          1. hi

            $dateiname = "waren.txt";
            $filename = $dateiname;

            für was ist diese zeile?

            $datafile = fopen($filename , "r");

            verwende nicht fopen sondern file

            if ($datafile <=0)

            if (!file_exists($dateiname))

            {
            echo "Datenfile nicht gefunden !";
            exit;
            }
            else
            {
            $array = split(";",$datafile,3);

            $array = explode(";",$datafile[0]);
            //tabellenausgabe gekürzt

            }

            die Ausgabe so:

            Name       Bez.      Men.
            Resource id #1

            jetzt so:
            ----
            Name   Bez.   Men.
            text1  text2  text3
            ---

            eigentlich sollte doch
            $array[0] = text1
            $array[1] = text2
            $array[2] = text3    sein ?

            jetzt ja, aber wenn du "$datafile = fopen($filename , "r");" schreibst, hast du lediglich die Datei geöffnet, musst sie aber noch auslesen und wieder schließen. Außerdem kann man einen Dateihandle (oder wie auch immer das heißt, wenn man eine datei mit fopen öffnet heißt) nicht mit split behandeln, da es ja kein array ist.

            gruß
            Tobias

            1. Besten Dank !!!
              ...ich komme der Sache näher ;-)
              Nur bricht die Ausgabe jetzt nach der ersten Zeile ab :(
              War da nicht irgendwas mit "wile (!feof)" ??

              1. hallo <- auch wenn du das konsequent ignorierst

                Nur bricht die Ausgabe jetzt nach der ersten Zeile ab :(

                logisch, es sagt ihm ja keiner, dass er weitermachen soll.

                War da nicht irgendwas mit "wile (!feof)" ??

                ja, mit feof kann man testen ob das ende der Datei erreicht ist, dafür brauch man aber einen Dateizeiger den man nicht hat wenn man mit file arbeitet.
                versuchs mal mit:
                ------
                echo "<table cellspacing='2' cellpadding='2' border='0' align='center'><tr>"; //anfang der tabelle
                echo "<td>Name</td><td>Bez.</td><td>Men.</td></tr>"; //uerberschrift der tabelle
                for ($i=0;!empty($datafile[$i]);$i++) { //schleife die bei jedem durchlauf prüft, ob das array datafile leer ist und wenn ja - also die datei zuende ist - bricht sie ab
                $array = explode(";",$datafile[$i]); //der array von vorhin, nur das in der eckigen klammer nicht mehr 0 steht sondern $i - es wird also bei jedem durchlauf auf eine andere zeile verwiesen
                echo "<tr><td>$array[0]</td><td>$array[1]</td><td>$array[2]</td></tr>"; //die ausgabe der zeile (wie vorhin)
                ------
                (das ganze im else bereich)

                gruß
                Tobias

                1. ich bin mal inkonsequent *g*:  HALLO

                  Besten Dank, Tobias ...

                  Gruss
                  Frank