Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP char prüfen ob LF

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

    PHP char prüfen ob LF

    Hallo,
    sorry.
    Ich will sonst nicht mit solchen Kleinigkeiten nerven aber.....

    ich möchte überprüfen ob eine variable ein LF (line feed, \n, 0xA) beinhaltet
    Aber ich mach irgendwas falsch.

    if($char == ord("\n")) { .....
    if($char == '\n') { .....
    if($char == 0xA) { .....
    if($char == 10) { .....
    funkt alles nicht.

    Hat jemand eine Idee?
    Gruß

    #2
    Du prüfst ja auch ob die Variable genau LF ist. Was willst Du denn erreichen? Soll es ersetzt werden, als Trenner fungieren etc?

    Kommentar


      #3
      Wenn du tatsächlich auf Gleichheit prüfen willst, dann steht die Lösung doch genau als Beispiel zur ord() Funktion in der offiziellen PHP Doku:

      http://php.net/manual/de/function.ord.php

      PHP-Code:
      <?php
      $str 
      "\n";
      if (
      ord($str) == 10) {
          echo 
      "Das erste Zeichen von \$str ist ein Zeilenvorschub.\n";
      }
      ?>


      Wenn du es ersetzen oder entfernen willst, dann schau die trim() und/oder str_replace() an.

      Kommentar


        #4
        Wenn Du auf das Vorkommen des Strings in deiner Variable (egal welche Position) prüfen willst, ginge das mit:
        Code:
        if(strstr($variable, "\n"))

        Kommentar


          #5
          Hallo,
          mit dem Beispiel von der Funktion ord geht es jetzt.
          Ich habe einen Denkfehler drin gehabt.
          Danke für eure Hilfe
          Gruß

          Kommentar


            #6
            Hallo nochmal,



            leider hab ich noch immer Probleme.


            Hier meine Anwendung


            Ich lese von einem RS232-LAN Converter vom Netzwerk einen String ein.


            Hier der String der alle 5 Sekunden abgeholt werden kann. $7308;63.67* + CR + LF


            Der hintere Teil 63.67 stellt die Prozentangabe des Füllstandes meiner Zistene dar.

            ==> Hier 63,67%

            $char = fgetc($sock);

            ==> Hier lese ich ein Zeichen aus. Wenn ich es richtig verstehe sollte das eine INT-Zahl welches das Zeichen in ASCII codiert beinhaltet.




            elseif(ord ($char) == 59) {
            ==> Ich suche nach dem Vorkommen des Zeichens ; (59d)

            $iLevel = 0;
            ==> Bei Finden stelle ich den Counter auf 0

            $strLevel[$iLevel ] = $char;
            ==> und lese weitere Zeichen in die String Variable

            elseif(ord ($char) == 42) {
            ==> Bis das Zeichen * (42d) kommt

            $Level = floatval($strLevel);
            ==> Ich wandle das von einer FLoat String in eine Numerische variable...
            ==> .......


            So mein Verständnis wie ich solche Sachen immer in C abhandle.
            OK es gibt bestimmt schönere Wege. ;-)

            Ich habe anscheinend ein Typproblem das das ausgelesene Zeichen kein Ascii Zeichen oder so ist.
            Ich weiß ja auch das ein String mit einer 0 abgeschlossen werden muß
            ==> $strLevel[$iLevel ] = 0;

            Habe auch schon versucht mit den beiden Funktionen ord() und chr() hinzubiegen aber ohne Erfolg.


            Grundlagen:
            $strLevel = '013.47';
            ==> ist meines Verständnisses nach eine Variable ohne genaueren Typ (Variant)
            ==> Wird mit dem String '013.47'gefüttert

            $strLevel[0] = 50; //Zahl 2 Ascii codiert
            $strLevel[1] = 54; //Zahl 6 Ascii codiert
            $strLevel[2] = 0; //String Ende Zeichen

            Muß ich PHP erst sagen das das Ganze ein Array vom Typ char ==> String wird oder wo ist mein Denkfehler?

            Danke für eure Hilfe.

            Kommentar


              #7
              Warum holst Du nur genau einen Char ab und nicht die ganze Zeile mit fgets? Anschließend kannst Du das total simpel per RegExp lösen.

              PHP-Code:
              <?php

              $str 
              '7308;63.67*' "\r\n";
              preg_match('/;(.*?)\*/m'$str$matches);
              $result $matches[1];

              Kommentar


                #8
                Warum liest du nicht zeilenweise mit fgets() und machst dann auf die Zeile ein trim() und dann z.B. ein explode() und substr().

                Zum Beispiel so ... (ungetestet)

                PHP-Code:

                $line 
                fgets($sock,1024);
                $line trim($line);
                $items explode(';',$line);
                $fill_level substr($items[1],0,strpos($items[1].'*')-1); 
                s01iD war schneller Mit regexp geht's natürlich auch ...

                Kommentar


                  #9
                  Hallo,

                  ihr habt recht gehabt.
                  Ist auf Anhieb gegangen.
                  Aber bezüglich der Speicherung von String im Memory.
                  Liege ich hier ganz falsch?

                  Gruß

                  Kommentar


                    #10
                    PHP-Code:
                    Grundlagen:
                    $strLevel '013.47';
                    ==> 
                    ist meines Verständnisses nach eine Variable ohne genaueren Typ (Variant)
                    ==> 
                    Wird mit dem String '013.47'gefüttert

                    $strLevel
                    [0] = 50//Zahl 2 Ascii codiert
                    $strLevel[1] = 54//Zahl 6 Ascii codiert
                    $strLevel[2] = 0//String Ende Zeichen 
                    Aus dem Code unten ergibt sich eigentlich:

                    PHP-Code:
                    $strLevel[0] => 0;
                    $strLevel[1] => 1;
                    $strLevel[2] => 3
                    Ich verstehe deine Kommentare hier auch nicht. Die Zahlen 2 und 6 kommen in Deinem String doch gar nicht vor?
                    Mit [$pos] liest Du das Zeichen an der jeweiligen Position des Strings aus. Da wird nichts Ascii codiert oder sonstwas.

                    Kommentar


                      #11
                      Ohh.
                      sorry.
                      habe das im Post falsch zusammen kopiert.

                      Aber dann liege doch nicht so falsch.

                      danke für eure Hilfe

                      Kommentar

                      Lädt...
                      X