Zeichenkette trennen

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

  • Zeichenkette trennen

    Hallo,


    mal wieder, warum würde ich das sonst schreiben, stehe ich vor einem grossen, schwarzen Loch.

    Ich möchte gerne eine (bzw. 2 versch.) Zeichenketten aufsplitten doch irgendwie scheint mir das mit split() nicht zu gehen - jedenfalls lese ich das so aus dem manual heraus.

    Die Zeichenkette kann folgende beiden Varianten haben:

    16 2(2 / 0 / 0 / 0) 17 15(6 / 0 / 9 / 0)
    oder
    0 - 0 0(0 / 0 / 0 / 0)

    Ich möchte nun aus der ersten zur weiterverarbeitung folgendes haben:
    var1 = 16
    var2 = 2
    var3 = (2 / 0 / 0 / 0)
    var4 = 17
    var5 = 15
    var6 = (6 / 0 / 9 / 0)

    oder aus der anderen Variante

    var1 = 0
    var2 = -
    var3 = 0
    var4 = 0
    var5 = (0 / 0 / 0 / 0)


    Ich glaube, wie bereits erwähnt, nicht, dass ich das so mit split() hinbekomme und nun erhoffe ich mir einen guten Lösungsansatz wie ich das machen könnte.


    Gruss & Danke

  • #2
    Hast du schonmal mit Regulären Ausdrücken (Regex) gearbeitet? Das scheint mir in dem Fall um Längen angebrachter, als bei diesem "Muster" einen String-Funktionen-Krampf auszuarbeiten.

    Grüße
    Nieder mit der Camel Case-Konvention

    Kommentar


    • #3
      Ja, aber nur im 'einfachen' gebrauch, zB. um Quelltext auszulesen und eine vorher bestimmte Stelle ausfindig zu machen. Nur für solche Zwecke, also das 'handelsübliche' preg_match() ...

      Sonst habe ich mich in dieser Materie bisher nicht weiter rein gelesen.

      Danke für den Link, aber English kann ich besser schlecht als gut. Mach' mich also gleich auf die Suche nach etwas ähnlichem in Deutsch.

      Danke schon.

      Kommentar


      • #4
        Hi,

        @Griecherus: slpit() arbeitet mit Regex

        @TS:

        Da ich persöhnlich gerade nicht wüsste, wie man das ganze mit einem Regex machen kann(falls überhaupt):
        Erst die Klammern rausfiltern und den Rest per Leerzeichen exploden .. allerdings musst du wissen, wo die Klammern waren, bzw. welche Zeichen davor und danach kommen, damit du im Array die Klammern wieder einfügen kannst..

        mfg

        Kommentar


        • #5
          Ich würde einen endlichen Automaten darauf ansetzen.
          Zuletzt geändert von combie; 29.04.2008, 22:11.
          Wir werden alle sterben

          Kommentar


          • #6
            Hm..., möglich wenn auch irgendwie - so denke ich mir grade - sehr aufwändig bzw. umständlich.
            Würde ich nun also aus
            16 2(2 / 0 / 0 / 0) 17 15(6 / 0 / 9 / 0)
            die Klammern ziehen und danach die Leerzeichen exploden bekäme ich so einiges zurück
            16
            2
            2
            /
            0
            /
            0
            /
            0
            17
            15
            6
            /
            0
            /
            9
            /
            0

            Dass dann wieder an die richtige Stelle fummeln, die Klammern wieder einfügen, ....

            Gibts da auch einen kürzeren Weg? *g*

            Ansich aber schonmal eine Idee mit der ich etwas anfangen könnte - Danke!


            edit:
            @combie

            Die Google-Suche führte mich direkt auf die Schulbank zurück
            http://www.hsg-kl.de/faecher/inf/mat...einf/index.php

            Manche Denker müssen echt langeweile haben wenn sie sich sowas ausdenken. *g* Scheint mir.., wie soll ich sagen, etwas zu neu und/oder hoch für mich zu sein - oder habe ich aufgrund der müdigkeit einfach Probleme beim Auffassen des Stoffs?
            Zuletzt geändert von medium22; 29.04.2008, 22:11.

            Kommentar


            • #7
              @medium:

              Ich meinte die Klammern sammt Inhalt rausfiltern .. und dabei auch exploden ..

              Dann hast du jeweils den Part vor und hinter einer Klammer ^^..
              Kannst alles weiter exploden usw.

              Aber der endliche Automat würde auch funktionieren^^


              mfg

              Kommentar


              • #8
                Manche Denker müssen echt langeweile haben wenn sie sich sowas ausdenken. *g* Scheint mir..
                Nee... das ist ein allgemein übliches Konzept.
                Die meisten Parser arbeiten so.
                (Der PHP Parser bestimmt auch)

                Hier mal auf die Schnelle zusammengestoppelt:


                PHP-Code:
                <?php
                error_reporting
                (E_ALL);
                ini_set('display_errors'TRUE); // evtl. hilfreich


                define('Z_INSTRING' ,0);
                define('Z_INKLAMMER',1);

                function 
                sp_expand($string)
                {
                  
                // $string   = trim($string);
                  
                $salat    str_split($string);
                  
                $zustand  Z_INSTRING ;
                  
                $zeile    '';
                  
                $result   = array();
                  
                  foreach(
                $salat as $char)
                  {
                    switch (
                $zustand)
                    {
                      case 
                Z_INSTRING:
                                  if(
                $char === ' ')
                                  {
                                    if(
                strlen($zeile)>0)
                                    {
                                      
                $result[] = $zeile;
                                      
                $zeile    '';
                                    }
                                  }elseif(
                $char === '(')
                                  {
                                    
                $result[] = $zeile;
                                    
                $zeile    $char;
                                    
                $zustand  Z_INKLAMMER;
                                  }else  
                $zeile    .= $char;
                                  break;

                      case 
                Z_INKLAMMER:
                                  if(
                $char === ')')
                                  {
                                    
                $zeile   .= $char;
                                    
                $result[] = $zeile;
                                    
                $zeile    '';
                                    
                $zustand  Z_INSTRING;
                                  }else 
                $zeile    .= $char;
                                  break;
                    }
                  }
                  if(
                strlen($zeile)>0$result[] = $zeile;
                  return 
                $result;
                }

                ?>
                <pre>
                <?php
                  var_export
                (sp_expand('16 2(2 / 0 / 0 / 0) 17 15(6 / 0 / 9 / 0)'))
                ?>
                </pre>
                <pre>
                <?php
                  var_export
                (sp_expand('0 - 0 0(0 / 0 / 0 / 0)'))
                ?>
                </pre>
                Wir werden alle sterben

                Kommentar


                • #9
                  Ui - Super! Danke!

                  Habe das eben mal ausprobiert und trotz mehrerer verschiedener änderungen bekomme ich immer einen Fatal Error. Belasse ich es wie oben geschrieben, so ist er in Zeile 12 zu finden

                  Code:
                  Fatal error:  Call to undefined function:  str_split() in /blabla/foo/bar.php on line 12

                  Kommentar


                  • #10
                    Tja..
                    Ich habe meine PHP4 Unterstützung vollständig eingestellt, also must du damit selber fertig werden....

                    Tipp 1:
                    Handbuch lesen!!
                    http://de.php.net/manual/de/function...plit.php#61928

                    Tipp2:
                    Bei dem PEAR Gedöns gibts ein "kompatibilitäts" Paket

                    Tipp3:
                    Du könntest auf eine for Schleife umbauen
                    Wir werden alle sterben

                    Kommentar


                    • #11
                      Habs auch unter PHP4 laufen lassen, nun aber in ein Verzeichnis verschoben, welches mit der 5er-Version läuft. Da funktioniert das ganz wunderbar.


                      Sobald ich das ganze so habe wie ich es mir vorstelle, werde ich das hier posten.

                      Danke noch. :-)

                      Kommentar


                      • #12
                        Aloha,


                        Da ich 'nur' ein Hostingpaket habe, konnte ich leider keine wesentlichen Konfigurationen ändern, also musste ich auf andere Mittel ausweichen.

                        Der o.g. Fehler bzgl. str_split() lies sich mittels einer zusätzlichen Funktion beheben.

                        PHP-Code:
                        if (!function_exists('str_split')) {
                             function 
                        str_split($str) {
                                  
                        $arr = array();
                                  if (
                        is_string($str)) {
                                       for (
                        $i 0$i strlen($str); $i++) {
                                            
                        array_push($arr$str[$i]);
                                       }
                                  }
                                  return 
                        $arr;
                             }          

                        Danke nochmal für die Unterstützung bzw. Hilfe - funktioniert genau so wie ich mir das vorgestellt habe.

                        Kommentar


                        • #13
                          Original geschrieben von medium22
                          Aloha,


                          Da ich 'nur' ein Hostingpaket habe, konnte ich leider keine wesentlichen Konfigurationen ändern, also musste ich auf andere Mittel ausweichen.

                          Der o.g. Fehler bzgl. str_split() lies sich mittels einer zusätzlichen Funktion beheben.

                          PHP-Code:
                          if (!function_exists('str_split')) {
                               function 
                          str_split($str) {
                                    
                          $arr = array();
                                    if (
                          is_string($str)) {
                                         for (
                          $i 0$i strlen($str); $i++) {
                                              
                          array_push($arr$str[$i]);
                                         }
                                    }
                                    return 
                          $arr;
                               }          

                          Danke nochmal für die Unterstützung bzw. Hilfe - funktioniert genau so wie ich mir das vorgestellt habe.
                          Da sollte meines Erachtens nach
                          PHP-Code:
                          preg_match_all('/./s'$str$matches); 
                          bzw.
                          PHP-Code:
                          preg_match_all('/.{1,' $split_length '}/s'$str$matches); 
                          (falls der optionale Parameter $split_length [siehe Manual] gewünscht wird)
                          performanter sein.

                          Grüße
                          Zuletzt geändert von Griecherus; 02.05.2008, 15:31.
                          Nieder mit der Camel Case-Konvention

                          Kommentar


                          • #14
                            EDIT:
                            Sorry 4 Doppelpost
                            Nieder mit der Camel Case-Konvention

                            Kommentar


                            • #15
                              @medium22
                              Deine Funktion entspricht deinen Anforderungen, aber nicht der Spezifikation.

                              Hier eine universellere:
                              PHP-Code:
                              if(!function_exists('str_split'))
                              {
                                function 
                              str_split($string,$split_length=1)
                                {
                                  
                              $result = array();
                                  for(
                              $i 0$i strlen($text); $i += $split_length)
                                    
                              $result[] = substr($string,$i,$split_length);
                                  return 
                              $result;
                                }

                              Wir werden alle sterben

                              Kommentar

                              Lädt...
                              X