Daten aus externer Datei auslesen und mit HTML wiedergeben

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

  • Daten aus externer Datei auslesen und mit HTML wiedergeben

    Hallo,
    ich habe eine Textdatei mit Daten. Diese möchte ich gerne mit PHP auslesen und dann wieder als HTML Dateien ausgeben.

    folgender stand:

    Das auslesen der Daten klappt einwandfrei mit folgendem code:

    <?php
    $fp = fopen("daten.txt","r");
    if ($fp)
    {
    while(!feof($fp))
    {
    $text = fgets($fp);
    echo"$text";
    }
    fclose($fp);
    }
    ?>


    Diesen Code habe ich als php Datei gespeichert. (z.B. wiedergabe.php). Wenn Ich nun die Datei wiedergabe.php nun im Browser aufrufe wird mir schön meine Textdatei runtergerasselt.

    Nun habe ich das Problem das die Daten unsortiert ausgegeben werden.
    Meine Fragen: Wie kann ich es bewerkstelligen das die Daten so ausgegeben werden das ich mit PHP wieder darauf zugreifen kann und die Daten dann in HTML Dateiein einfüge. Oder Anders: wie muss meine Textdatei aufgebaut sein um dies überhaupt Möglich zu machen.

    Zur Zeit ist die Textdatei wie folgt aufgebaut:

    "Überschrift1";"Überschrift2","Überschrift3","Überschrift4"
    "DatenfeldA1";"DatenfeldA2";DatenfeldA3";"DatenfeldA4"
    "DatenfeldB1";"DatenfeldB2";DatenfeldB3";"DatenfeldB4"
    usw.


    schonmal vielen Dank für jede Hilfe bei diesem Problem

  • #2
    1. kannst die gesamte datei auf anhieb mit file() in ein array einlesen, dessen elemente den einzelnen zeilen entsprechen.

    2. mittels explode() lässt sich eine zeile in einzelne felder aufteilen.

    3. das ganze müsste in ein zweidimensionales array gepackt werden, damit es anschließend mit array_multisort() o.ä. anhand einer "spalte" sortiert werden kann.

    4. zum schluß wirst du das array mit foreach o.ä. durchlaufen und schön formatiert ausgeben können.

    ---

    doch bevor du dir diesen stress machst, überleg dir, ob der einsatz einer datenbank nicht einfacher wäre.

    Kommentar


    • #3
      ich würde die daten via fread() in ein string einlesen und dann mit explode() zu einem array auflösen, vorrausgesetzt dass die daten durch ein einzelnes zeichen (z.b. ein simikolon) getrennt sind.

      dann sparst du das anschließende zusammenfügen mehrerer array.

      gruss, jazzy

      Kommentar


      • #4
        dann sparst du das anschließende zusammenfügen mehrerer array.
        tust du nicht, weil es sowieso eine trennung nach

        - zeilen und nach
        - spalten

        geben muss.

        Kommentar


        • #5
          gedankenfehler... du hast recht. ich hab anscheinend die struktur der textdatei ignoriert.

          ist dann eine strukturierung der textdatei ala:

          "Überschrift1";"Datensatz1a";"Datensatz1b"
          "Überschrift2";"Datensatz2a";"Datensatz2b"

          oder so ähnlich nicht sinnvoller?

          Kommentar


          • #6
            Macht fgetcsv() da nicht Sinn?

            Kommentar


            • #7
              prego, hast schon recht. vor allem gibt es in den user notes zu der funktion bereits fertige lösungen dazu.

              Kommentar


              • #8
                Vielen Dank Prego,

                hat mit fgetcsv wunderbar funtkioniert die Datei nach Zeilen geordnet auszugeben.

                Mein verwendeter Code:



                <?php
                $row = 1;
                $handle = fopen ("daten.txt","r+");
                while ( ($data = fgetcsv ($handle, 2000, ";")) !== FALSE ) {
                $num = count ($data);

                print "<p> $num fields in line $row: <br>\n";
                $row++;

                for ($c=0; $c < $num; $c++) {
                print $data[$c] . "<br>\n";
                }
                }
                fclose ($handle);
                ?>


                Wie kann ich nun auf die ausgegebenen Daten zugreifen bzw. auf das Array das erzeugt wurde um die Daten dann von PHP in ein HTML-Gerüst einfügen zu lassen?

                Wo finde ich denn die User Notes (wenns dazu schon fertige Lösungen gibt brauchen wir uns hier ja nicht den Kopf zerbrechen)?

                Kommentar


                • #9
                  [...] bzw. auf das Array das erzeugt wurde um die Daten dann von PHP in ein HTML-Gerüst einfügen zu lassen?
                  das musst du erst mal erzeugen, denn sonst werden die ja zeile für zeile überschrieben. ich denke, du kannst folgendes versuchen: statt "$data = fgetcsv ..." mach mal
                  PHP-Code:
                  $data[] = fgetcsv // ... 
                  , damit die datensätze in $data bleiben. dann schau dir das array mittels print_r() an.

                  Wo finde ich denn die User Notes
                  im manual, z.b.:
                  http://php.speedbone.de/manual/en/fu...tcsv.php#56968

                  Kommentar


                  • #10
                    Ok ich habs so ähnlich gemacht:

                    <?php
                    $row = 1;
                    $handle = fopen ("daten.txt","r");
                    while ( ($data[] = fgetcsv ($handle, 2000, ";")) !== FALSE ) {
                    $num = count ($data);

                    print "<p> $num fields in line $row: <br>\n";
                    $row++;

                    for ($c=0; $c < $num; $c++) {
                    print $data[$c] . "<br>\n";
                    }
                    }
                    fclose ($handle);


                    print_r ($data[1]);
                    print_r ($data[2]);
                    print_r ($data[3]);
                    print_r ($data[4]);
                    print_r ($data[5]);
                    print_r ($data[6]);
                    ?>





                    Allerdings wird mir nun die Datei nicht mehr Zeilenweise ausgegeben. Sondern es wird nur noch in folgender Form angezeigt:

                    1 fields in line 1:
                    Array


                    2 fields in line 2:
                    Array
                    Array


                    3 fields in line 3:
                    Array
                    Array
                    Array

                    ...usw

                    Danach folgt dann die Anzeie des Print_r Befehls

                    Array ( [0] =>Überschrift1[1] =>Überschrift2[2] =>Überschrift3[3] =>Überschrift4 [4] =>Überschrift5 [5] =>Überschrift6[6] =>Überschrift7 [7] => Überschrift8 ) usw....


                    Nun wird mir also für jedes print_r eine Zeile ausgeschpuckt am Ende meiner Datei wiedergabe.php. So wie ich das sehe entspricht Momentan jede Zeile der TXT-Datei einem Array mit mehreren Werten, richtig?

                    Komisch ist nur das oben in der Ausgabe die Arrays aufgezählt werden, und das z.B Zeile 3 auch 3 Arrays hat und Zeile 4 4 Arrays hat. Eigentlich hat jede Zeile 8 Einträge die durch ein Semikolon getrennt sind.

                    Kommentar


                    • #11
                      alle print_r raus.
                      PHP-Code:
                      <pre><?php print_r($data); ?></pre>
                      ein mal nach der schleife.
                      danach hier zeigen, bitte.

                      Kommentar


                      • #12
                        Mein Code sieht jetzt wie folgt aus
                        <?php
                        $row = 1;
                        $handle = fopen ("otto.txt","r");
                        while ( ($data[] = fgetcsv ($handle, 2000, ";")) !== FALSE ) {
                        $num = count ($data);

                        print "<p> $num fields in line $row: <br>\n";
                        $row++;

                        for ($c=0; $c < $num; $c++) {
                        print $data[$c] . "<br>\n";
                        }
                        }
                        fclose ($handle);


                        print_r($data);
                        ?>


                        ausgegeben wird das hier:

                        1 fields in line 1:
                        Array


                        2 fields in line 2:
                        Array
                        Array


                        3 fields in line 3:
                        Array
                        Array
                        Array




                        ...usw bis alle Zeilen durch sind...

                        dann folgt wieder die Ausgabe des Print_r befehls:


                        Array ( [0] =>Überschrift1[1] =>Überschrift2[2] =>Überschrift3[3] =>Überschrift4 [4] =>Überschrift5 [5] =>Überschrift6[6] =>Überschrift7 [7] => Überschrift8 ) Array ( [1] =>Überschrift1[1] =>Überschrift2[2] =>Überschrift3[3] =>Überschrift4 [4] =>Überschrift5 [5] =>Überschrift6[6] =>Überschrift7 [7] => Überschrift8 ) usw....

                        ...usw bis alle Zeilen durch sind.

                        Ok wenn ich richtig verstehe werden mir nun für jedes Array die einzelnen Datenfelder wiedergegeben richtig? (in meinem Fall hat jedes Array 8 Datenfelder).

                        Kommentar


                        • #13
                          Ich denke doch das ist das was ich brauche. Wenn ich nicht Falsch liege dann kann ich doch jetzt mit fwrite() auf die einzelnen Arrays zugreifen oder und in eine HTML Datei schreiben oder??

                          Kommentar


                          • #14
                            freut mich das ich helfen konnte

                            Kommentar


                            • #15
                              zu früh gefreut:-)

                              wenn ich nun daran gehe die einzelnen Arrays in eine Datei zu schreiben so wird mir nicht der Wertr des arrays übergeben.

                              Ich machs wie folgt:


                              <?php
                              $row = 1;
                              $handle = fopen ("daten.txt","r");
                              while ( ($data[] = fgetcsv ($handle, 2000, ";")) !== FALSE ) {
                              $num = count ($data);

                              print "<p> $num fields in line $row: <br>\n";
                              $row++;

                              for ($c=0; $c < $num; $c++) {
                              print $data[$c] . "<br>\n";
                              }
                              }
                              fclose ($handle);


                              print_r($data);

                              $filename = 'test.txt';
                              $somecontent = "($data)";

                              // Sichergehen, dass die Datei existiert und beschreibbar ist
                              if (is_writable($filename)) {

                              // Wir öffnen $filename im "Anhänge" - Modus.
                              // Der Dateizeiger befindet sich am Ende der Datei, und
                              // dort wird $somecontent später mit fwrite() geschrieben.
                              if (!$handle = fopen($filename, "a")) {
                              print "Kann die Datei $filename nicht öffnen";
                              exit;
                              }

                              // Schreibe $somecontent in die geöffnete Datei.
                              if (!fwrite($handle, $somecontent)) {
                              print "Kann in die Datei $filename nicht schreiben";
                              exit;
                              }

                              print "Fertig, in Datei $filename wurde $somecontent geschrieben";

                              fclose($handle);

                              } else {
                              print "Die Datei $filename ist nicht schreibbar";
                              }





                              ?>


                              Klappt ohne Fehlermeldung. Nur wird mir wenn ich die test.txt aufrufe lediglich "array" angezeigt.

                              Vor allem müsste ich das ja so Bewerkstelligen das der Inhalt von Array 1 in Datei Test1.txt und der Inhalt von Array 2 in die Datei Test2.txt geschrieben wird usw... Ich teste das jetzt ertsmal mit .txt Dateien aber gibts denn nicht gleich eine Möglichkeit das in ein HTML Gerüst zu schreiben?

                              Kommentar

                              Lädt...
                              X