Oli_S: Daten aus .txt Datei in eine html Tabelle schreiben

Ich weis ich werde wahrscheinlich gleich gesteinigt, aber das was ich an Beispielen hier gefunden habe bekomme ich nicht so umgestrickt das es so funktioniert wie ich es gerne hätte.

Folgende Aufgabenstellung ist zu bewerkstelligen.

Auf einer „einfachen“ html-Seite mit dem Nahmen „aktuelle-wetterdaten.html“ sollen die Wetterdaten, die in einer Datendatei namens „all-sensors.txt“ zur Verfügung stehen, in einer Tabelle auf der HTML-Seite angezeigt werden.

Die TXT Datendatei wird automatisch per FTP zum Webserver hochgeladen so dass sie immer aktuell zu Verfügung steht.

Wird die HTML Seite „Aktuelle Wetterdaten“ aufgerufen sollen die Daten aus der TXT-Datei in die Tabelle importiert werden und von oben nach unten angezeigt werden.

Die Daten in der „all-sensors.txt“ Datendatei sehen wie folgt aus:

actual_thb0_temp_c 25.2
actual_thb0_dew_c 7.8
actual_thb0_cloudheight_m 2175
alltime_utcdate 20130412160503
day1_thb0_temp_c 24.4
u.s.w.

Die Zahlen hinter dem String z.B. "actual_thb0_temp_c" sind die Daten "25.2" welche in der Tabelle angezeigt werden sollen.

Wer kann mir bitte dazu Hilfestellung geben.

Grüße, Oli

  1. Welche serverseitigen Techniken stehen dir denn zur Verfügung?

    Mit PHP wäre fgetcsv eine gute Wahl um dein Format zu parsen.

    Der Aufruf müsste in etwa so aussehen:

    $weatherData = fgetcsv ( $handle, 0 , ' ', '' );

    Damit erhälst du ein zwei-dimensionales Array, das auf erster Ebene die Zeile auf zweiter Ebene die Spalten enthält. Du kannst also einfach über die erste Dimension iterieren und daraus die Tabelle-Zeilen erzeugen.

  2. Om nah hoo pez nyeetz, Oli_S!

    Ich weis ich werde wahrscheinlich gleich gesteinigt, aber das was ich an Beispielen hier gefunden habe bekomme ich nicht so umgestrickt das es so funktioniert wie ich es gerne hätte.

    Ich violett ;-)

    Im Ernst: Das ist nicht so ganz billig, wie es den Anschein hat. Zudem ist es im Themenbereich Datenbanken nicht richtig aufgehoben, weil du deine Daten ja per Text-Datei bekommst. Auch HTML kann das nicht leisten.

    Du brauchst also irgendeine Programmiersprache, etwa Perl oder PHP.

    Matthias

    --
    1/z ist kein Blatt Papier.

  3. Klar! So lange die Datei mit den Daten eine kleine ist würde ich wie 1UnitedPower auch PHP und die Verwendung von fgetcsv vorschlagen.

    Sollte die Textdatei aber mal (sehr viel) größer werden, dann würde ich dazu neigen, diese durch awk zu bearbeiten, dass für genau diese Fälle als "Spezialist" erschaffen wurde.

    Im Übrigen ließe sich mit einem Befehl

    ~> awk -d" " -f test.awk < test.txt > tabelle.html.part_01  
    
    

    und einem nachfolgendem

    ~> cat tabelle.html.part.01 tabelle.html.part_02 tabelle.html.part_03 > tabelle.html  
    
    

    eine statische HTML-Seite mit der Tabelle und dem vorherigen (part_01) und nachfolgendem (part_03) in einer Unix-Shell erstellen, was bei großen Serverlasten durch viele Abrufe einiges an Prozessorzeit spart. Zu dem lässt sich wahrscheinlich auch noch Einiges automatisieren, die Datei sieht ja nicht so aus als stamme die aus einem informationstechnischen Vakuum...

    (g)awk und auch cat sind Bestandteil der Unix-Tools für Windows.

    Datei: test.txt:

    actual_thb0_temp_c 25.2  
    actual_thb0_dew_c 7.8  
    actual_thb0_cloudheight_m 2175  
    alltime_utcdate 20130412160503  
    day1_thb0_temp_c 24.4
    

    Datei: test.awk:

    BEGIN {  
      print "<table id='foo' class='bar'>"  
    }  
      
    {  
      print "    <tr>";  
      print "        <td class='text'>"$1"</td>"  
      print "        <td class='zahl'>"$2"</td>"  
      print "    </tr>"  
    }  
      
    END {  
       print "</table>";  
    }
    

    Datei test.php:

    <html>  
    <head>  
        <title>Hurraaaa!</title>  
    <body>  
    <?php  
    system('awk -d" " -f test.awk < test.txt');  
    ?>  
    </body>  
    </html>
    

    Ergebnis:

    <html>  
    <head>  
        <title>Hurraaaa!</title>  
    <body>  
    <table id='foo' class='bar'>  
        <tr>  
            <td class='text'>actual_thb0_temp_c</td>  
            <td class='zahl'>25.2</td>  
        </tr>  
        <tr>  
            <td class='text'>actual_thb0_dew_c</td>  
            <td class='zahl'>7.8</td>  
        </tr>  
        <tr>  
            <td class='text'>actual_thb0_cloudheight_m</td>  
            <td class='zahl'>2175</td>  
        </tr>  
        <tr>  
            <td class='text'>alltime_utcdate</td>  
            <td class='zahl'>20130412160503</td>  
        </tr>  
        <tr>  
            <td class='text'>day1_thb0_temp_c</td>  
            <td class='zahl'>24.4</td>  
        </tr>  
    </table>  
    </body>  
    </html>
    

    Jörg Reinholz

    1. hi,

      Klar! So lange die Datei mit den Daten eine kleine ist würde ich wie 1UnitedPower auch PHP und die Verwendung von fgetcsv vorschlagen.

      Sollte die Textdatei aber mal (sehr viel) größer werden, dann würde ich dazu neigen, diese durch awk zu bearbeiten, dass für genau diese Fälle als "Spezialist" erschaffen wurde.

      Also, ich würde hier doch ein bischen anders herangehen, Zitat:

      Die TXT Datendatei wird automatisch per FTP zum Webserver hochgeladen so dass sie immer aktuell zu Verfügung steht.

      Zwei Widersprüche in einem Satz:
      TXT klingt nicht nach automatisch und FTP klingt nicht nach aktuell ;)

      Wie wärs damit, die Daten zur Laufzeit da abzuholen, wo sie erhoben werden, am Sensor!? Das können auch verteilte Systeme sein. Maschinenlesbare Datenströme könnten auch etwas kompakter serialisiert sein, anstelle Text.

      Schönen Abend,
      Horst

      PS: Basteleien wie obenstehend haben wir vor 10 Jahren gemacht. Ist die Zeit stehengeblieben?

      1. PS: Basteleien wie obenstehend haben wir vor 10 Jahren gemacht. Ist die Zeit stehengeblieben?

        Ich bin ein Freund davon, kleine Probleme mit kleinen Skripten zu lösen. Ich bin kein Freund  davon, Frameworks um kleine Probleme zu bauen nur damit sie größer aussehen.

        Jörg Reinholz

        1. Tach!

          Ich bin ein Freund davon, kleine Probleme mit kleinen Skripten zu lösen.

          Mir scheint, hier hast du ein kleines Problem als viel größer vermutet und daraufhin ein viel zu großes Werkzeug ins Spiel gebracht. Wenn die Temperaturdatei wirklich so groß ist, dass man spezielle Textdateiwerkzeuge ansetzen muss, dann ist dieses nicht komplett die Lösung des Problems, denn die erzeugte Ausgabe ist dann eine so große Tabelle, dass jeder Browser ins Schwitzen kommt. Solche Monster sind auch nicht anwenderfreundlich - jedenfalls nicht ohne Suche, Filter und Paginierung.

          Ich nehme mal an, dass der OP nicht gleich Daten für einen internationalen Wetterdienst mit "aktuelle Wetterdaten" meint und gehe davon aus, dass das Anliegen mit ein wenig PHP ohne externe Hilfsmittel problemlos lösbar ist.

          dedlfix.

          1. Tach!

            Ich bin ein Freund davon, kleine Probleme mit kleinen Skripten zu lösen.

            Mir scheint, hier hast du ein kleines Problem als viel größer vermutet und daraufhin ein viel zu großes Werkzeug ins Spiel gebracht.

            Ich nehme mal an, dass der OP nicht gleich Daten für einen internationalen Wetterdienst mit "aktuelle Wetterdaten" meint und gehe davon aus, dass das Anliegen mit ein wenig PHP ohne externe Hilfsmittel problemlos lösbar ist.

            Ich erinnere mal an meine Sätze:

            1.)

            Klar! So lange die Datei mit den Daten eine kleine ist würde ich wie 1UnitedPower auch PHP und die Verwendung von fgetcsv vorschlagen.

            2.)

            Sollte die Textdatei aber mal (sehr viel) größer werden, dann würde ich dazu neigen, diese durch awk zu bearbeiten, dass für genau diese Fälle als "Spezialist" erschaffen wurde.

            Und dann an den Titel:

            "Daten aus .txt Datei in eine html Tabelle schreiben"

            Das erste ist also die Zustimmung zu dem von 1UnitedPower geschriebenen, der TO solle PHP nebst fgetcsv() verwenden.

            Was dann folgt ist eine Ausführung dazu, wozu ich neigen würde, wenn "die Textdatei aber mal (sehr viel) größer werden" sollte.

            Leider gibt es hier nicht die Möglichkeit bestimmte Wörter zu unterstreichen. Und Du hast diese jedenfalls nicht wahrgenommen. Im übrigen ist der awk tatsächlich ein recht mächtiges Werkzeug. Vor allem aber ein schnelles.

            Jörg Reinholz

            1. Tach!

              Was dann folgt ist eine Ausführung dazu, wozu ich neigen würde, wenn "die Textdatei aber mal (sehr viel) größer werden" sollte.

              Ja, hast du einen Grund, anzunehmen dass sie "sehr viel" größer wird/ist? Oder wolltest du nur eine Lösung präsentieren, die zwar viele Daten effizient verarbeiten kann, die dann allerdings ungeachtet der Bedienbarkeit ausgefallen ist? Wie würde die Lösung aussehen, wenn Pagination und Filtern/Suchen hinzukommt?

              Im übrigen ist der awk tatsächlich ein recht mächtiges Werkzeug. Vor allem aber ein schnelles.

              Das mag auf so einige Unix-Werkzeuge zutreffen. Die Frage ist nur, was die Vorteile sind, zwar einen PHP-Rahmen zu bauen, dann aber Systembefehle aufzurufen, obwohl die Funktionalität (auch angesichts der zu erwartenden Datenmenge performant) mit PHP lösbar ist?

              dedlfix.

              1. Tach!

                Post!

                Wie würde die Lösung aussehen, wenn Pagination und Filtern/Suchen hinzukommt?

                man awk zeigt einige Möglichkeiten auf. Pagination wäre also nicht das kleinste Problem. Für Filtern und suchen würde ich bei großen Datenmengen in den hier zu vermutenden Strukturen (Wetterdaten, womöglich erweitert auf Zeit und Ort) dann wohl doch noch eine ganz andere Technik wählen -> SQL-Datenbank

                Das mag auf so einige Unix-Werkzeuge zutreffen. Die Frage ist nur, was die Vorteile sind,

                Das wäre vorliegend folgendes: Die Daten kommen ganz offensichtlich von einer Maschine, werden also irgendwo erzeugt. Ich frage mich nun, wieso die HTML-Parts dann (abgesehen vielleicht von einer vom Nutzer der Webseite einstellbaren Filterung) bei jedem Abruf einer Webseite neu erzeugt werden sollen. Wetterdaten haben nämlich (abgesehen von der vielleicht hauseigenen, solo betrieben, Wetterstion) sehr viele Nutzer.

                Deshalb hatte ich die Anregung untergebracht:

                Im Übrigen ließe sich mit einem Befehl

                ~> awk -d" " -f test.awk < test.txt > tabelle.html.part_02  
                
                

                und einem nachfolgendem

                ~> cat tabelle.html.part.01 tabelle.html.part_02 tabelle.html.part_03 > tabelle.html  
                
                

                eine statische HTML-Seite mit der Tabelle und dem vorherigen (part_01) und nachfolgendem (part_03) in einer Unix-Shell erstellen, was bei großen Serverlasten durch viele Abrufe einiges an Prozessorzeit spart. Zu dem lässt sich wahrscheinlich auch noch Einiges automatisieren, die Datei sieht ja nicht so aus als stamme die aus einem informationstechnischen Vakuum...

                zwar einen PHP-Rahmen zu bauen, dann aber Systembefehle aufzurufen, obwohl die Funktionalität (auch angesichts der zu erwartenden Datenmenge performant) mit PHP lösbar ist?

                Das lässt vorliegend die Handlungsfreiheit, den Schritt der Verarbeitung CSV -> Tabelle auf die Maschine zu verlegen, von der die Daten stammen (auf der dann auch PHP nicht installiert sein muss) und immer dann auszuführen wenn die Daten erzeugt werden - wozu auf dieser Maschine sehr wahrscheinlich nur sehr wenig angepasst werden muss. Und das auch noch ohne den wesentlichen Teil neu zu programmieren. Im PHP-Skript auf dem Webserver würde dann ein Include reichen.

                Ich weiß nicht so recht was Du hast. So richtig hilfreich ist Dein, von mir jedenfalls als solches empfundenes, grundloses Gekrittel nicht. Es gibt für die Verarbeitung strukturierter Daten im Text-Format zu HTML-Tabellen vielfältige Möglichkeiten. Ich habe mal solche vorgestellt, die
                a) jenseits von purem PHP liegen und
                b) in mindestens einigen Fällen eine bessere Lösung sein können.

                Das gerade, weil die Daten offensichtlich Wetterdaten sind.

                Das der TO sein vorgestelltes, aktuelles Problem mit PHP und fgetcsv() lösen soll habe ich deutlich geschrieben. Da er aber vorhersehbar über kurz oder lang auch andere, abweichende Probleme zu lösen hat - die sich mit "Daten aus .txt Datei in eine html Tabelle schreiben" beschreiben lassen - habe ich auch andere Lösungsmöglichkeiten vorgestellt. Ich finde in der Charta nichts, was mir das verbietet. Also nehme ich mein Recht aus Art. 5 GG wahr auch meine Meinung im Sinne von Lösungsvorschlägen für artverwandte Probleme mit(sic!) zu zeigen.

                Und ich vertrete die Auffassung, dass ich mich dafür vor Dir weder rechtfertigen noch bei Dir entschuldigen muss. Welche Laus trampelt Dir denn auf der Leber herum?

                Jörg Reinholz

                1. Tach!

                  Und ich vertrete die Auffassung, dass ich mich dafür vor Dir weder rechtfertigen noch bei Dir entschuldigen muss. Welche Laus trampelt Dir denn auf der Leber herum?

                  Keine. Nur weil du dich anscheinend immer gleich persönlich angegriffen fühlst, muss das nicht auch für andere gelten. Mein Anliegen ist lediglich, in der Sache den einen oder anderen Punkt herauszuarbeiten, Dinge zu konkretisieren oder Verbesserungsmöglichkeiten aufzuzeigen. Ich bin auch nicht der Meinung, dass du _dich_ rechtfertigen oder entschuldigen musst. Su solltest aber sehr wohl _deine Lösungen_ verteidigen können und dabei möglichst auf der sachlichen Ebenen bleiben und keinen persönlichen Angriff unterstellen.

                  dedlfix.

        2. Hi Jörg,

          PS: Basteleien wie obenstehend haben wir vor 10 Jahren gemacht. Ist die Zeit stehengeblieben?

          Ich bin ein Freund davon, kleine Probleme mit kleinen Skripten zu lösen. Ich bin kein Freund  davon, Frameworks um kleine Probleme zu bauen nur damit sie größer aussehen.

          Full Ack zu Letzterem! Wollen wir diese Art von Frameworks mal namentlich nennen? Nein, lieber nicht ;)

          Zu Ersterem: Mit vielen kleinen Skripts entsteht auch ein gewisses Rahmenwerk. Auf diese Art und Weise habe ich viele Jahre in Teamarbeit Tools entwickelt zum Management eines sehr großen Kundennetzwerkes mit über zwanzigtausend Routern und Switches.

          In dieser Zeit entwickelte ich die Grundlagen für ein Perl-Framework, mit welchem die Anzahl der Scripts auf ein Einziges reduziert wird. Dieses FW lebt heute auf rolfrost.de, anstelle einzelner Scripts tun Perl- oder PHP-Klassen ihren Dienst. Klassen, die nur noch wenige Zeilen Code enthalten...

          Viele Grüße,
          Horst

          1. In dieser Zeit entwickelte ich die Grundlagen für ein Perl-Framework, mit welchem die Anzahl der Scripts auf ein Einziges reduziert wird. Dieses FW lebt heute auf rolfrost.de, anstelle einzelner Scripts tun Perl- oder PHP-Klassen ihren Dienst. Klassen, die nur noch wenige Zeilen Code enthalten...

            Juhu!!! Eine NEUE INFORMATION!!!

            Schade, dass man als Poster den Link im Forum nicht blinken lassen kann... dann würde es noch wichtiger wirken ;-)