Ankündigung

Einklappen
Keine Ankündigung bisher.

Werte aus Text lesen

Einklappen

Neue Werbung 2019

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

  • Werte aus Text lesen

    Hallo ich bin neu in diesem Forum und auch in der PHP Welt.
    Ich habe mir natürlich zum Anfang auch nicht die leichteste übing rausgesucht und möchte Messwerte aus einer Webseite auslesen.

    Bisher bin ich soweit das ich mir die mir die entsprechenden Werte in ein Array schreibe allerdings ist da noch soviel overhead dabei den ich beschneiden muss .

    also ich mache zur zeit folgendes
    Code:
    $url = 'http://192.168.179.21/GRAFIK.htm';
    
    // URL öffnen
    $seite = @fopen ($url,"r");
    if (!$seite) {
       echo "URL konnte nicht geöffnet werden.n";
    }  else {
       echo "alles ok";
    
    $url_2 = "http://192.168.179.21/GRAFIK1.htm";
    
    $inhalt = file_get_contents($url_2);
    
       //echo "$inhalt";
    
    $tmp = explode('</div>', $inhalt ); 
    
    $temp = substr($tmp[0], -10 );
    
    	echo $temp;
    	/*echo $tmp[1];
    	echo $tmp[2];
    	echo $tmp[3];
    	echo $tmp[4];
    	echo $tmp[5];
    	echo $tmp[6];
    	echo $tmp[7];
    	echo $tmp[8];
    	echo $tmp[9];
    	echo $tmp[10];
    	echo $tmp[11];
    	echo $tmp[12];
    	echo $tmp[13];
    	echo $tmp[14];
    	echo $tmp[15];
    	echo $tmp[16];
    	echo $tmp[17];
    	echo $tmp[18];
    	echo $tmp[19];
    	echo $tmp[20];
    	echo $tmp[21];
    	echo $tmp[22];
    	echo $tmp[23];
    	echo $tmp[24];
    	echo $tmp[25];
    	echo $tmp[26];
    	echo $tmp[27];
    die echos dienen nur der Ausgabe der Werte um sie mir anzuzeigen

    Die ausgabe ist wie Folgt
    Code:
    <div class="style1" id="pos01">27,7&deg;C
    <div class="style2" id="pos02">0,7&deg;C
    
    usw.....
    die Frage die ich mir stelle ist wie bekomme ich alles was links von > steht aus dem String geschnitten.

    eine feste Angabe der Länge bei substr ist nicht möglich das sich die Temperaturwerte ändern und auch mal 2 oder 3 stellig sind.

    Gurß Philo

  • #2
    Mit strpos, strlen und substr sollte das sogar für einen Anfänger möglich sein.
    Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

    Kommentar


    • #3
      PHP-Code:
      $url 'http://192.168.179.21/GRAFIK.htm';

      // URL öffnen
      $seite = @fopen ($url,"r");
      if (!
      $seite) {
         echo 
      "URL konnte nicht geöffnet werden.n";
      }  else {
         echo 
      "alles ok";

      $url_2 "http://192.168.179.21/GRAFIK1.htm";

      $inhalt file_get_contents($url_2); 
      Warum zwei mal öffnen auf zwei Arten?


      PHP-Code:
      echo $temp;
      echo 
      $tmp[1];
      echo 
      $tmp[2];
      echo 
      $tmp[3];
      echo 
      $tmp[4];
      // ...
      echo $tmp[27]; 
      die echos dienen nur der Ausgabe der Werte um sie mir anzuzeigen
      PHP-Code:
      print_r($tmp); 
      The string "()()" is not palindrom but the String "())(" is.

      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        Hallo

        @ uha Eigentlich bin ich in der SPS Welt mit struckturietem Text und Awl unterwegs. php ist da um einiges mächtiger und von der Vielefalt der Funkionen ist "Mann" erst einmal erschlagen. Daher hoffte ich auf soetwas wie eine Funktion wie explode nur in die anderen Richtung quasie " Suche den Srting xyz und nimm die nur die Zahlen danach. Aber ich werde Deinen Ansatz verfolgen
        Danke


        @hausel

        2 öffnen

        Naja mit dem ersten konnte ich zumindestens erst eimal festellen ob die Seite verfügbar ist bei dem 2 Habe ich das noch nicht gefunden geht das genau so oder kann ich den ersten Verusch auch mit Explode Verwenden oder geht das ev eleganter.

        und Danke für den Hinweis mit Print

        Kommentar


        • #5
          Versuche es mal mit
          PHP-Code:
          <?php

            $url 
          "http://192.168.179.21/GRAFIK1.htm";

            
          $data file_get_contents($url); 
            
            
          preg_match_all('/<div[^>]*>(.*)<\/div>/iU'$data$matches);

            foreach(
          $matches[1] as $val)
                  echo 
          $val."<br>";
          ?>
          Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

          Kommentar


          • #6
            Hallo uha

            mein letzter Versuch sah so aus

            PHP-Code:
            <?php
            $url 
            "http://192.168.179.21/GRAFIK1.htm";

            // URL öffnen
            $inhalt file_get_contents($url);

            // Wenn eite erreichbar dann auswerten 
            if (!$inhalt) {
               echo 
            "URL konnte nicht geöffnet werden";
            }      else {
                   echo 
            "alles ok";

                   
            //echo "$inhalt";

                
            $tmp explode('</div>'"$inhalt); 
                
                
            $max count($tmp); // Anzahl der Plätze im Array ermitteln 

                
                    
            for($i=0;$i<$max;$i++){
                    
                    
            $pos[$i] = strpos("$tmp[$i]","id="pos"");
                    
                    print(
            "$pos[$i]");
                    
                    
                    }

                    
                
                
            //print("$max"); // ausgabe array anzahl
                //print_r ($pos); // ausgabe der pos 

            }  exit;
            ?>
            Deins ist da durchaus schlanker und auch die Ausgabe sieht besser aus.
            Zunächst einmal danke.

            Kannst du mir bitte erklären was die Zeichenkette '/<div[^>]*>(.*)<\/div>/iU' edeutet

            Laut der Beschreibung von preg_match_all ist das die Zeichenkette nach der gesucht werden soll. Ich gehe mal davon aus das ist auch so aber nur die halbe Wahrheit. Kannst Du mir die Kette bitte entschlüsseln
            warum am Anfang /
            <div das kann ich finden
            bei [^>]*>(.*)<\/ verstehe ich nur Bahnhof
            div> als abschließenden Tag finde ich auch
            aber warum am Ende /iU

            Sorry für soviel Fragen

            Kommentar


            • #7
              Ich gestehe, dass das Script auch nur aus meinem Fundus gesammelter Scripte ist. Bin selber jemand, der reguläre Ausdrücke meidet wo es nur geht
              Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

              Kommentar


              • #8
                Hier findest du meines Erachtens einge gute Übersicht dazu: http://php.net/manual/de/reference.p...ern.syntax.php

                Ich reisse es mal grob an:

                - Der Slash / davor und danach sind die Begrenzer (delimiter) http://php.net/manual/de/regexp.refe...delimiters.php

                - das /iU sind modifier, Details: http://php.net/manual/de/reference.p....modifiers.php

                Zum Ausdruck selbst:

                - das [ ] ist eine Zeichenklasse (character class) die matched genau ein Zeichen, ein ^ ("Zirkumflex" oder "Hochdach") in der Zeichenklasse(!) negiert http://php.net/manual/de/regexp.refe...er-classes.php
                (Vorsicht.. Ausserhalb von Zeichenklassen [ ] bedeutet das ^ "Stringbeginn")

                - ein Punkt steht für ein beliebiges Zeichen http://php.net/manual/de/regexp.reference.dot.php

                - ein Stern danach heißt das dieses eine Zeichen kein bis unendlich oft vorkommen kann http://php.net/manual/de/regexp.refe...repetition.php

                - der eine Backslash in <\/div> escaped den / weil er ja auch delimiter ist, dh würdest du andere Begrenzer verwenden zB # dann wäre das nicht nötig, weil die Begrenzer nicht im Pattern vorkommen zB
                Code:
                #<div[^>]*>(.*)</div>#
                Schau mal hier, wenn du das Pattern eingibst, steht rechts oben, was es bedeutet https://www.regex101.com/r/oI5eS9/1

                LG
                The string "()()" is not palindrom but the String "())(" is.

                Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                PHP.de Wissenssammlung | Kein Support per PN

                Kommentar


                • #9
                  Also erst ein mal vielen Dank.

                  @ hausel vielen Dank für die Links und die Erklärungen
                  da habe ich erst einmal was zu verdauen

                  Dann ziehe ich moch mal ein paar Stunden zurück und este mal ein bischen

                  Kommentar


                  • #10
                    Folgende Variante kannst du dir auch mal anschauen Ich nehme mal an das uha auch ehr in diese Richtung selber arbeiten würde Damit vermeidest du die Nutzung von reg.Exp. und gehst direkt über HTML DOM.

                    http://www.phpro.org/examples/Parse-...P-And-DOM.html

                    Kommentar


                    • #11
                      Ja richtig, auf diesen Hinweis (das man Regex eigentlich nicht zum Parsen von HTML verwendet) vergesse ich echt jedes mal
                      The string "()()" is not palindrom but the String "())(" is.

                      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                      PHP.de Wissenssammlung | Kein Support per PN

                      Kommentar


                      • #12
                        Hallo Danke für den Link mit dem Dom das werde ich mir auch anschauen sieht im ersten Moment für mich leichter verständlich aus.


                        PS.: wer ist denn Mister Ad immer nur leere Post´s oder geheim Tinte ?

                        Kommentar


                        • #13
                          Zitat von Philo5 Beitrag anzeigen
                          PS.: wer ist denn Mister Ad immer nur leere Post´s oder geheim Tinte ?
                          Eine Art Werbebot, der immer mal wieder Posts , die Werbung enthalten postet.
                          (vermutlich von Seiten der Betreiber so gemacht, um Geld einzunehmen...)
                          Wenn du dir die Anwender deiner Programme als Idioten vorstellst, werden auch nur Idioten deine Programme verwenden.
                          - Linus Torvalds

                          Kommentar


                          • #14
                            Wenn man (ich glaube es waren) über 100 Postings hat, dann sieht man den Ad nicht mehr.
                            The string "()()" is not palindrom but the String "())(" is.

                            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                            PHP.de Wissenssammlung | Kein Support per PN

                            Kommentar

                            Lädt...
                            X