klaus: Matching Operator (Perl sucht nicht die spitzen Klammern)

Beitrag lesen

Hi,

$pfad1 ="c:\test\doz.html";
       open(DATEI1, "$pfad1");
       @inhalt1 = <DATEI1>;
       $pfad2 ="c:\test\doz.txt";
       open (DATEI2, ">$pfad2");
       foreach $zeile1 (@inhalt1){
       chomp $zeile1;
       }
       print DATEI2 "@inhalt1\n";
       close DATEI2;

Du hast hier den inhalt von "doz.html" nach "doz.txt" kopiert und dann noch ein "\n" dazugegeben,
sonst sind die Dateien identisch, weil in der foreach-Schleife ja am inhalt von @inhalt1 nichts verändert wurde.
ich glaube Du wolltest folgendes machen
open(DATEI1,"$pfad1");
open(DATEI2,">$pfad2");
print DATEI2 chomp while <DATEI1>;
close(DATEI1);
close(DATEI2);

  1. Danach:

$pfad2 ="c:\test\doz.txt";
       open (DATEI2, "$pfad2");
       @inhalt2 = <DATEI2>;

$pfad3 ="c:\test\dozarrey.txt";
       open (DATEI3, ">>$pfad3");
          foreach $zeile2 (@inhalt2) {       # doz.txt besteht nur aus eine Zeile
             if ($zeile2 =~ m/<tr><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td></tr>/g) {
                 $key=$1;
                 $value="$2$a$3$a$4";    # $a= ", ";
                 print DATEI3 "$key$b$value$c\n";     # $b= "", ""; $c="",\n"";
             }
         }
.........

Hier liegt wirklich eine zu restriktive REGEX Deinem Problem zugrunde.
Eine REGEX versucht in erster Linie, ein gültiges Matching zu erreichen. Bei Dir kann's Deinem Beispiel zufolge schon allein deshalb nicht funktionieren,
weil zwischen erster und zweiter Spalte ein Kommentar eingfügt ist, welcher durch die Regex nicht aufgelöst werden kann
wie siehts mit Attributen aus usw. ziemlich heavy, sag ich Dir.
Vielleicht probierst Du einmal ein Perl-Modul aus, welches Dir vielleicht helfen kann. HTML-Tree z.B.
XML-Module könnten vielleicht auch helfen, ist nur so eine Idee.