Thread Datei auf vorhanden String untersuchen (1 answers)
Opened by Gast at 2006-09-09 00:23

murphy
 2006-09-09 20:44
#69601 #69601
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Deine Methode zum Überprüfen auf doppelte Einträge hat mehrere Probleme. In Reihenfolge des Auftretens im Code:

1) foreach (<READ_TEMP>) ... ist relativ ineffizient, denn es liest zunächst die gesamte Datei in eine Liste im Speicher ein und iteriert dann über sie. Sinnvoller ist wohl while (<READ_TEMP>) ... um Datensatzweise einzulesen.

2) Wenn du in der foreach oder while Schleife in $_ mehr als nur eine Zeile haben willst, solltest du die Eingabedatensatztrennmarkierung entsprechend setzen, also in Deinem Fall zum Beispiel { local $/ = ''; local $_; while (<READ_TEMP>) ... }. (Siehe perlvar für mehr Informationen zu $/ und perlop dazu, warum ich auch $_ lokalisiere.)

3) Die Anweisung $_ = "$title\n$item->{link}\n\n" ist kein logischer Ausdruck, sondern eine Zuweisung. Du meinst vermutlich $_ == "$title\n$item->{link}\n\n", was aber auch verkehrt ist, denn das wäre ein numerischer Vergleich. Eigentlich wäre wohl chomp; if ($_ eq "$title\n$item->{link}") ... am besten.

4) Da du die gleiche Datei, die Du schreibst, auch wieder einliest, solltest du nach jedem ausgegebenen Datensatz die Ausgabepuffer leeren, damit die Daten auch wirklich in der Datei angekommen sind bevor sie wieder eingelesen werden sollen.

Zu guter letzt noch ein Tip: Wenn Deine RSS-Feeds nicht riesig sind, verwende statt linearer Suche durch Dateien lieber einen Hash um zu speichern, ob Du einen Eintrag schon geschrieben hast.
When C++ is your hammer, every problem looks like your thumb.

View full thread Datei auf vorhanden String untersuchen