Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Stringlänge

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

  • PHP Stringlänge

    Moin Moin,

    hier sind ja auch ein paar Programmierer ;)

    ich hab ganz viele Seriennummern so in etwa 35310500700102456 von der 3 bis 6 Ziffer kann ich den Typ des Gerätes bestimmen - also 105 wie kann ich das mit php umsetzen ? also er müsste immer die 4, 5 und 6 Ziffer auslesen.

    vielleicht kann mir einer helfen

    danke

  • #2
    Aw: PHP Stringlänge

    Hallo,
    schau dir mal substr() an!
    Code:
    <?php
    $var = '35310500700102456';
    $var = substr($var,-14,3);
    echo $var;
    ?>
    Und da es eventuell hilft, da ich es heute auch brauchte - um vorne oder hinten den String zu ergänzen str_pad()
    Grüße

    /edit: die Hochkommas zählen natürlich auch ;-)

    Kommentar


    • #3
      Aw: PHP Stringlänge

      Ist so aber schon ein wenigen "umständlich". Warum zählst Du von rechts -14 und nicht von links +3 ? Was, wenn die Seriennummer mal länger oder kürzer ist? Er sagte ja, es ist immer der Bereich 4, 5 und 6, also würde ich da von links zählen.

      echo substr('35310500700102456', 3, 3); // 105

      /edit: die Hochkommas zählen natürlich auch
      Wie meinst Du das? Wo sollen die Hochkommata zählen? Die zählen gar nicht ;-) Nur der Zähler beginnt bei 0, nicht bei 1 - somit ist Zeichen 4 auch Position 3 bzw. in Deiner Version Position -14 eben Zeichen -15.

      Kommentar


      • #4
        Aw: PHP Stringlänge

        Zitat von "Synonym" post=4586
        Was, wenn die Seriennummer mal länger oder kürzer ist?
        Zitat von "bazillus" post=4582
        Erwähnte ich aber schon im ersten Beitrag (der von mir!) und hätte dir auffallen können, schließlich hast Du ja sonst auch alles sehr genau gelesen ;-)

        Kommentar


        • #5
          Aw: PHP Stringlänge

          Ja klar, das habe ich gesehen, nur warum dieser Umweg. Da müsste man also definieren, dass eine Nummer immer z.B. 15 Stellen haben muss. Ist die länger, dann muss man was abschneiden, ist sie kürzer, dann muss man was anhängen. Das Ende der Nummer ist doch aber völlig egal, wenn man von links gesehen anfängt ;-) Gut, ganz egal ist es nicht, die Stellen 4,5 und 6 müssen natürlich vorhanden sein.

          Kommentar


          • #6
            Aw: PHP Stringlänge

            Zitat von "Synonym" post=4625
            Das Ende der Nummer ist doch aber völlig egal, wenn man von links gesehen anfängt ;-) Gut, ganz egal ist es nicht, die Stellen 4,5 und 6 müssen natürlich vorhanden sein.
            Der Anfang der Nummer ist auch egal, wenn man von rechts anfängt ;-) Genauso kann es bei beiden Versionen Probleme geben, sobald sich irgendwas an der Länge ändert. Wir wissen aber nicht, wenn sich was ändert, ob li oder re abgeschnitten/hinzugefügt wird. Es müsste also theoretisch in beiden Fällen eine Überprüfung der Länge durchgeführt werden und ergänzt, oder abgeschnitten werden.
            Deswegen ist es müßig über von li oder re zu diskutieren - wir wissen zu wenig über den Aufbau des Strings.
            Wenn der String immer so aufgebaut ist, funktionieren beide Versionen. Ich hab übrigens von re angefangen, da meistens von rechts nach links aufgefüllt wird.
            Also
            0001
            0002
            ...
            0010
            hat in diesem Falle aber keinen Einfluss... aber z.B. bei einer Zählschleife, wo man jeweils die letzte Nummer braucht um z.B. immer bei 0 oder 5 was auszugeben. Kommt halt einfach nur auf den Anwendungsfall an und wenn der String immer die gleiche Länge hat, ist unsere Diskussion überflüssig, da beides funktioniert. :bierchen:

            Grüße

            Kommentar


            • #7
              Aw: PHP Stringlänge

              Ja ne, er hatte ja geschrieben:
              "also er müsste immer die 4, 5 und 6 Ziffer auslesen."

              Also ist es egal ob oooXXXooo (4, 5 und 6 von 9) oder oooXXXoooooooo (4, 5 und 6 von 14) oder oooXXXooooooooooooooooooo (4, 5 und 6 von 25). Von links ist es also immer der gleiche Abstand. Wenn dem nicht so wäre, also die Position der Kennung unterschiedlich ist, dann funktioniert keine der Versionen, da man dann erst mal festlegen müsste, wo genau sich die Kennung befindet.

              Wenn es immer die gleiche Länge ist, dann ist es in der Tat schnuppe, da gehen beide Versionen.
              Ist die Länge variabel und die Position immer gleich, dann meine Version.
              Ist die Position und oder die Länge variabel, dann keine von beiden (ohne Angabe der speziellen Position).

              Kommentar


              • #8
                Aw: PHP Stringlänge

                danke ihr Freaks ;) - hab auch gleich das nächste - da ich die ganzen Seriennummern über einen CSV upload bekommen - möchte ich die Seriennummer auslesen aus der Seriennummer eben den Typ und beides dann in einer DB schreiben ;) ist das so richtig ?

                $uploadDir = 'fileadmin/';
                $uploadFile = $uploadDir . $_FILES['userfile']['name'];
                if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadFile)) {
                $csvFile = 'fileadmin/'.$_FILES['userfile']['name'];
                $seriennummern = file($csvFile);

                $value_array = array();
                foreach ($seriennumern as $serie) {
                list($id, $string) = explode(';', $serie);

                $typ = substr($string,-14,3);

                $value_array[] = $GLOBALS['TYPO3_DB']->exec_INSERTquery('tx_geraeteinfo',array(
                'pid'=>$this->id,
                'typ' => $typ,
                'serialnummer'=>$string
                ));
                }
                }

                Grüße

                Kommentar


                • #9
                  Aw: PHP Stringlänge

                  Also hier habe ich nun die Frage wohl nicht so ganz verstanden und von Typo3 habe ich keine Ahnung. Bei der Frage gehe ich aber mal davon aus, dass zu einmal die Seriennummer komplett und einmal nur die Kennung speichern willst, also einmal 35310500700102456 und einmal das zugehörige 105, oder?

                  Das CSV enthält pro Zeile wohl eine ID und einen mit Semikolon abgetrennten String. Der String ist die Seriennummer - soweit richtig?

                  Wenn ja, dann scheint es zumindest was die "Filterung" des Typs betrifft zu stimmen.
                  pid kommt vom System
                  typ ist der Typ (Stelle 4, 5 und 6)
                  string ist die komplette Seriennummer


                  Aber Achtung:
                  Ich kennen nun das CSV nicht und somit auch nicht dessen Aufbau.
                  Beachte das hier bezüglich files():
                  Jede Zeile in dem resultierenden Array enthält das Zeilenende, außer es wird FILE_IGNORE_NEW_LINES verwendet; daher müssen Sie trim() verwenden, falls das Zeilenende nicht vorhanden sein soll.
                  Wenn eine Zeile nun also nicht mit ";" endet und somit das explode greift, dann steht am Ende des Strings noch der Zeilenumbruch. Wenn Du dann von rechts -14 zählst und am Ende noch die Zeichen für das Zeilenende stehen, dann stimmt das Ergebnis nicht. Also teste das mal mit echo durch und nicht direkt mit INSERT. Oder verwende den entsprechenden FILE_IGNORE_NEW_LINES, trim() oder zähle von links +3 oder von recht (-14 - Zeilenende).

                  Sieht eine Zeile z.B. so aus
                  1;35310500700102456;
                  , dann wäre der TYP 105

                  Sieht die aber so aus:
                  1;35310500700102456
                  , dann ist der TYP 500 (weil am Ende zwei nicht sichtbare Zeichen für den Zeilenumbruch stehen)

                  Das ist mit ein Grund, warum ich von links und nicht von rechts zähle ;-)


                  Nachtrag: Du hast einen Schreibfehler. Einmal heißt es $seriennummern und einmal $seriennumern

                  Kommentar

                  Lädt...
                  X

                  Das Rechtliche
                  Impressum | Widerruf | Datenschutz | Disclaimer |