Schrift
[thread]11304[/thread]

Listegröße falsch angezeigt und Fehlermeldungen



<< |< 1 2 >| >> 16 Einträge, 2 Seiten
SchaubFD
 2008-02-15 10:43
#105910 #105910
User since
2008-02-13
14 Artikel
BenutzerIn
[default_avatar]
Hallo,

noch gebe ich Perl nicht auf, aber einiges ist schon sehr kurios.

Nachdem ich eine ListenHash Kombination aufgebaut habe und dort Werte ohne Probleme bearbeiten und übergeben kann, taucht nun Folgendes auf.

Beispiel (vereinfacht):

Ich lese eine CSV-Datei ein in der Beträge stehen:

10,50
5,10
2,70
...

Diese Werte füge ich dem ListenHash mit anderen Spalten (hier weggelassen) zu:

...
@puffer[$zaehler]{kunde}=$name;
@puffer[$zaehler]{betrag}=$wert;
$zaehler++;

In der Datei sind genau 900 Werte/Zeilen enthalten, ich bekomme in der Funktion selbst auch nicht mehr als 900 angezeigt und zugewiesen (von 0 bis 899). Übergebe ich diese Liste mit "return @puffer", an eine andere Variable, so zeigt "print @neu_puffer;" als Ergebnis 904 an.

Was kann das sein? oder wo sollte ich suchen?

----------------------------------------------------------------------------------

Folgende Fehlermeldung kommt zudem durch die falsche Größenangabe:

Ausgabe $zaehler und $neu_puffer[$zaehler]{betrag}:

816| 2,60
817| 1,50
818| 2,50
819Can't use string ("9029623409") as a HASH ref while "strict refs" in use at fest.pl line 240.

Die Fehlermeldung wird einfach in die Ausgabe geschrieben. Da ein Zugriff auf die Elemente 900-904 nicht möglich ist.
Struppi
 2008-02-15 11:37
#105911 #105911
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Du solltest auch die Warnungen beachten, ansonsten kann man mit dem was du zeigst keine Aussage über deine Problem treffen. Aber vermutlich entfernst du den Zeilenumbruch nicht.
Taulmarill
 2008-02-15 11:56
#105912 #105912
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
Die Zuweisung @puffer[$zaehler]{kunde}=$name; sieht für mich schon mal falsch aus. Das kann eigentlich nicht funktionieren. Zumindest bekomme ich bei folgendem Programm:
Code: (dl )
@foo[0]{abc} = 3.14;

die Fehlermeldung:
Code: (dl )
syntax error at -e line 1, near "]{abc"

Versuch die Zuweisung mal eher so zu schreiben:
Code: (dl )
1
2
3
$puffer[$zaehler]->{kunde}=$name;
$puffer[$zaehler]->{betrag}=$wert;
$zaehler++;

oder besser noch:
Code: (dl )
push @puffer, { kunde => $name, betrag => $wert };
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
SchaubFD
 2008-02-15 12:25
#105913 #105913
User since
2008-02-13
14 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
@foo[0]{abc} = 3.14;


Es geht aber

Code: (dl )
1
2
3
4
5
6
7
8
9
10
C:\>type foo.pl
my @foo;

$foo[0]{abc} = 3.14;

print $foo[0]{abc};

C:\>perl foo.pl
3.14
C:\>
Struppi
 2008-02-15 12:32
#105914 #105914
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Mach mal die Warnungen an !
SchaubFD
 2008-02-15 12:49
#105915 #105915
User since
2008-02-13
14 Artikel
BenutzerIn
[default_avatar]
Struppi+2008-02-15 10:37:13--
Du solltest auch die Warnungen beachten, ansonsten kann man mit dem was du zeigst keine Aussage über deine Problem treffen. Aber vermutlich entfernst du den Zeilenumbruch nicht.


Du hast recht, die letzte Leerzeile ist mit verarbeitet worden. Habe diese mit pop() entfernt.
Nichts desto trotz, die Fehlermeldung ist noch da, nun halt statt 904 mit 903 als Listenanzahl.
Struppi
 2008-02-15 12:55
#105916 #105916
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Schalte die Warnungen an!!!

und entferne die Newlinezeichen, dafür gibt es eine (bzw zwei) Funktion(en). http://perldoc.perl.org/functions/chomp.html

Was du da poppen willst ist mir nicht klar und aus deinem code auch nicht ersichtlich.

[EDIT]noch was, das mit den Warnungen und Taulmarills Antwort bezog sich auf das hier:
Code (perl): (dl )
1
2
3
...
@puffer[$zaehler]{kunde}=$name;
@puffer[$zaehler]{betrag}=$wert; 
SchaubFD
 2008-02-15 13:19
#105917 #105917
User since
2008-02-13
14 Artikel
BenutzerIn
[default_avatar]
Derzeit sieht es so aus, das ich 3 zusätzliche Listenelemente am Ende der Liste habe und ich glaube ich kenne nun die Ursache.

Ich übergebe den ListenHash @pos und drei Variablen. Scheinbar werden die drei Variablen in die Liste mit übernommen und führen in der Folge zu dem Fehler.

Code: (dl )
return @puffer,$rechnungsnummer,$rechnungsdatum,$buchungskonto;


Nur wie muß die Übergabe aussehen, damit @pos nicht mit den Variablen als Listenelemente verbunden wird?
Struppi
 2008-02-15 13:24
#105918 #105918
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
SchaubFD
 2008-02-15 13:37
#105919 #105919
User since
2008-02-13
14 Artikel
BenutzerIn
[default_avatar]
Struppi+2008-02-15 12:24:59--
Die Frage kommt mir bekannt vor: http://board.perl-community.de/thread/11291/startW...


Ja ich weis, nur drehe ich langsam mit diesen blöden Referenzen durch. Nur wie übergebe ich diese Listen und Hashes damit am Ende auch Liste und Hash wieder rauskommt und sich nicht mit Variablen verbindet oder sonstigen Mist produziert.

Wie aus meinem anderen Forumseintrag zu ersehen, nervt mich das einfach an 4 verschiedene Schreibweisen auf den gleichen Inhalt nutzen zu müssen.

Wie kommt aus

sub foo {
my @foo_liste;
}

im Hauptprogramm als

my @hauptprogramm_liste;

an, mit der Möglichkeit weiterer Variablen in der Übergabe und nicht mit @,$,->,\% usw..

Der Interpreter sollte doch Alarm schlagen, wenn er auf Adressbereiche andere Variablen zugreift. Ich wüsste nicht das mir andere Programmiersprachen schon mal solche Probleme gemacht hätten.



<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2008-02-15 10:43.