Thema: Filtern/Extrahieren mit RegEX

Ich hab ein <B>zieml großes</B> Problem, viell. kann mir ein RegEx Künstler ja hier weiterhelfen    [img]images/icons/smile.gif" border="0[/img]<P>Ich habe hier 2029 Html Dateien mit techn. Detailbeschreibungen, die ich in Templates printen möchte.<P>Leider sind das noch komplette Html Dateien mit der übl. Struktur. und noch dazu mit dem Design vom Großhändler versehen.<P>Ich sollte jetzt NUR die Beschreibung extrahieren und zwar steht die immer zwischen <ul> und </ul> ( Es können aber mehrere UL's sein ).<P>Alles andere sollte aus dem File eliminiert werden ( alle andern Html tags Text Image usw).<P>Mit den Ultraedit Funktionen Replace - oder mit Makros komm ich net weiter, da sich ie Zeilehöhe verändert,mal Bilder drin sind und mal net,mal ist auch gar keine Detailbeschreibung drinne ( dann sollte man das File komplett leeren...)<P>Irgendwie geht das bestimmt mit einer RegEx??<BR>Viell hat jemand Lust sich daran zu versuchen *hoffnungsvoll Guck* ..    [img]images/icons/grin.gif" border="0[/img]<P>So sehen die Files aus:<BR> <A HREF="http://www.lautra.com/devshare/FH-BE-K033.html" TARGET=_blank>http://www.lautra.com/devshare/FH-BE-K033.html</A> <BR> <A HREF="http://www.lautra.com/devshare/MG-NO-B189.html" TARGET=_blank>http://www.lautra.com/devshare/MG-NO-B189.html</A> <P><BR>Und soweit bin ich bisher:<P><I><BR><html><P><!-- Mirrored from <A HREF="http://www.karlo.de" TARGET=_blank>www.karlo.de</A>  by HTTrack Website Copier/3.x [XR&CO'2001] --><BR><head><BR>    <title>KARLO Shop Produktinformation</title><BR>    <meta name="author" content="Komsa Solutions - 2001-02-26"><BR>    <meta http-equiv="pragma" content="no-cache"><BR>    <meta http-equiv="expires" content="0"><BR>    <link rel=stylesheet type="text/css" href="http://www.karlo.de/scripts/karlo.css"><BR></head><P><body><BR><div align="left"><BR><br><BR><table border="0" width="100%" cellspacing="0" cellpadding="4"><BR><tr><BR>    <td class="dgruen" align="left" valign="top"><span class="wdick">KOMSA Produktinformation</span></td><BR>    <td class="dgruen" align="right" valign="top"><BR>         <span class="wdick">[</span><a href="javascript:close()"><span class="wdick">Fenster schliessen?</span></a><span class="wdick">]</span><BR>        </td><BR></tr><BR><tr><td colspan="2"> </td></tr><BR><tr><BR>    <td width="50%"> </td><BR>        <td align="left" valign="top" width="50%"><b>Halterset für P&P ET400 THB Siemens 25-Serie</b></td><BR></tr><P><tr><BR>    <td> </td><BR>        <td align="left" valign="top" nowrap><BR>            KOMSA Artikelnummer: <span class="rdick">MT-SI-H005 </span><BR>            <hr size="1"><BR>        </td><BR></tr><BR><tr><BR>    <td width="50%" height="300" rowspan="3" valign="top" align="center"><BR>        <BR>            <img src="http://www.komsa.de/images/produkte/me_to_c038_40.jpg" border="0"><BR>        <BR>    </td><BR>        <td> </td><BR></tr><P>              <tr><BR>                <td align="left" valign="top"><BR>                                   <b>Technische Merkmale:<BR> <BR>                                   </b><BR>                                   <br><BR>                                <BR> <BR>                                        <BR>                                       <br><BR></I><BR><!-- Der QT oberhalb dieses Kommentars soll eliminiert werden --><BR><!-- Ab Hier werden die Daten benötigt --><BR><I><BR><ul><li><BR>                                           handyspezifische Halterung  <BR> <BR>                                            <BR>                                       </li><li><BR>                                           benötigt wird universelle Plug & Play Freisprecheinrichtung ET 400 THB (MT-BU-E022)<BR> <BR>                                            <BR>                                       </li><P></I><P>Verzweifelte Grüße Jochen<P>[ 17.08.2001: Beitrag editiert von: Jochen ]<p>[ 17.08.2001: Beitrag editiert von: Jochen ]

Moderator devshare.de | Usability

2

Re: Filtern/Extrahieren mit RegEX

tach jochen,<BR>wir hattenja grad telephoniert.<BR>Ist mir jetzt beinah peinlich, weil gehört im<BR>recht eigentlichen Sinne gar nicht in dieses<BR>Forum, aber geht denn nicht einfach sowas?:<P>function F()<BR>{for(i=0;i<document.getElementsByTagName("ul").length;i++)<BR> {alert(document.getElementsByTagName("ul")[i].innerHTML)}};<P>Gib doch mal kurz Bescheid<P>gruß<P>matho

Re: Filtern/Extrahieren mit RegEX

Hallo Matho,<P>Danke dir für's Engagement   [img]images/icons/wink.gif" border="0[/img]<P>Deine JS Funktion liefert locker ihr Ergebnis im IE..<P>Und wenn ich das Problem on-the-fly lösen möchte wäre sie auch meine erste Wahl, weil ich nicht mehr benötige als sie zurückgibt.<BR>( Mit On-the-Fly ist hier gemeint das ich die Html Seiten die ich dir als Beispiel präsentiert hatte, einfach so wie sie sind auf den Server schieb, und dann beim Aufruf der Artikelbeschreibung erst die <ul></ul> Geschichte mit deiner Funktion extrahiere, und mit PHP in die Seite printe)<P>( Hätte das Alert dann durch n write ersetzt, und schwupp den Listentext in meiner Artikelbeschreibung gehabt).<BR>Bedauerlicherweise ist das Script ja nur im IE lauffähig, da getElementsByTag nicht in NS Browsern läuft. <P>D.h:<BR>Wenn ich die Artikelbeschreibung nicht nur dem IE USer zeigen will, kann ichs net zu Onlinekonvertierung verwenden..<P>Ich müßte es zur Offlinekonvertierung verwenden ( wahrscheinlich hast du das auch gedacht ), das geht aber mit JS nicht.<P>Ich weiß jedenfalls keine Möglichkeit.. <P>..Den Rückgabewert des JSscripts in eine Seite zu schreiben die..<P>a) ..genauso heißt wie die Ursprungsseite<P>b) ..danach in ein Verzeichnis gespeichert wird und<P>c) ..danach das nächste File öffnet, und die Prozedur wiederholt.<P>Mit Php ist das problemlos möglich - ich kann aber nicht auf JS Variablen od. Arrays von Php aus zugreifen.<P>Ich bräuchte da dann schon eine RegEx um die <ul></ul> Tag's zu isolieren.<P>Es gibt eine Funktion in Php die wie folgt aus sieht:<P><I><P>eregi_replace("<head>.*</head>","",$string);<BR> <BR></I><P>Die löscht den den Head aus einer Html Tabelle (inkl. allem was dazwischen steht).<P>Das gleiche könnt ich so machen das alles AUßER dem <ul></ul> Bereich (inkl. dem was dazw. steht) gelöscht wird.<P>Grüße Jochen<P>Mail mir doch mal deine Tel.Nr. mein glorreichens Fon hat die Nummer vergessen *grins*<P>Ach und mit J|G hab ich gesprochen - er glaubt nicht an den Weihnachtsmann, jedenfalls nicht an einen weiblichen   [img]images/icons/wink.gif" border="0[/img]<p>[ 17.08.2001: Beitrag editiert von: Jochen ]

Moderator devshare.de | Usability

Re: Filtern/Extrahieren mit RegEX

na na na; das ist W3C DOM und daher (fast) plattform-/browserunabhängig

mfG whitehouse

Re: Filtern/Extrahieren mit RegEX

Da schwillt mir doch der Kamm  [img]images/icons/grin.gif" border="0[/img]<BR>Dann probier das doch mal auf allen Plattformen/Browsern aus ....<P>*schmoll, knurrend in die ecke sitz*  [img]images/icons/grin.gif" border="0[/img]<P>Der arme Matho notiert aufwendig Scripts, und sitzt grade an der NN6 Version und dann erzählst du sowas  [img]images/icons/wink.gif" border="0[/img]<P>-- Wir sind grad dabei einen Konverter in PHP zu erstellen, der wird nachher gepostet ..<P>Grüße Jochen

Moderator devshare.de | Usability

6

Re: Filtern/Extrahieren mit RegEX

@ jochen<BR>nuja, whiteheard kann nun nicht ahnen, was wir die letzten 12 Stunden so alles getrieben<BR>haben.<BR>Sooo aufwendig sind meine scripts auch wieder nich, alles nette, kleine 2-oder auch mal dreizeiler, dafür davon inzwischen aber so an die 100 verschiedne.<BR>Die regex-Möglichkeiten der verschiednen javascript-Versionen unterscheiden sich doch<BR>ziemlich.<BR>Am besten gefällt mir momentan NN6.1 (javascript 1.5), zum ersten Mal, daß ich diesen browser tatsächlich brüderlich umarmen möchte, na, beinah.<BR>Allerdings hat der nun wiederum paar Tücken<BR>bei der Array-Bearbeitung. Man kann halt nich alles haben........<BR>Habt Ihr Euer Sektfläschlein schon leer, oder<BR>seit Ihr vielleicht schon bei der zwoten, Ihr<BR>Schlemmer?<P>gruß und gute nacht<P>matho

7

Re: Filtern/Extrahieren mit RegEX

N Abend<P>Wie wärs denn damit?<BR><BLOCKQUOTE><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><HR><pre><?php<BR>$filename = "seite.html";<P>$datei = implode ("", file ($filename));<P><BR>$beschreibung = ""; <BR>$pos = 0;<BR>while (strpos (strtolower (substr ($datei, $pos, strlen ($datei)-$pos)), "<url>") !== false) {<BR>    $where = strpos (strtolower (substr ($datei, $pos, strlen ($datei)-$pos)), "<url>");<BR>    if (strpos (strtolower (substr ($datei, $where, strlen ($datei)-$where)), "</url>") !== false) {<BR>        $to = strpos (strtolower (substr ($datei, $pos+$where, strlen ($datei)-$pos-$where)), "</url>");<BR>        $beschreibung .= "<P>". substr ($datei, $pos+$where+5, $to-5) ."</P>";<BR>        $pos += $where+$to + 6;<BR>    }<BR>}<P>echo $beschreibung;<BR>?></pre><HR></BLOCKQUOTE><P>habs zuerst mit Regulären Ausdrücken versucht, dabei wird allerdings vom ersten <url> bis zum letzen </url> alles angenommen, egal ob noch ein </url> oder <url> dazwischen war  [img]images/icons/frown.gif" border="0[/img]<BR>Deshalb das ganze rumgestringe<P><BR>Gero

8

Re: Filtern/Extrahieren mit RegEX

Also, wen's intressiert - wollte doch noch nich ins bettchen:<BR>Das unterschiedliche Verhalten der beiden browser (NN6.1 und IE5.5) zeigt sich<BR>ganz hübsch hier:<P><html><BR><script language="Javascript1.3"><BR>var q;<BR>function A(tag){return document.getElementsByTagName(tag)};<P>function Q()<BR>{for(i=0;i<A("ul").length;i++)<BR>  {q=document.body.innerHTML.match(/(<ul>.*</ul> )/ig);};<BR> for(i=0;i<q.length;i++)<BR>  {alert(q[i])};<BR>};<BR></script><BR></script><BR><body onclick="Q()"><BR><li><BR><ul><tt>jawodennumgotteswillen?????????</tt></ul></li><BR><ul><BR><s>neineineinein!!!!!!!!</s></ul><BR><ul><BR><q>dochdochdoch!!!!!!!!</q></ul><BR><ul><BR><e>tjap!!!!!!!!</e></ul><BR><ul><BR><li>lililiste!!!!!!!!</li></ul><BR></body></html><P>und hier:<P><BR><html><BR><script language="Javascript1.3"><BR>var q;<BR>function A(tag){return document.getElementsByTagName(tag)};<P>function Q()<BR>{for(i=0;i<A("ul").length;i++)<BR>  {q=document.body.innerHTML.match(/(<ul>.*</ul> )/ig);};<BR> for(i=0;i<q.length;i++)<BR>  {alert(q[i])};<BR>};<BR></script><BR></script><BR><body onclick="Q()"><BR><li><ul><tt>jawodennumgotteswillen?????????</tt></ul></li><BR><ul><s>neineineinein!!!!!!!!</s></ul><BR><ul><q>dochdochdoch!!!!!!!!</q></ul><BR><ul><e>tjap!!!!!!!!</e></ul><BR><ul><li>lililiste!!!!!!!!</li></ul><BR></body></html><P>Der IE5.5 findet keine li-tags innerhalb von ul.<BR>Der NN6.1 tut sich irgendwie mit Zeilenumbrüchen in html-Dateien schwer, es<BR>sei denn, diese erscheinen innerhalb eines Listenkontext, d.h. um's noch einwenig genauer zu formulieren:<BR>Wenn die Zeilenumbrüche zwischen den beiden ul-tags vorkommen:<P><html><BR><script language="Javascript1.3"><BR>var q;<BR>function A(tag){return document.getElementsByTagName(tag)};<P>function Q()<BR>{for(i=0;i<A("ul").length;i++)<BR>  {q=document.body.innerHTML.match(/(<ul>.*</ul> )/ig);};<BR> for(i=0;i<q.length;i++)<BR>  {alert(q[i])};<BR>};<BR></script><BR></script><BR><body onclick="Q()"><BR><li><BR><ul><BR><tt>jawodennumgotteswillen?????????</tt></ul><BR></li><BR><li><ul><s>neineineinein!!!!!!!!</s></ul><BR></li><BR><ul><BR><q>dochdochdoch!!!!!!!!</q></ul><BR><ul><BR><e>tjap!!!!!!!!</e></ul><BR><ul><BR><li>lililiste!!!!!!!!</li></ul><BR></body></html><P>Alles weitre lass ich unkommentiert. Vielleicht findet der eine oder die andre<BR>das Anguggen ganz lustig.    [img]images/icons/wink.gif" border="0[/img] <BR>Ich habe alles mir irgendwie Bekannte, Obskure,  defintiv auch absolut Unmögliches<BR>und Falsches ausprobiert. Wenn jemand was zu einfällt, da krieg ich spitze Öhrchen........<P>gruß an alle<P>matho<P><BR>postscriptum<P>Fällt mir grad just beim Editiern auf:<BR>Die Uhrzeit stimmt jedenfalls - Kölle allaaf un hellau !!!<p>[ 18.08.2001: Beitrag editiert von: matho ]

Re: Filtern/Extrahieren mit RegEX

Guten Abend allerseits..<P>Ein ganz Herzliches Dankeschön für die Anteilnahme und die Hilfsversuche ...<P>Mit vereinten Kräften haben wirs nun geschafft und das ultimative Html Extractor Tool geschaffen:   [img]images/icons/grin.gif" border="0[/img]   [img]images/icons/grin.gif" border="0[/img]   [img]images/icons/grin.gif" border="0[/img]<P>Auf Los gehts los:<P><I><BR><?<P>        <BR>                  <BR>                          //File with fileList to convert<BR>                          //Bem: Die hier eingetragenen Dateien müssen auch tatsächlich im Verzeichnis input/ vorhanden sein<BR>                          //Bem: Filestruktur zur Ausführung von BSE1.0  [img]images/icons/frown.gif" border="0[/img]BULL SHIT EXTRACTOR) <BR>                          // ============>meinVerzeichnis/<BR>                          // ============>fileindex.txt<BR>                          //==================>input/<BR>                          //=====================>zu konvertierende Dateien<BR>                          //==================>output/<BR>                          //==================>Verzeichnis zur Ausgabe der konvertierten Dateien<BR>                          <BR>                          // (c) 2001 x-tremeDEV Gbr <BR>                          // Send Comments to bullshit@x-tremedev.de<BR>                                                                   <BR>                         $fd = fopen ("fileindex.txt", "r");<BR>                         <BR>                         $filecounter = 0;<BR>                    <BR>                        <BR>while(!feof ($fd))<BR>{<BR>                 //Flag zum verhindern dass<BR>                 //der jeweilige Anfangstag mitgeprinted wird<BR>                 <BR>                 $firstTime = false;<BR>                 // read index file to process<BR>                 $iFileBuffer = fgets($fd, 4096);<BR>                //remove bullshit blanks<BR>                echo $fileCounter."n";                <BR>            <BR>                //debug<BR>                //echo strlen(ltrim(rtrim("input/".$iFileBuffer)));<BR>                //start file extracion<BR>                //Open File from file list<BR>                $inputFile = "/home/ilija/input/".ltrim(rtrim($iFileBuffer));<BR>                $outputFile = "/home/ilija/output/".ltrim(rtrim($iFileBuffer)).".inc";<BR>                <BR>                 $fd1 = fopen ($inputFile, "r") or die("Bullshit kein input".$inputFile);<BR>                //Open output file from file list<BR>                $fd2 = fopen ($outputFile, "w+")or die("Bullshit kein outpur".$outputFile);<BR>                <BR>                $counter = 0;<BR>                $counter2 =0;<BR>                $writeFlag=false;<BR>                <BR>                     while (!feof ($fd1)) {<BR>                         $counter++;<BR>                         <BR>                         if($writeFlag)<BR>                             {<BR>                             <BR>                                          // write output to file                           <BR>                                         fwrite ($fd2, $buffer);<BR>                                         <BR>                             }<BR>                         <BR>                         <BR>                         $buffer = fgets($fd1, 4096);<BR>                         <BR>                         <BR>                     <B>  if( eregi ("<ul>",$buffer) )</B><BR>                        {<BR>                            if($firstTime)<BR>                            {<BR>                                fwrite ($fd2, "<UL>n");<BR>                            <BR>                                <BR>                            }<BR>                            $firstTime = true;<BR>                            $counter2++;      <BR>                            $writeFlag = true;<BR>                         }             <BR>                         <BR>                             <BR>                              <BR>                         <B>  if( eregi ("</ul>",$buffer) )</B><BR>                        {<BR>                              <BR>                             $writeFlag = false;<BR>                         }                  <BR>                         <BR>                             <BR>                     }<BR>                     <BR>                     //Close input and output file <BR>                     fwrite ($fd2, "<UL>n");<BR>                     fclose ($fd1); <BR>                     fclose ($fd2);<BR>                    <BR>                    $fileCounter++; <BR>}<BR>     fclose ($fd);   <P><BR>?><P></I><P>P.S:<BR>Die Sektflasche wird JETZT geköpft, ich proste euch allen zu   [img]images/icons/wink.gif" border="0[/img]<P><BR>Liebe Grüße Jochen<P>Achso:<P>Das Fett markierte sind die PHP RegEx'es Hehehe.. [img]images/icons/wink.gif" border="0[/img]<p>[ 18.08.2001: Beitrag editiert von: Jochen ]

Moderator devshare.de | Usability

10

Re: Filtern/Extrahieren mit RegEX

Na denn BROOOOST!!<P>kleiner Tippfehler:<P>("Bullshit kein outpur".$outputFile);<P>Meine Äugelein sind, wiewohl gerötet, desselbigengleichen geschärft.<P>gruß<P>matho