Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7888[/thread]

2 array Fragen.

Leser: 1


<< |< 1 2 3 4 5 >| >> 48 Einträge, 5 Seiten
galaxy
 2006-04-13 12:27
#64848 #64848
User since
2006-04-03
30 Artikel
BenutzerIn
[default_avatar]
Hallo,

I habe 2 Fragen, welche sich auf das Arbeiten mit Arrays beziehen.

1) Ich lese eine kleine Datei in ein Perl-Array ein. Anschliessend prüfe ich mit Hilfe einer for Schleife ob  bestimmte Zeilen die richtigen Werte enthalten.
Sollten Dabei Fehler in den entsprechenden Werten festgestellt werden, so werden diese Fehler in ein Array namens @error geschrieben. Angenommen Zeile 3 und 7 enthielten falsche Werte, so sieht das Errorarray folgendermassen aus:

Array
(
    [3] => Wert1
    [7] => Wert2
)

Jetzt will ich nachdem die Ueberprüfung komplet durchgeführt wurde folgendes: Sollten Fehler festgestellt werden so sollen diese in ein Logfile geschrieben werden und mein Perl-Skript soll keine weiteren Tätigkeiten ausführen. (also mit die() Enden)

Wie kann ich das mit dem "falls Fehler gefunden werden" realisieren? In PHP gibt es Funktionen wie is_array(). Somit kann ich dort abfragen, ob das Array @errors existiert, diese dann ausgeben und mit die() enden. In Perl kann ich eine solche funktion nicht finden.

2)Bei der Ausgabe des oben beschriebenen Error-Arrays mit den Einträgen 3 und 7 taucht beim Schreiben in das Logfile für die anderen Elemente immer ein Zeilenumbruch auf. Das Array durchlaufe ich mit einer foreach-Schleife. Also Elemnt 3 steht z.B in der 3ten Zeile des Logfiles. Vorher sind 2 leerzeilen.

Kann mir dabei jemand helfen?

Danke für Tipps\n\n

<!--EDIT|galaxy|1144916909-->
Ronnie
 2006-04-13 12:36
#64849 #64849
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=galaxy,13.04.2006, 10:27]Kann mir dabei jemand helfen?[/quote]
Zeig mal ein wenig Quellcode!

Ansonsten kannst du feststellen ob ein Array 'Inhalt' hat, mit if (@array), vielleicht hilft dir das ja schon bei deinem Teilproblem?!
Taulmarill
 2006-04-13 12:39
#64850 #64850
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
1) eine abfrage darauf, ob fehler gefunden wurden, kannst du einfach mit if ( @error ) { ... machen. ich würde aber erlich gesagt eher dazu raten, eine datenstruktur wie arrays of arrays zu benutzen, da du sonst immer ein wenig arbeit investieren musst, um die arrayfelder zu finden, in denen fehler sind. damit würde sich auch frage 2) erledigen.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
pq
 2006-04-13 13:00
#64851 #64851
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
perldoc -f ref
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
galaxy
 2006-04-13 13:49
#64852 #64852
User since
2006-04-03
30 Artikel
BenutzerIn
[default_avatar]
Danke die Vorschläge haben mein Problem gelöst
shaihulud
 2006-04-19 16:41
#64853 #64853
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
hab ne frage bezüglich hashes in perl.


my %hash = ();
$hash{$key} = $value;

1.gibt es eine funktion von der funktionsweise wie foreach (bei arrays) für hashes um keys und values anzusprechen?

2.wie gebe ich hashes auf der console aus? print %hash geht jan nicht, ich hätte aber gerne den gesamten hash ausgegebn.gibts da was in perl konform zu printr in php?\n\n

<!--EDIT|shaihulud|1145451003-->
docsnyder
 2006-04-19 16:50
#64854 #64854
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
@shaihulud

Deine zweite Variante
Code: (dl )
$hash{$key} = $value;

ist richtig.

Quote
3. wenn ich das mit arrays nicht machen kann, gibt es dann eine funktion von der funktionsweise wie foreach für hashes um keys und values anzusprechen?


Geht analog zu Arrays:

Code: (dl )
1
2
3
for $key ( keys(%hash) ) {
<do something with $hash{$key}>
}


Gruß, Doc
shaihulud
 2006-04-19 16:52
#64855 #64855
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
danke für die antwort, hab aber meine frage nochmal leicht umeditiert. s.o.

kannst du mir mit der print_r frage noch weiterhelfen?
Relais
 2006-04-19 16:56
#64856 #64856
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=shaihulud,19.04.2006, 14:41]1.gibt es eine funktion von der funktionsweise wie foreach (bei arrays) für hashes um keys und values anzusprechen?

2.wie gebe ich hashes auf der console aus? print %hash geht jan nicht, ich hätte aber gerne den gesamten hash ausgegebn.gibts da was in perl konform zu printr in php?[/quote]
Ja, die heißt each.

Code: (dl )
1
2
3
while ( my ( $key, $value ) = each %hash ) {
print qq[key: $key, value: $value\n];
}


Was macht denn printr in php genau?

Du kannst es zum Bleistift wie oben machen, oder einfach mit join nach belieben ausgeben.
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
shaihulud
 2006-04-19 17:04
#64857 #64857
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
print_r $array;

gibt in php einfach den array aus:


array(key=>value,key=>value,key=>value,key=>value)
so ca
<< |< 1 2 3 4 5 >| >> 48 Einträge, 5 Seiten



View all threads created 2006-04-13 12:27.