Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Text zerlegen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Text zerlegen

    Salü an alle hier im Forum.

    Hab da mal ne Frage: Wie kann ich folgendes Problem lösen.
    Ich lese eine Datei ein mit:
    PHP-Code:
    ....schnipp
     $read_error 
    "$verzeichnis/$errordatei";
     
    $fp = @fopen("$read_error""r") or die ("Keine Datei vorhanden"); 
      echo 
    fpassthru($fp);
    ....
    schnipp 
    Soweit so gut.
    Zur Anzeige kommt jetzt sowas:
    Code:
    [27-Aug-2010 10:14:15] PHP Parse error: syntax error, unexpected T_ELSE in /var/www/mf-beta/modules/miniGW/includes/messages.php on line 153 [27-Aug-2010 10:47:18] PHP Parse error: syntax error, unexpected $end in /var/www/mf-beta/modules/miniGW/includes/messages.php on line 154 [27-Aug-2010 10:58:44] PHP Parse error: syntax error, unexpected $end in /var/www/mf-beta/admin/modules/debuglog.php on line 31 411
    Das Problem was ich hab ist folgendes, das die Datei aber auch manchmal so aus sieht im Orginal.
    Code:
    [27-Aug-2010 10:14:15] PHP Parse error:  syntax error, unexpected T_ELSE in /var/www/mf-beta/modules/miniGW/includes/messages.php on line 153
    [27-Aug-2010 10:47:18] PHP Parse error:  syntax error, unexpected $end in /var/www/mf-beta/modules/miniGW/includes/messages.php on line 154
    [27-Aug-2010 10:58:44] PHP Parse error:  syntax error, unexpected $end in /var/www/mf-beta/admin/modules/debuglog.php on line 31
    [27-Aug-2010 11:13:36] PHP Parse error:  syntax error, unexpected T_STRING in /var/www/mf-beta/admin/modules/debuglog.php on line 52
    [27-Aug-2010 11:13:45] PHP Run-time notice:
      Undefined index:  logfile
      in /var/www/mf-beta/admin/modules/debuglog.php on line 43
    [27-Aug-2010 11:15:03] PHP Run-time notice:
      Undefined index:  logfile
      in /var/www/mf-beta/admin/modules/debuglog.php on line 43
    [27-Aug-2010 11:19:32] PHP Run-time warning:
      filetype(): Lstat failed for readme.txt
      in /var/www/mf-beta/admin/modules/debuglog.php on line 48
    [27-Aug-2010 11:19:32] PHP Run-time warning:
      filetype(): Lstat failed for .htaccess
      in /var/www/mf-beta/admin/modules/debuglog.php on line 48
    Jetzt möchte ich den Text aber so zerlegen das ich das Datum und das was bis zum nähchsten Datum kommt in eine Tabelle legen kann.
    Wie stell ich das bitte an?


    Merci für Eure Tips
    Grüsse an Euch Andreas


  • #2
    Parsen kannst du die Datei mit regulären Ausdrücken. Dazu ein Tutorial: Der RegExp-Evaluator - RegExp-Tutorial .
    http://hallophp.de

    Kommentar


    • #3
      ja toll.
      Ich hab extra im Einsteider Forum gepostet in der Hoffnung eine etwas gezieltere Hilfestellung zubekommen.

      Aber trotzdem Danke

      Kommentar


      • #4
        [...]in der Hoffnung eine etwas gezieltere Hilfestellung zubekommen.
        Und was stellst du dir darunter vor?

        php.de - Ankündigungen im Forum : PHP Einsteiger
        http://hallophp.de

        Kommentar


        • #5
          Die datei mit file('dateiname') in ein array packen, das Array dann mittels foreach() durchgehen.
          Wenn die aktuelle Zeile mit dem Datum beginnt, dann hast du einen Gruppenbruch, wenn nicht, dann musst du die aktuelle Zeile als Fortsetzung zur vorigen betrachten.

          Schneller gehts allerdings, wenn du die Datei mit file_get_contents komplett in einen String packst und den dann mit einer geeigneten Regex zerlegst (preg_match).
          PHP-Code:
          if ($var != 0) {
            
          $var 0;

          Kommentar


          • #6
            Also soweit geht es:
            Code:
            $vara = file("$read_error");
               foreach ($vara as $varb)
               {
                    echo "$varb<br />";
                }
            jetzt kommts:
            @Wolla: Wie soll ich das verstehen ? "Wenn die aktuelle Zeile mit dem Datum beginnt, dann hast du einen Gruppenbruch, wenn nicht, dann musst du die aktuelle Zeile als Fortsetzung zur vorigen betrachten."

            Danke

            Kommentar


            • #7
              Ob die Zeile mit einem Datum - dieses muss einem festen Muster entsprechen - beginnt, kannst du auch mit einem regulären Ausdruck feststellen. Andernfalls musst du die Zeile umständlich mit Stringfunktionen auseinandernehmen.
              http://hallophp.de

              Kommentar


              • #8
                Code:
                [27-Aug-2010 11:13:45] PHP Run-time notice: 
                     Undefined index: logfile 
                     in /var/www/mf-beta/admin/modules/debuglog.php on line 43
                Das ist von der Logik her eine einzige Fehlermeldung, die hast du dann aber in drei aufeinanderfolgenden Arrayelementen verteilt.
                PHP-Code:
                if ($var != 0) {
                  
                $var 0;

                Kommentar


                • #9
                  Es geht wohl um solche Einträge
                  Code:
                  [27-Aug-2010 11:13:45] PHP Run-time notice:
                    Undefined index:  logfile
                    in /var/www/mf-beta/admin/modules/debuglog.php on line 43
                  Diese kommen bei dir in 3 Arrayeinträgen an (durch die file() Funktion):
                  PHP-Code:
                  $array[0] = '[27-Aug-2010 11:13:45] PHP Run-time notice:';
                  $array[1] = '  Undefined index:  logfile';
                  $array[2] = '  in /var/www/mf-beta/admin/modules/debuglog.php on line 43'
                  Normalerweise sollte ja jede Zeile mit [<Datum> <Uhrzeit>]: beginnen, in diesen Fällen aber nicht. Hier setzt der Gruppenbruch an: Du untersuchst, ob die aktuell auszugebende Zeile mit einem Datum beginnt. Wenn NICHT, gehört die Zeile zur vorhergehenden.
                  Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                  Kommentar


                  • #10
                    mach du mal weiter Isteglitz
                    PHP-Code:
                    if ($var != 0) {
                      
                    $var 0;

                    Kommentar


                    • #11
                      @Asipak:
                      ja genau das Datum entspricht einem festen Muster und zwar so zB: [27-Aug-2010 11:19:32]
                      nur wie untersuche ich das jetzt ?
                      Da komm ich nicht mit


                      @Wolla: Wie kann man das verhindern ?


                      Hilfe ich steh auf dem Schlau

                      Kommentar


                      • #12
                        Reguläre Ausdrücke, wurde dir bereits mehrfach gesagt.
                        preg_match/preg_match_all anschauen. Da die Formatierung des Datums hübsch einheitlich ist, dürfte der reguläre Ausdruck auch nicht allzu kompliziert sein (Zeile beginnt mit [, dann folgen 2 Zahlen, ein Minus, drei Buchstaben, ...)

                        Erwarte aber bitte nicht, das dir dieser Ausdruck hier auf dem Silbertablett serviert wird. Fang an und übe, poste deine Ansätze, dann kann man darüber weiter diskutieren.
                        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                        Kommentar


                        • #13
                          Vielleicht würde schon reichen, den ersten Buchstaben der Zeile auf [ zu prüfen.
                          --

                          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                          --

                          Kommentar


                          • #14
                            Hmmm
                            also so geht es auch nicht:
                            Code:
                            $read_error = "$verzeichnis/$errordatei";
                            $avar = file("$read_error");
                              
                                  foreach ($avar as $varb){
                                    #echo "$varb<br />";
                                    
                                    $zerlegen = explode("[*]", $varb);
                                    #echo $zerlegen;
                            
                                    print_r($zerlegen);
                                    
                                    }
                            Das kann so nicht gehen weil der Reguläre Ausdruck falsch ist richtig?

                            Kommentar


                            • #15
                              Zitat von andreasei Beitrag anzeigen
                              Das kann so nicht gehen weil der Reguläre Ausdruck falsch ist richtig?
                              Nein, weil du noch gar keinen regulären Ausdruck benutzt hast.

                              Kommentar

                              Lädt...
                              X