Hallo Lars,
hi,
folgendes prob: ich schreibe mit einem script html-code in eine bestehene html-seite, nun moechte ich aber (wenn sich der html-code aendert) diesen auch wieder aus dieser datei rauskriegen.
mein ansatz: ich schreibe in die html-datei <!--SCRIPTSTART--> mein html-code <!--SCRIPTENDE-->.
nun moechte ich den text zwischen diesen beiden zeilen "killen" und statt der beiden <!-- --> nur <!--SCRIPTSTART--> da stehen haben, als anfangsmarke fuer das reinschreibscript. (die rechtschreibung ist ok!)hier meine sub dafuer, wenn ich sie ausfuehre, loescht er mir ja auch den alten eintrag er schreibt auch <!--SCRIPTSTART--> hin, aber dann nicht den Rest der html-datei. d.h. <!--SCRIPTSTART--> steht dann am ende der html-datei und nicht wie gewollt mitten in der datei.
koennte sich jemand bitte dieses problems antun?
antun ist, glaube ich, der richtige Ausdruck ; )
#!perl
Du solltest *immer*
use strict;
und dann natuerlich my verwenden (lass ich *hier* der Einfachheithalber weg)
sub check4old_script{
$errormsg="Fehler beim Laden der Datei: $meine_html (";
open (DATEI $meine_html) &error($errormsg.$!.')');
hier fehlt ein ','.
open DATEI, $meine_html or die "open DATEI: $!";
@lines=<DATEI>;
close (DATEI);
$filesize=@lines;
kannst Du weglassen und $#lines benutzen
$errormsg="Fehler beim Durchchecken nach altem Code in der Datei: $meine_html (";
open (DATEI>$meine_html) &error($errormsg.$!.')');
open DATEI, ">$meine_html" or die "open DATEI: $!";
for ($f=0;$f<=$filesize;$f++) {
for ($f=0; $f=$#lines;$f++) {
oder gar
for (0.. $#lines) {
$_=$lines[$f];
if (/<!--SCRIPTSTART-->/) {
while ($_ ne /<!--SCRIPTENDE-->/) {
Du meinst (wahrscheinlich)
while ($_ ne '<!--SCRIPTENDE-->') {
$_=$lines[$f];
$f++;
}
print DATEI '<!--SCRIPTSTART-->';
}
»» else {print DATEI $_;}
»» $f++;
Hier erhoehst Du den Index ein zweitesmal, d.h. Du ueberspringst jedesmal eine Zeile.
}
close (DATEI);
}
Kann sein, dass ich noch etwas uebersehen habe, den Code solltest Du aber auf jeden Fall noch mal ueberdenken.
Ich wuerde es so machen:
#!perl -w
use strict;
my $meine_html = 'test.html';
my $neue_html = 'test_neu.html';
open DAT, $meine_html or die "open $meine_html: $!";
open NEU, ">$neue_html" or die "open $neue_html: $!";
while (<DAT>) {
print NEU;
last if /<!--SCRIPTSTART-->/;
}
while (<DAT>) { last if /<!--SCRIPTENDE-->/ }
while (<DAT>) { print NEU};
close DAT;
close NEU;
rename ($neue_html, $meine_html); # bei Bedarf
vielen dank schon mal soweit
bye lars
Gruss
Kai