Leser: 21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use Class::Struct;
struct artikel_info => {
anzahl => '$',
name => '$',
preis => '$',
};
my @myartikel;{
for ($i=0; $i<$Artikel_count; $i++) {
$myartikel[$i] = artikel_info->new();
}
}
for ($i=0; $i<$Artikel_count; $i++) {
if (($i+$j)%2 == 0) {$bgcolor=$light;} else {$bgcolor=$dark;}
&print_Artikel($Artikel[$i],"",$File_no,$i,$myartikel[$i]);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sub print_Artikel {
my $arrayref = shift;
my $schalter = shift;
my $file_no = shift;
my $i = shift;
my $newref = shift;
my @Artikel = @$arrayref;
my %myartikel = $newref;
#%myartikel->anzahl("test");
print "<!--$arrayref -->\n";
#print "<!--$myartikel",$myartikel->name," -->\n";
print "<!--$schalter -->\n";
print "<!--$file_no -->\n";
print "<!--$i -->\n";
print "<!-- $myartikel[0] -->";
print "<!-- $newref->name -->\n";
print "<!--geht2-->";
$Artikel[3] =~ s/\,/\./;
Guest ElesMein Problem besteht darin, das ich nicht weiß ob der Quellcode so wie er jetzt überhaupt richtig (funktionsfähig) ist und wie ich jetzt in den Struct Daten eintragen und auch auslesen kann.
Guest ElesAlso, ich mache seit neusten ein Praktikum in einer Firma welches schon eine bestehendes Warenwirtschaftssystem mit einer Onlineseite hat, welche 2003 in Perl geschrieben wurde. Nun soll ich einige Änderungen/ Verbesserungen an der Seite vornehmen.
Guest ElesZu den jetzigen Problem ist es so, dass die Artikel nach Preis bzw. Anzahl sortiert werden können sollen. Mein Lösungsansatz wäre gewesen alle Artikel von der Kategorie in einen Struct zu sammeln und zu sortieren.
Guest ElesIch kann auch gerne den gesamten Quellcode Posten welcher allerdings mehrere Dateien und über 6000 Zeilen Quellcode beinhaltet, deswegen habe ich in meinen Post die mir essentiellen Stellen wiedergegeben.
Guest ElesDeinem "Perl"-Code sieht man an, dass Du sonst C/C++ programmiert.Da ich bis her nur in C++ etwas gemacht habe muss ich mich erst mal in Perl einarbeiten.
Guest ElesZu den jetzigen Problem ist es so, dass die Artikel nach Preis bzw. Anzahl sortiert werden können sollen. Mein Lösungsansatz wäre gewesen alle Artikel von der Kategorie in einen Struct zu sammeln und zu sortieren. Da in den Unterprogramm die Artikel alle ordentlich aus der Datenbank ausgelesen werden aber gleich einzeln ausgegeben werden wollte ich gleich darüber das Struct füllen, woran ich jedoch scheitere wegen mangelnder Perl Kenntnisse.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
# Datenbank öffnen my $dbh=DBI->connect(...) or die("ERROR CONNECT: $DBI::errstr\n"); # abfrage: my $sth=$dbh->prepare('SELECT (name,preis,menge) FROM ... WHERE ...'); $sth->execute(...); my @Artikel; my $Artikel_count=0; while(my $array_ref=$sth->fetchrow_arrayref()) { $Artikel[$Artikel_count]=$array_ref; $Artikel_count++; } ...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
# Datenbank öffnen my $dbh=DBI->connect(...) or die("ERROR CONNECT: $DBI::errstr\n"); # Abfrage: my $sth=$dbh->prepare('SELECT (name,preis,anzahl) FROM ... WHERE ...'); $sth->execute(...); my @Artikel; while(my $hash_ref=$sth->fetchrow_hashref()) { push(@Artikel,$hash_ref); } # Ausgabe: for my $artikel (@Artikel) { print_Artikel($artikel); } sub print_Artikel { $artikel = shift; print "<!-- Name: $artikel->{name} -->\n"; print "<!-- Preis: $artikel->{preis} -->\n"; print "<!-- Anzahl: $artikel->{anzahl} -->\n"; print "<!--geht2-->\n\n"; }
my %myartikel = $newref;
my %myartikel = $newref;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
#!/usr/bin/perl use strict; use warnings; use Class::Struct; my @Artikel=( [ "tst", 10, '2,5' ], [ "foo", 5, '1,2' ], [ "bar", 100, '5' ], [ "bam", 365, '0.01' ], [ "fom", 1, '0.96' ], ); struct artikel_info => { anzahl => '$', name => '$', preis => '$', }; my @myartikel; for my $artikel (@Artikel) { my $obj=artikel_info->new(); $obj->name($artikel->[0]); $obj->anzahl($artikel->[1]); $obj->preis($artikel->[2]); push(@myartikel,$obj); } my $File_no=0; for my $i (0..$#myartikel) { print_Artikel($myartikel[$i],"",$File_no,$i); } sub print_Artikel { my $artikel = shift; my $schalter = shift; my $file_no = shift; my $i = shift; print "<!-- SCHALTER: $schalter -->\n"; print "<!-- FILE: $file_no -->\n"; print "<!-- COUNTER: $i -->\n"; print "<!-- NAME: ".$artikel->name." -->\n"; print "<!-- PREIS: ".$artikel->preis." -->\n"; print "<!-- ANZAHL: ".$artikel->anzahl." -->\n"; print "<!--geht-->\n\n"; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14
for ($i=0; $i<$Artikel_count; $i++) { $arrayref =$Artikel[$i]; @arrrray = @$arrayref; print "<!-- $arrrray[0] -->\n"; print "<!-- $arrrray[1] -->\n"; print "<!-- $arrrray[2] -->\n"; print "<!-- $arrrray[3] -->\n"; print "<!-- $arrrray[4] -->\n"; print "<!-- $arrrray[5] -->\n"; print "<!-- $arrrray[6] -->\n"; print "<!-- $arrrray[7] -->\n"; print "<!-- $arrrray[8] -->\n"; print "<!-- $arrrray[9] -->\n"; }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!-- Board P6 "ASUS P7H55-M" Sockel 1156;H55express-Chip; -->
<!-- 4*DDR3 bis 16GB;Dual Channel;on board Grafik; -->
<!-- -->
<!-- 82,50 -->
<!-- 28.10.2010 -->
<!-- 6 -->
<!-- 6 -->
<!-- BOI6-ASU P7H55 -->
<!-- -->
<!-- -->
<!-- Board P6 "ASUS P7H55D-M PRO" 1156 INTEL 1333MHz micro ATX -->
<!-- INTEL H55-CHIP;Dual Channel 4*DDR3 bis 16GB;PCI3 2.0; -->
<!-- 1*PCIex*16;1*PCIex*1;3*PCI;4*DDR3 Dual Channel;1*IDE 2 Geräte;6*SATA(RAID);1*eSATA;14*USB;7.1 Sound;1GB LAN; -->
<!-- 99,00 -->
<!-- 22.10.2010 -->
<!-- 1 -->
<!-- 1 -->
<!-- BOI6-ASU P7H55D -->
<!-- -->
<!-- www.asus.de -->
1
2
3
4
5
6
<!-- ARRAY(0x86dd348) -->
<!-- ARRAY(0x86e2de8) -->
<!-- ARRAY(0x8713b00) -->
<!-- ARRAY(0x87730fc) -->
<!-- ARRAY(0x8747524) -->
<!-- ARRAY(0x88fec18) -->
Guest Elesschreibt sich in Perl eleganter:Und der Code:
Guest ElesAlso sortiert man die Liste danach:Nun brauche ich einen Ansatz das ich Quasi den Array $Artikel[n] nach den Preis der dementsprechenden Arrays $arrrray[3] sortieren kann.
1 2 3
foreach my $a sort {$a->[3] <=> $b->[3]} (@Artikel) { print "<!-- $a -->\n"; }
1 2
print "<!-- $_ -->\n" foreach sort {$a->[3] <=> $b->[3]} map {$_->[3] =~ s/,/./; $_}(@Artikel);
1 2 3 4
foreach my $a sort {$a->[0] <=> $b->[0]} map {unshift @$_, $_->[3]; $_->[0] =~ s/,/./}(@Artikel) { print "<!-- $a -->\n"; }
1 2 3 4 5 6 7
my @Artikel_sorted = sort { $a->[3] cmp $b->[3] } @Artikel; print "<!---\n"; print "@{$_}\n" for @Artikel_sorted; print "-->\n";
Quote...
# $a
# $b
Special package variables when using sort(), see sort. Because of this specialness $a and $b don't need to be
declared (using use vars, or our()) even when using the strict 'vars' pragma. Don't lexicalize them with my $a
or my $b if you want to be able to use them in the sort() comparison block or function.