[PHP] Tabellen zerkleinern...

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

  • [PHP] Tabellen zerkleinern...

    Hallo,

    ich habe ein Problem:

    Ich habe "HTML" Dateien, wo Tabellen ausgegeben werden:

    Einzusehen unter:

    http://www.tutorialplanet.de/Kla1_W5DNT.htm
    http://www.tutorialplanet.de/Kla1_W5DIT.htm

    So... Als ergebnis möchte ich folgenden Inhalt in einem Array erhalten.

    Beispiel:
    PHP-Code:
    Array(
    [
    0] => Array(
                        [
    Montag] => Array(
                                                     [
    Value] => Grundlagen der Werkstoffe V 
                                                                       Koenigsmann   R119 
                                                                      111405.2 V   1
    )   5707 
                                                     
    )
                       )



    Aber auch die Dauer der Stunden.
    Das heisst, wenn eine Vorlesung über 2 Stunden geht, dann soll das erkannt werden, auch wenn die Zeilen getrennt sind.

    Habt Ihr eine Idee wie ich das realisieren kann?


    Viele Grüsse

    David
    Die meiste Unwissenheit könnte besiegt werden. Wir eignen uns nur deshalb keine Kenntnisse an, weil wir sie nicht wünschen.

  • #2
    html-tabelle in PHP-Array einlesen sollte ja nicht das Problem sein ...

    In der ersten TD (Spalte 0) jeder TR hast du die Uhrzeit bzw. die Stundennr ==> Index 1. Dimension
    Die Spalten 1 bis 6 liefern dir die Vorlesungen ==> Index 2. Dimension

    Hat eine Spalte einen rowspan > 1, ist hier zusätzlicher Hirnschmalz nötig. Eine einfache Lösung: die entsprechenden Felder deines Arrays vorneweg setzen. Triffst du dann beim Parsen der folgenden Zeile auf eine schon besetzte Zelle (isset), weißt du dass du eigentlich schon eine Spalte weiter bist.

    Damit sind erstmal alle rowspans beseitigt und du hast mit einer einheitlichen Struktur die Grundlage für die zweite Umwandlung.
    Ob eine Vorlesung mehrere Stunden dauert, kannst du dann mit einer einfachen Schleife ermitteln.


    Mal angenommen, das in "Stunde" 7 am Montag in Kla1_W5DIT wäre keine Übung, sondern eine Vorlesung wie in 5/6 (mit identischem Text in der Zelle), dann zeigt dir der Schnipsel, dass das, was in der 5. beginnt bis zum Anfang der 8. dauert - also drei Einheiten:

    $tag = 1; $stunde = 5;
    for ($dauer=1; $plan[$tag][$stunde+$dauer]==$plan[$tag][$stunde]; $dauer++);

    Über ein zusätzliches Array kannst du dann noch ermitteln, dass es um 12.15 losgeht und um 15.00 bzw. 15.15 ein Themenwechsel anstände.

    Den gleichen Schnipsel kannst du aber auch verwenden, um eine frische HTML-Tabelle mit "sauberem" rowspan aufzubauen.
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      Hallo Titus,

      danke erstmal für Deine Antwort.
      Ich bretter jetzt erstmal ein wenig Code rein, damit ich meinen Versuch darlegen kann:


      PHP-Code:
      function show_dir($dir$pos=2)
      {
          
      $handle = @opendir($dir);
          
      $_rows  = array();
          while (
      $file = @readdir($handle))
          {
              if (
      eregi("^\.{1,2}$",$file))
              {
                  continue;
              }
              if(
      is_dir($dir.$file))
              {
              if(
      preg_match("/^version/i",$file)){
                  
      $this->show_dir($dir.$file."/"$pos 3);
                }
                  
      $complete $dir.$file;
                  
      $piece explode("/",$complete);
                  if(
      $piece[count($piece)-1] == "in"){
                  unset(
      $piece[count($piece)-1]);
                  }
                  
      $path implode("/",$piece);
                }
                else{
                     
      $extension explode(".",$file);
                     if(
      $extension[1] == "htm"){
                     
      $hand fopen($dir.$file,"r");

                     
      // Zeilen aus HTML-Datei auslesen
                     
      while (!feof($hand))
                           {
                           
      $content fgets($hand4096);
                           
      $text .= $content;
                           }
                           
      // TAGS SÄUBERN => Später mit array()
                           
      $text str_replace(" ","",$text);
                           
      $text str_replace("</font>","",$text);
                           
      $text str_replace('<font size="1" face="Arial">',"",$text);
                           
      $text str_replace('<font size="2" face="Arial">',"",$text);
                           
      $text str_replace('<font size="3" face="Arial">',"",$text);
                           
      $text str_replace('<font size="4" face="Arial">',"",$text);
                           
      $text str_replace('<font  size="1" face="Arial" color="#0000FF">',"",$text);
                           
      $text str_replace('<font  size="2" face="Arial" color="#0000FF">',"",$text);
                           
      $text str_replace('<font  size="3" face="Arial" color="#0000FF">',"",$text);
                           
      $text str_replace('<font  size="4" face="Arial" color="#0000FF">',"",$text);
                           
      $text str_replace('<b>',"",$text);
                           
      $text str_replace('</b>',"",$text);
                           
      $text str_replace('<br>',"",$text);
                           
      $text str_replace('<B>',"",$text);
                           
      $text str_replace('</B>',"",$text);
                           
      $text str_replace('<BR>',"",$text);
                           
      $text str_replace('align=center',"",$text);
                           
      $text str_replace('align=left',"",$text);
                           
      $text str_replace('align=right',"",$text);
                           
      $text str_replace('<TD >','<td>',$text);
                           
      $text str_replace('</TD>',"</td>",$text);
                           
      $text str_replace('<td rowspan=2 >','<td rowspan=2>',$text);
                           
      $text str_replace('<td rowspan=3 >','<td rowspan=3>',$text);
                           
      $text str_replace('<td></td>',"<td>&nbsp;</td>\n",$text);

                           
      // ALLE ZEILEN SUCHEN
                           
      $count  preg_match_all("=<tr[^>]*>(.*)</tr>=siU"$text$out);


                           for(
      $i=0;$i<16;$i++){
                              
      array_push($_rows,$out[1][$i]); // ZEILEN IN ARRAY PACKEN
                              
      }
                           @
      closedir($hand);
                     }
                   }

         }
         @
      closedir($handle);
         for(
      $j=0;$j<count($_rows)-1;$j++){
            
      $count  preg_match_all("=<td[^>]*>(.*)</td>=siU"$_rows[$j], $show); // SPALTEN AUSLESEN
               
      }
            }
         } 

      Gescheitert ist es letztendlich an der Kombination der Felder, da ich
      die rowspans nicht beachtet habe. Ich wüsste jetzt ehrlichgesagt auch nicht, wie ich an diese rankomme. An dieser Stelle habe ich dann gestern die Schnauze voll gehabt. Deine Idee scheint mir logisch, setzt aber schon wie Du sagtest "Hirnschmalz" voraus. Ich kann dir also nur am Anfang folgen. Vielleicht kannst Du mir das ja mal genauer erklären? Würde mich jedenfalls freuen.


      Viele Grüsse

      David
      Die meiste Unwissenheit könnte besiegt werden. Wir eignen uns nur deshalb keine Kenntnisse an, weil wir sie nicht wünschen.

      Kommentar

      Lädt...
      X