HTM-Dok mit PHP auseinandernehmen und in DB

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

  • HTM-Dok mit PHP auseinandernehmen und in DB

    Naja, ich mal wieder.

    Diesmal folgendes:

    1. Ein HTML-Dokument, welches (sehr schlecht gemacht ist, aber das war ich nicht und interessiert hier auch nicht, kann aber Syntaxfehler enthalten ) aus ein bisschen Text besteht und einer Tabelle der folgenden Form:
    <tr>
    <td class="oben"> 26.04.2006</td>
    <td> <b>Dies ist die Überschrift</b>
    <br>
    BLA BLA BLA BLA BLA BLA -- viel Text --
    </td>
    </tr>
    So, mal zum Format: das Datum aus dem"<td class="oben"> 26.04.2006</td>" will ich in die DB einlesen, also WICHTIG.
    Das, was zwischen dem zweiten <td> und </td> steht, gehört nicht zusammen, muss aber auch in die DB. Die Überschrift MIT dem <b> (wenn eins da steht) soll als ein Element in die DB, und der Text danach, der IMMER mit einem <br> von der Überschrift abgegrenzt ist.

    2. Ein PHP-Dokument, welches das HTML-Ding öffnen und einlesen soll^^

    Mein Problem: Das PHP-Dokument fehlt xD.
    Ich habe es versucht mit sehr vielen While's, Strpos() usw usw.. aber da ich zum Beispiel nie kapiert habe wie dieses behinderte ereg funktioniert (ka, niemand erklärt mal wies funktioniert, und die ANleitung bei PHP.net hat auch nicht geholfen) bekomme ich außer 500'er Fehlern nichts raus.

    Könnte mir jemand ein Script schreiben, das einfach nur eine Tabelle (begrenzt durch zwei Strings, die einzeln in einer Zeile stehen und Anfang/Ende signalisieren) nimmt, und dann in eine DB haut? BITTE.
    Ich weiß, is viel Hirnarbeit erforderlich, aber ich komm nicht mehr weiter, und habs schon lange probiert.. (6 Tage).
    Ich kann: Deutsch, Englisch, Französisch, Japanisch (im Aufbau)
    PHP, CSS 2.1, JS, Delphi, C
    Ich mag: Japan, Speedmetal, H3nta1s(^^)

  • #2
    Tz, wie soll dir jemand helfen, wenn wir nicht die komplette Syntax deiner Datei haben.

    Versuch es mal mit Google und "Perl regular expressions" und preg_match() bzw. preg_replace(). Der Schreiben ist einfach nur Fleißarbeit. Text auslesen und Inserts zusammenbauen. Keine spannende Aufgabe - aber ohne die Syntax und die Sonderfälle zu kennen, kann man dir keinen passenden regulären Ausdruck anbieten.

    Mal 'ne grundsätzliche Frage: Wenn's nur eine einzige Datei ist und du das sowieso nur einmal brauchst, warum machtst du es dann eigentlich nicht mal fix mit dem Texteditor? Ein guter Editor beherrscht auch regular expressions Damit kann man sich ohne zu programmieren herrliche Inserts basteln.

    Kommentar


    • #3
      hmm, sagen dir 40kb was? ^^ und es sind leider mehrere solche dateien.

      werde mich noch mal dran setzen, aber, wegen dem Syntax: was meinst du damit? willst du wissen wie das genau aufgebaut ist?

      PHP-Code:
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
      <
      html>
      <
      head>
      <
      meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
      <
      title>New document</title>
      </
      head>
      <
      body>
      bla bla bla
      <table>
      <!-- 
      Info-Tabelle beginnt hierACHTUNGHINWEIS N I C H T ENTFERNEN! -->


      <
      tr>
      <
      td class="oben"26.04.2006</td>
      <
      td> <b>Dies ist die Überschrift</b>
      <
      br>
      BLA BLA BLA BLA BLA BLA -- viel Text --
      </
      td>
      </
      tr>

      <
      tr>
      <
      td class="oben"27.05.2006</td>
      <
      td> <b>Dies ist die Überschrift</b>
      <
      br>
      BLA BLA BLA BLA BLA BLA -- viel Text --
      </
      td>
      </
      tr>

      <
      tr>
      <
      td class="oben"16.06.2006</td>
      <
      td> <u>Dies ist die Überschrift</u>
      <
      br>
      BLA BLA BLA BLA BLA BLA -- viel Text --
      </
      td>
      </
      tr>


      <
      tr>
      <
      td class="oben"14.04.2006</td>
      <
      tdDies ist die Überschrift
      <br>
      BLA BLA BLA BLA BLA BLA -- viel Text --
      </
      td>
      </
      tr>

      <!-- 
      Info-Tabelle endet hierACHTUNGHINWEIS N I C H T ENTFERNEN! -->
      </
      table>
      </
      body>
      </
      html
      Ich kann: Deutsch, Englisch, Französisch, Japanisch (im Aufbau)
      PHP, CSS 2.1, JS, Delphi, C
      Ich mag: Japan, Speedmetal, H3nta1s(^^)

      Kommentar


      • #4
        preg_match_all("/<td class=\"oben\">[\ ]\d{2}\.\d{2}\.\d{4}<\/td>/i",$string, $dates)
        for($a=0;$a<count($dates);$a++){
        $dates[$a] = preg_replace("/<td class=\"oben\">[\ ](\d{2}\.\d{2}\.\d{4})<\/td>/i","$1",$dates[$a]);
        }

        die anderen kannst du nach dem selben Schema machen.

        ich habe kein [PHP] benutzt, da sonst die Backslashes verschwinden.

        Warum benutzt du für sowas eigentlich nicht XML?

        Kommentar


        • #5
          ahh, endlich jemand mit skill *freu*

          naja, XML? kann ich nicht/nur unzureichend.

          mal was anderes: kann mir jemand erklären, wie dieser Syntax mit preg_replace und ereg funktioniert? ich hab die Erklärung auf PHP.net nicht wirklich verstanden, kann jemand vieleicht mal erleutern wie das funktioniert?

          preg_match_all("/<td class=\"oben\">[\ ]\d{2}\.\d{2}\.\d{4}<\/td>/i",$string, $dates)


          Trotzdem DankE!!
          Ich kann: Deutsch, Englisch, Französisch, Japanisch (im Aufbau)
          PHP, CSS 2.1, JS, Delphi, C
          Ich mag: Japan, Speedmetal, H3nta1s(^^)

          Kommentar


          • #6
            such unter wiki "pregexp"

            Kommentar


            • #7
              okay..

              preg_match_all("/<td class=\"oben\">[\ ]\d{2}\.\d{2}\.\d{4}<\/td>/i",$string, $dates)

              preg_match_all finde alle stellen in $string und merk sie dir in $dates (array), die wie folgt aussehen:

              / sogenannter delimiter... der sagt "hier gehts los".. , der am ende hingegen "hier ist schluss.. es folgen Modifier.. deshalb gehts nicht ohne, sonst würde das i ganz am ende falsch interpretiert.. das sagt nämlich.. scher dich einen dreck um groß- und kleinschreibung...

              weiter im text..

              also finde zeichenfolgen, die beginnen mit exakt:
              <td class=\"oben\"> (die backslashes sind dafür da, dass er beim " nicht denkt, hier wär der sting zu ende, sondern diese als "-zeichen ansieht.. in wahrheit sucht er also <td class="oben">

              jetzt kommt ne zeichenklasse... was die hier macht, weiß ich gerade nicht.. ein leerzeichen an dieser stelle hätte es auch getan *find*..
              also wie auch immer.. eine zeichenklasse -> gefolgt von einem der zeichen zwischen den eckigen klammern (hier also leerzeichen, der backslash escaped das leerzeichen?? *wunder*.. ich bin verwirrt.. wer klärt mich mal auf.. ??)

              gefolgt von nem leerzeichen
              gefolgt von genau zwei ziffern, was vermutlich blödsinn ist... denn wir suchen ja auch tage von 1 - 9.. gefolgt von einem . (der . muss escaped werden mit \.. sonst stünde er für ein beliebiges zeichen) gefolgt von 2 ziffern gefolgt von einem punkt gefolgt von 4 ziffern gefolgt von genau <\/a>, wobei / durch \ escaped wird, weil es als delimiter verwendet wurde.


              sooooo.. alle klarheiten beseitigt ;-) ???

              greetz, high
              Zuletzt geändert von highrise; 31.10.2006, 05:19.
              Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
              When everything else fails, manipulate the data...
              Beschriftungen / Großformatdruck / Werbemittel

              Kommentar


              • #8
                0 ist auch eine Dezimalzahl also \d{2} und kein Blödsinn.

                Manche haben IgnorePatternWhitespace / x on als standardeinstellung --> whitespaces müssen explizit markiert werden. Die Zeichenklasse dient aus diesem Grunde der Übersicht damit klar ist was markiert ist.

                Kommentar


                • #9
                  wundervoll.. das wollte ich wissen..

                  dass 0 ein decimal ist, ist klar.. aber was ist mit diesem format: 3.12.2006 (ohne führende null.. )

                  dan gehts nicht..

                  greetz, high
                  Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
                  When everything else fails, manipulate the data...
                  Beschriftungen / Großformatdruck / Werbemittel

                  Kommentar


                  • #10
                    wer beim Monat eine führende Null hat wird ja wohl diese beim Tag nicht weglassen

                    Kommentar


                    • #11
                      klingt logisch.. würde ich dir zustimmen, wenn ich den programmiere kennen würde..
                      allerdings ist logik keine garantie.. sogesehen, ist beim monat auch noch ein fehler im regex, denn der könnte ja ebenfalls ohne führende null da stehen... sicherer ist, beide zu fangen.. und gerade mal ein paar zeichen mehr regex..

                      greetz, high
                      Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
                      When everything else fails, manipulate the data...
                      Beschriftungen / Großformatdruck / Werbemittel

                      Kommentar


                      • #12
                        schau mal im Beispiel

                        Kommentar


                        • #13
                          wenn du jetzt wirklich aus drei einzelnen einträgen auf ein ganzes file schließen willst, dann gute nacht.. ich hae es schon sooooo oft erlebt, dass dann wie der teufel es will mal wieder einige wenige einträge sich eben nicht an das beispiel halten.. sei es, weil sie aus ner früheren version stammen oder warum auch immer..
                          warum denn eine mögliche situation nicht abfangen, wenn es kaum mehr aufwand bedeutet, sondern sie einfach wegdiskutieren?
                          sotosay müsste man streng genommen auch nur drei exakte daten prüfen, weil andere im beispiel nicht enthalten sind.. anyway...
                          es macht gerade mal ein paar zeichen mehr..
                          Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
                          When everything else fails, manipulate the data...
                          Beschriftungen / Großformatdruck / Werbemittel

                          Kommentar


                          • #14
                            okay okay, wenn ihrs haben wollt^^
                            ich habe eigentlich alles durchgeguckt, und es war alles so, aber kann sein das ich mich irre..

                            habs mal angehängt.
                            Angehängte Dateien
                            Ich kann: Deutsch, Englisch, Französisch, Japanisch (im Aufbau)
                            PHP, CSS 2.1, JS, Delphi, C
                            Ich mag: Japan, Speedmetal, H3nta1s(^^)

                            Kommentar


                            • #15
                              sooo.. in dem punkt sieht es wohl so aus, dass alle einstelligen daten tatsächlich eine führende null besitzen...

                              habe allerdings folgende zeile gefunden:

                              <td class="oben">01.01.2006</td>

                              da fehlt das leerzeichen.. ergo müssen wir da noch einmal korrigieren, und hinter [\ ] noch ein ? setzen (einmal oder kein mal)

                              greetz, high
                              Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
                              When everything else fails, manipulate the data...
                              Beschriftungen / Großformatdruck / Werbemittel

                              Kommentar

                              Lädt...
                              X