Thread Win32::OLE auf dem pc gesucht: kann zwar modul finden gibt aber mehrere (92 answers)
Opened by sabrina at 2006-08-30 11:40

sabrina
 2006-09-11 13:24
#69377 #69377
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
ja das wollte ich auch aber seit mein projekt beaufsichtigter und mein chef aus dem urlaub zurueck sind, gibt es jede menge aenderungen, z.b. keine excel doch ne datenbank so wie ich es ganz am anfang mal vorgeschlagen hatte, andere dateien und und und. jetzt kann ich eigendlich viele meiner alten code stuecke verwerfen und neu anfangen aber zum glueck hab ich ja noch die ganzen codestuecke aus dem forum.
das mit $1,  habe ich aus perl in 21 tagen
Code: (dl )
1
2
3
4
5
6
7
8
9
10
Frage:
Ich habe hier einige Codezeilen, die in zwei Schritten versuchen, etwas aus einem String herauszuziehen. Das erste Muster legt einen Teilstring in $1 ab, und dann durchsucht das zweite Muster $1 nach einem weiteren Muster. Das zweite Muster führt nie zu einer Übereinstimmung, und die Ausgabe von $1 zeigt, dass die Variable leer ist. Wenn diese Variable aber leer ist, so hätte das zweite Muster eigentlich gar nicht erst verglichen werden sollen. Was läuft hier falsch?

Antwort:
Das klingt, als wenn Sie ungefähr folgendes versucht hätten:

   if ($string =~ /ein langes Muster mit einem {Teilmuster} darin/) {   if ($1 =~ /ein zweites Muster/) {      # verarbeitet zweites Muster   }}
Leider geht das so nicht. Die Variable $1 (oder jede andere Variable) ist unglaublich kurzlebig. Jedesmal, wenn Sie einen regulären Ausdruck verwenden, setzt Perl alle Übereinstimmungsvariablen zurück. Bei diesem speziellen Beispiel hier gibt es in der ersten Zeile eine Übereinstimmung, und die Variable $1 wird mit dem Inhalt der Klammern gefüllt. Sobald Sie jedoch einen neuen Mustervergleich durchführen (in der zweiten Zeile), verschwindet der Wert von $1, was konkret bedeutet, dass das zweite Muster nie zu einer Übereinstimmung führen kann. Das Geheimnis liegt darin, sicherzustellen, dass die Werte aller Übereinstimmungsvariablen irgendwo anders abgelegt werden, wenn Sie wiederverwendet werden sollen. In diesem besonderen Fall reicht es aus, eine temporäre Variable hinzuzufügen und diese dann zu durchsuchen:

   if ($string =~ /ein langes Muster mit einem {Teilmuster} darin/) {   $tmp = $1;   if ($tmp =~ /ein zweites Muster/) {      # verarbeitet zweites Muster   }}

werd mal dein perldoc lesen
ausgabe soll hier sein:
Code: (dl )
1
2
3
4
5
6
open(OUTDATEN, ">ZIEL.txt") or die "Fehler beim oeffnen/anlegen: $!";
for my $entry(@data)
{
print OUTDATEN sprintf($format . "\n",@$entry);  #ausgabe in datei
}
close (OUTDATEN)or die $!;

da soll es ausgegeben werden wie immer nur durch semilikons getrennt damit die datenbank spaeter die einzelnen daten einlesen kann. so hiess es zu mir oder ist das falsch?
lg sabrina

View full thread Win32::OLE auf dem pc gesucht: kann zwar modul finden gibt aber mehrere