String splitten

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

  • String splitten

    Hi,

    ich habe verschiedene Strings (text-Feld aus DB ausgelesen) und möchte mir aus diesen die Uhrzeit rausholen.
    Alle Strings sehen in etwa so aus (ohne " "):
    "14-17 blablabla und dann weiter im text blablabla."

    Ich brauche daraus die Uhrzeit...
    1) die Startzeit
    2) die Endzeit
    3) den restlichen Text

    Wie kann ich das am besten realisieren?

    Danke, Rico.

  • #2
    Der String hat keine Delimiter?

    Wenn da ";" da zwischen wären oder so, könntest Du mit str_tok() drüberlaufen

    http://www.php.net/manual/de/function.strtok.php
    www.vino.la
    www.any-where.de
    www.gospical.de

    Kommentar


    • #3
      Es sind keine ; , oder so vorhanden, aber ich vermute, das nach der Zeit ein Zeilenumbruch kommt und dann gehts weiter mit Text.
      Wenn ich mir dies in Excel anzeigen lasse, steht hinter der Zeit so ein kleines Viereck.
      In der Konsole zeigt es mir nach der Zeit auf einer neuen Zeile den Text an. Das kann doch nur ein Zeilenumbruch bzw. Enter sein?!?

      Kommentar


      • #4
        PHP-Code:
        preg_match('/(\\d{1,2})-(\\d{1,2})/',$string,$array); 
        $array[1] sollte Anfang und $array[2] das Ende sein.
        Code nicht getestet. Aber reguläre Ausdrücke sollten in diesem Falle deine Freunde sein.

        Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          ...zu dem Suchmuster:
          Nach was wird genau gesucht - ich steige noch nicht so ganz dahinter.

          Wird im ersten Ausdruck nach einer Dezimalangabe (1 oder 2stellig), dann Trennung durch "-" und im zweiten Ausdruck nochmal Dezimalangabe(1 oder 2stellig) gesucht? ...und wenn ja, wo bleibt dann der restliche Text - kann ich den einfach $array[3] ausgeben?

          Wenn ich das so ausführe, bekomme ich eine Warnung: "preg_match() expects parameter 2 to be string". Was hat das zu sagen?
          Zuletzt geändert von magic_halli; 01.02.2006, 16:24.

          Kommentar


          • #6
            ...und wenn ja, wo bleibt dann der restliche Text
            Du hast nur von der Uhrzeit geschrieben und diese matched der RegExp. Wenn du ihn erweitern willst, dann leg los

            Gruss

            tobi
            EDIT:

            Sorry zu wenig genau gelesen. Wenn jeder String einer Zeile entspricht dann probier folgendes
            PHP-Code:
            preg_match('/(\d{1,2})-(\d{1,2})(.*)/',$string,$array); 
            Und der Text bis zum String Ende sollte in $array[3] gespeichert sein.


            Zuletzt geändert von jahlives; 01.02.2006, 16:27.
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #7
              Ok, also ich brauche danach auch den restlichen Text... Aber zu meinem Verständnisproblem: habe ich den Suchstring richtig interpretiert?

              Kommentar


              • #8
                Jop den haste richtig interpretiert

                Gruss

                tobi
                Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                Kommentar


                • #9
                  OK, soweit alles klar, verstanden und die Zeiten bekomme ich schonmal.

                  Jetzt kommt aber nach der Zeit ein NewLine und erst dann der Text.
                  Wie kann ich dieses NewLine quasi überspringen, um den restlichen Text auf $array[3] zu legen?

                  Kommentar


                  • #10
                    Du könntest mit den Modifikatoren für RegExp arbeiten
                    PHP-Code:
                    preg_match('/(\\d{1,2})-(\\d{1,2})(.*)/s',$string,$array);
                    //oder
                    preg_match('/(\\d{1,2})-(\\d{1,2})(.*)/m',$string,$array); 
                    Gruss

                    tobi

                    Manual zum Thema
                    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                    Kommentar


                    • #11
                      Ok, jetzt funktionierts.

                      Abschließendes Problem: Diese Zerlegung soll nun quasi auf Werte aus der DB angewandt werden. In einer for-Schleife werden sämtliche Werte aus der DB in Excelzellen zugewiesen (funktioniert soweit auch). Nur die Einbindung dieser Suchfunktion und die anschließende Zuweisung der Zeiten und des Textes an die entsprechenden Zellen klappt noch nicht so ganz. Warum???

                      Hier mal der relevante Code:
                      Code:
                      $query = "SELECT task_log_task, task_log_name, task_log_description, task_log_creator, task_log_hours, task_log_date FROM task_log WHERE task_log_task = '113'";
                      $result = mysql_query($query) or die("Anfrage fehlgeschlagen: " . mysql_error());
                      ...
                      for ($i=0; $value = mysql_fetch_array($result); $i++){
                          $cell_date = $sheets->Cells($i+15,3) ;                                      //Select the cell_date for date C15 (Row,Column)
                          $cell_date->activate;                                                       //Activate the cell_date 
                          $cell_start = $sheets->Cells($i+15,4);                                      //Select the cell_start for starttime D15 (Row,Column)
                          $cell_start->activate;                                                      //Activate the cell_start
                          $cell_desc = $sheets->Cells($i+15,11) ;                                     //Select the cell_desc for date K15 (Row,Column)
                          $cell_desc->activate;                                                       //Activate the cell_desc  
                          $cell_date->value = $value["task_log_date"];                                //value for cell_date
                          $cell_desc->value = $value["task_log_description"];                         //value for cell_desc
                          
                      
                          $time = $value["task_log_description"];
                          preg_match('/(\d{1,2})-(\d{1,2})(.*)/s',$time,$array);                               //Suchstring
                          [COLOR=red]$start = $array[1];[/COLOR]                                                //Selection der Startzeit
                          $cell_start->value = $start;                                           //Zuweisung der Startzeit
                      }
                      Alle anderen Einträge werden korrekt vorgenommen, nur die rot markierte Zeile wirft einen Fehler aus ("Undefined Offset: 1") und die anschließende Wertzuweisung erfolgt nicht korrekt. Dort stehen in jeder Zelle nur Nullen, aber keine vorher ausgelesenen Zeiten!!!

                      HILFE!!!

                      Kommentar

                      Lädt...
                      X