open(HTMLFILE,"htmldateiname.html);
while (<HTMLFILE>)
Kannst du mir diese while-Schleife mal genauer erklären..
Die Bedingung ist doch da die Datei und er mach hüpft jetzt also jeden Durchgang
eine Zeile weiter runter oder wie darf ich das jetzt verstehen ?
Die Anweisung <HTMLFILE> hat Auswirkungen je nach Kontext.
Im Prinzip liest diese Anweisung aus einer Datei. Man kann also schreiben: $lesezeile = <HTMLFILE>. Dann hat die Variable $lesezeile die nächste Zeile der Datei.
Man kann auch schreiben: @allezeilen = <HTMLFILE>. Dann werden alle Zeilen in das Array @allezeilen gepackt. Das verbraucht allerdings mehr Speicher, eine 2MB-Datei braucht mindestens mal 2MB Speicher dafür.
Die Anweisung <HTMLFILE> ist identisch mit $_ = <HTMLFILE>.
Und die while-Schleife liest nun solange, wie aus der Datei gelesen werden kann. Die Anweisung $_ = <HTMLFILE>, oder kurz <HTMLFILE> gibt "false" zurück, wenn sie aufgrund des Dateiendes nicht mehr ausgeführt werden kann, und endet so. Während des erfolgreichen Lesens gibt sie "true" zurück, und while läuft weiter.
Also mein Quelltext bis jetzt sieht so aus ...
open(HTMLFILE,"datei.txt");
Machen wir's mal ganz ordentlich:
open (HTMLFILE,"datei.txt") or die "Datei konnte nicht geöffnet werden";
while (<HTMLFILE>)
{
if ($_=~/href="(...)">/)
Hier muß natürlich dein passender regulärer Ausdruck rein. Die Aufgabe, mal einen zu erfinden, wollte ich dir eigentlich überlassen. Die Strategie, nach was du suchen sollst, hab ich dir ja schon erklärt. :) Deswegen findet er im Moment wohl auch nichts.
{
$i=0;
Böse Falle: Wenn du $i in der Schleife immer wieder auf Null setzt, wird auch immer wieder das nullte Element des Arrays angesprochen. Pack diese Anweisung nach außerhalb, vor die while-Schleife.
@ergebniss[i]=$1;
Falsche Zuweisung. Merke: $ = $, @ = @. Richtig ist:
$ergebnis[$i] = $1;
$i++;
}
}
close(HTMLFILE);
open (TESTFILE,">ergebnisstest.txt");
print TESTFILE @ergebniss[0];
Gleiche Problematik. Das komplette Array heißt @ergebnis, ein Element heißt $ergebnis[NUMMER]. Richtig wäre also auch hier
print TESTFILE $ergebnis[0];
close (TESTFILE);
In der Datei "datei.txt" ist nur ein Link drin zum testen.
Wenn du dort als Link mal reinschreibst: <a href="xxx">, dann sollte es funktionieren. Frag nicht nach dem Sinn des Links. ;)
- Sven Rautenberg