Grundlagenstudium: Textmanipulationen mit PHP

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

  • #61
    Original geschrieben von Estrela
    Dieses Script habe ich hier empfangen und oben wieder dargestellt.
    Estrela
    Es sieht eher so aus, als hättest du alles, was du hier empfangen hast, ohne Wenn-und-Aber zusammengeklebt.
    PHP-Code:
    foreach($txt as $zeile){
        echo 
    manipulate($zeile);
    }
    echo 
    "<dl>\n"
    Wo in deinem Skript wird $txt definiert? Nirgends. Und welchen Sinn sollte es haben - wenn es funktionieren würde -, wo du manipulate() weiter unten im Skript nochmal anwendest? Das sieht alles überhaupt nicht durchdacht aus.

    Grüße
    Nieder mit der Camel Case-Konvention

    Kommentar


    • #62
      Meine Erkenntnisse sind, dass du ansich nichts dazu gelernt hast.

      Erstmal fehlt das debugging ....
      error_reporting etc. pp. ...

      Du hast 2x foreach...

      Die 1. Schleife davon ist nonsense...

      ..und die 2. Schleife ist wohl die richtige, bis auf die tatsache, dass da dann der Anfangstag fehlt, wie du bereits sagtest...

      Vlt guckst du dir deine Funktionen nochmal an, was sie machen etc.
      Dann bekommste auch ganz schnell den dreh raus, wo dein echo hin muss....

      ..oder du wartest, bis dir jmd. fertigen Code liefert

      mfg
      Edit: Griecherus, nur weil ich esse und somit länger brauch, brauchst du mir nicht zuvor kommen

      Kommentar


      • #63
        Original geschrieben von Blackgreetz

        Edit: Griecherus, nur weil ich esse und somit länger brauch, brauchst du mir nicht zuvor kommen
        OffTopic:

        Ich schäme mich aufrichtig.. Guten Appetit

        Nieder mit der Camel Case-Konvention

        Kommentar


        • #64
          Hallo Griecherus.

          Da es ja soweit funktionierte, habe ich mir über die von Dir zitierten Codezeilen keine Gedanken gemacht, sondern mich erst mal auf das konzentriert, was ich als Fehler erkannt habe. Und das ist der Umstand, das das erste <dl> nicht auftaucht.

          Und Du hast recht damit, das die von Dir zitierten Codezeilen nicht für den Ablauf benötigt werden. Aber dann stellt sich erst recht die Frage, woher das erste <dl> kommen soll?

          Gruß
          Estrela
          Denk positiv.

          Kommentar


          • #65
            Original geschrieben von Griecherus
            OffTopic:

            Ich schäme mich aufrichtig.. Guten Appetit

            OffTopic:
            Danke. Hat auf jeden Fall geschmeckt.


            @Estrela:

            Dann solltest du dir erstmal überlegen, was dein Code macht , wie bereits gesagt...

            mfg

            Kommentar


            • #66
              Hallo Blackgreetz.

              Erst mal Danke für Deinen Tipp, das ich mit einem echo in der Funktion weiterkomme.
              Schaun mer mal, was der Code macht.
              PHP-Code:
              function manipulate($str) { 
                  
              $str preg_replace('|<div class="texth1">(.+)</div>|U'
                                      
              '<dt>$1</dt>'
                                      
              preg_replace('|<div class="silber">(.*)</div>|U'
                                                      
              '<h1>$1</h1><dl>'
                                                      
              $str
                                      
              )
                  ); 
              Oben werden die Strings zwischen | | in $str gesucht und mit den darunterliegenden ersetzt.

              PHP-Code:
                  if(preg_match('|</h1>|Ui'$str)){
                      
              $str .= "</dl>\n";
                  } 
              Oben wird </h1> gesucht und wenn gefunden an $str, also an die letzte Stelle, das "</dl>\n" angehängt.
              /Edit
              Hier hatte ich ja schon mal vorgeschlagen, die Abfrage so zu formulieren, das sowohl das letzte </dl> als auch das erste <dl> in das Dokument eingefügt wird.
              $str . fügt ans Ende an. Was fügt am Anfang ein?
              Edit/

              PHP-Code:
                  $str preg_replace('|<br\s*/?>|Ui'"\n</dl>\n<dl>"$str);
                  return 
              $str;

              Oben werden die <br ´s gesucht und mit "\n</dl>\n<dl>" ersetzt.

              Habe versucht, die echo´s an verschiedenen Stellen einzubauen, ohne Erfolg.

              So, also wo die echo Anweisung reinpasst, ist mir immer noch unklar.
              Möchte auch noch mal anmerken, das sich langsam der Frust breitmacht.
              Arbeite schon bald fünf Tage daran.
              Brauche dringend Weiterkommen.

              Gruß
              Estrela
              Zuletzt geändert von Estrela; 21.06.2008, 18:58.
              Denk positiv.

              Kommentar


              • #67
                PHP-Code:
                $str  'bar';        // -> bar
                $str .= 'baz';        // -> barbaz
                $str  'foo' $str// -> foobarbaz 
                Grüße
                Nieder mit der Camel Case-Konvention

                Kommentar


                • #68
                  Hallo.

                  Das war der entscheidene Hinweis. Ich danke Dir.
                  Ich danke allen, die hier so hilfreich, geduldig, freundlich und sachkundig geholfen haben.
                  Endlich geschafft.

                  Gruß
                  Estrela
                  Zuletzt geändert von Estrela; 21.06.2008, 20:32.
                  Denk positiv.

                  Kommentar


                  • #69
                    Hallo.

                    Leider hat der Praxiseinsatz einige Besonderheiten gezeigt.
                    Das Einfügen an erster Stelle des Dokumentes erweißt sich als invalide, da nicht nur keine <br /> in <dl> erlaubt sind, sondern ebenfalls keine <h1>.
                    Kann man nicht statt dem Einfügen an erster Position die erste leere Zeile definieren?
                    Weiterhin existieren Ausnahmefälle, in dem die <br /> nicht ersetzt werden dürfen:

                    <h1>10. O MESTRE<br /><em> (Luiz Carlos Sil)</em></h1>

                    Beide Besonderheiten ließen sich umgehen, wenn für die entsprechenden Operationen die erste leere Zeile als Anfang definiert ist.

                    Tangiert sind folgende Anweisungen:

                    PHP-Code:
                        if(preg_match('|</h1>|Ui'$str)){
                        
                    $str .= "</dl>\n"// Diese Anweisung ausgenommen
                        
                    $str  '<dl>' $str;
                        } 
                        
                    $str preg_replace('|<br\s*/?>|Ui'"\n</dl><br />\n<dl>"$str);
                        return 
                    $str
                    Hat jemand eine Idee, wie das umsetzbar ist und teilt es Uns mit?
                    Wahrscheinlich ist es am besten, in der Funktion am Anfang nach der ersten leeren Zeile suchen zu lassen und den Pointer darauf zu stellen.

                    Gruß
                    Estrela
                    Zuletzt geändert von Estrela; 21.06.2008, 22:44.
                    Denk positiv.

                    Kommentar


                    • #70
                      Ich habe dir schon gesagt, dass mein Code korrekt ist. Was dein hier soll, weiss ich nicht. Und da du offensichtlich zu faul bist, dich mit den regulären Ausdrücken zu beschäftigen (um deren sehr einfache Ausprägungen es sich hier handelt), hat es eigentlich auch keinen Sinn, hier weiter zu machen.
                      Original geschrieben von Blackgreetz
                      ..oder du wartest, bis dir jmd. fertigen Code liefert
                      Das werde ich jetzt tun und dann werde ich diesen Thread nicht mehr anschauen.
                      PHP-Code:
                      <!DOCTYPE html PUBLIC "-//W3C//DtD XHTML 1.0 Transitional//EN"
                          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                      <html xmlns="http://www.w3.org/1999/xhtml1" lang="en"  xml:lang="en">
                      <head>
                          <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
                          <title>Textmanipulation</title>
                      </head>
                      <body>
                      <?php

                      foreach (glob($path DIRECTORY_SEPARATOR '*.php') as $filename){
                          
                      $txt file($filename)
                          
                      contents '';
                          foreach (
                      $txt as $zeile){
                              
                      $contents .=  manipulate($zeile);
                          }
                          
                      $contents .=  "</dl>\n";

                          
                      file_put_contents($filename$contents) or die('Error writing data to ' $filename);
                      }

                      function 
                      manipulate($str) {
                          
                      $str preg_replace('|<div class="texth1">(.+)</div>|U'
                                                 
                      '<dt>$1</dt>'
                                                 
                      preg_replace('|<div class="silber">(.*)</div>|U'
                                                              
                      '<dd>$1</dd>'
                                                              
                      $str
                                              
                      )
                          );
                          if (
                      preg_match('|</h1>|Ui'$str)){
                                  
                      $str .= "<dl>\n";
                          }
                          
                      $str preg_replace('|<br\s*/?>|Ui'"\n</dl>\n<dl>"$str);
                             return 
                      $str;
                      }
                      ?>

                      </body>
                      </html>
                      Zuletzt geändert von H2O; 23.06.2008, 07:50.
                      Gruss
                      H2O

                      Kommentar


                      • #71
                        @H2O:
                        PHP-Code:
                        if (preg_match('|</h1>|Ui'$str)){
                                
                        $str .= "<dl>\n";
                        }
                        $str preg_replace('|<brs*/?>|Ui'"\n</dl>\n<dl>"$str); 
                        Das gibt Salat, denn wie der TO im letzten Beitrag erwähnte, kommt BR auch innerhalb einer Textzeile vor und soll dort nicht ersetzt werden. Wieso ein H1 Anlaß bietet, ein DL anzuhängen, verstehe ich nicht. Aber wahrscheinlich ist mir da im Laufe des Threads einfach was entgangen.
                        Zuletzt geändert von onemorenerd; 23.06.2008, 08:15.

                        Kommentar


                        • #72
                          Ich hab diesen thread jetzt mal eine Ganze weile Verfolgt.

                          @TS ... Kauf die PHP Bücher die sind viel geduldiger mit dir als mancher hier.

                          Zum Problem.

                          Ich hab mir mal eben selbst fix was aus den Fingern gesaugt
                          OffTopic:

                          nebenbei hab ich die Preg_Replace hier ausm thread verwendet. warum man für sowas unbedingt soviel aufwand betreiben muss is mir schleierhaft. aber der TS hat sowieso eine Ausdrucksweise die Fast an Beamtendeutsch erinnern



                          PHP-Code:
                          <?php
                          /**

                          * Was ist gegeben in einer File sollen DIVS ersetzt werden durch definierte Listen 
                          * <div class="texth1"> durch <dt>
                          * <div class="silber"> durch <dd>
                          * Beispiel:
                          <h1>1. Überschrift</h1>

                          <div class="texth1">Text portugiesisch</div>
                          <div class="silber"> Deutsche Übersetzung</div>
                          <div class="texth1">Text portugiesisch</div>
                          <div class="silber"> Deutsche Übersetzung</div>
                          <div class="texth1">Text portugiesisch</div>
                          <div class="silber"> Deutsche Übersetzung</div>
                          <div class="texth1">Text portugiesisch</div>
                          <div class="silber"> Deutsche Übersetzung</div>

                          <div class="texth1">Text portugiesisch</div>
                          <div class="silber"> Deutsche Übersetzung</div>
                          <div class="texth1">Text portugiesisch</div>
                          <div class="silber"> Deutsche Übersetzung</div>
                          <div class="texth1">Text portugiesisch</div>
                          <div class="silber"> Deutsche Übersetzung</div>
                          <div class="texth1">Text portugiesisch</div>
                          <div class="silber"> Deutsche Übersetzung</div>
                          * Davor und Danach soll jeweiles ein <dl> und </dl> 
                          * angehängt werden. <h1> tags sollen Ignoriert werden.
                          */
                          error_reporting(E_All);
                          header("Content-type: text/html; charset=utf-8");
                          //$content=file_get_contents("testfile.txt");
                          //echo $content;
                          $content='<h1>1. Überschrift</h1>

                          <div class="texth1">Text portugiesisch</div>
                          <div class="silber"> Deutsche Übersetzung</div>
                          <div class="texth1">Text portugiesisch</div>
                          <div class="silber"> Deutsche Übersetzung</div>
                          <div class="texth1">Text portugiesisch</div>
                          <div class="silber"> Deutsche Übersetzung</div>
                          <div class="texth1">Text portugiesisch</div>
                          <div class="silber"> Deutsche Übersetzung</div>

                          <div class="texth1">Text portugiesisch</div>
                          <div class="silber"> Deutsche Übersetzung</div>
                          <div class="texth1">Text portugiesisch</div>
                          <div class="silber"> Deutsche Übersetzung</div>
                          <div class="texth1">Text portugiesisch</div>
                          <div class="silber"> Deutsche Übersetzung</div>
                          <div class="texth1">Text portugiesisch</div>
                          <div class="silber"> Deutsche Übersetzung</div>'
                          ;
                          $ExplodetContent=explode("\n",$content);
                          //var_dump($ExplodetContent);

                          foreach($ExplodetContent as $key=>$value)
                          {
                              
                          $value =   preg_replace('|<div class="texth1">(.+)</div>|U'
                                                      
                          '<dt>$1</dt>'
                                                      
                          preg_replace('|<div class="silber">(.*)</div>|U'
                                                                  
                          '<dd>$1</dd>'
                                                                  
                          $value
                                                                  
                          )
                                                      );
                                                  
                              
                          //echo "<pre>".str_replace("<","&lt;",str_replace(">","&gt;",$value))."</pre>";
                              
                          $NewContent[]=$value;
                          }
                          $first=false;
                          foreach(
                          $NewContent as $key=>$value)
                          {
                              if(
                          preg_match("/(<dt>)|<dd>/Uis",$value))
                              {
                                  if(
                          $first==false)
                                  {
                                  
                          $value="<dl>\n".$value;
                                  
                          $NewContent[$key]=$value;
                                  
                          $first=true;
                                  }
                              }
                          }
                          $NewContent=array_reverse($NewContent);
                          $first=false
                          foreach(
                          $NewContent as $key=>$value)
                          {
                              if(
                          preg_match("/(<dt>)|<dd>/Uis",$value))
                              {
                                  if(
                          $first==false)
                                  {
                                  
                          $value=$value."\n</dl>";
                                  
                          $NewContent[$key]=$value;
                                  
                          $first=true;
                                  }
                              }
                          }
                          $NewContent=array_reverse($NewContent);
                          $NewContent=implode("\n",$NewContent);
                          //echo "<pre>".str_replace("<","&lt;",str_replace(">","&gt;",$NewContent))."</pre>"; 
                          /** 
                          * Der rest Dürfte Sich von alleine Erklären ... warum es
                          * sich einige immer schwerer machen als es ist ka
                          * Solange alle datein fast genau so aussehen :) 
                          * wenn nicht ... kann man in ruhe ausnahmen definieren aber dazu solltest du 
                          * ENDLICH bitte ersteinmal die absoluten GRUNDLAGEN STUDIEREN 
                          */
                          ?>
                          Bitte Beachten.
                          Foren-Regeln
                          Danke

                          Kommentar


                          • #73
                            Hallo zusammen.

                            Wollte nur sagen, das der code erstellt und implementiert wurde.

                            Danke für die wertvolle Hilfe und die vielen Anregungen.

                            Gruß

                            Estrela
                            Denk positiv.

                            Kommentar

                            Lädt...
                            X