Beitrag von Toralf (101 Beiträge) am Mittwoch, 24.April.2002, 00:55.
Zähler verschiedener Datensätze
Hallo,
ich versuche die Anzahl verschiedener Datensätze zu zählen.
<perl>
$merkmodell="";
$erstersatz=1;
$zaehler=0;
get "Modell==* ","main";
while (get_next("main"))
{
if ($erstersatz==1)
{
$merkmodell=$Modell;
}
if ($merkmodell ne $Modell)
{
out $zaehler, " ",$merkmodell;
$zaehler=0;
}
else
{
$zaehler++;
}
}
out $zaehler, " ",$merkmodell;
funktioniert aber leider nicht wie gewünscht!
Antworten
Beitrag von Jurenda (305 Beiträge) am Mittwoch, 24.April.2002, 06:31.
Re: Zähler verschiedener Datensätze
Probiers mal so:
<perl>
get "sort=Modell","main","main";
$merkmodell=$Modell;
$zaehler=0;
while (get_next("main"))
{
if ($merkmodell ne $Modell)
{
out $zaehler, " ",$merkmodell;
$merkmodell=$Modell;
$zaehler=1;
}
else
{
$zaehler++;
}
}
out $zaehler, " ",$merkmodell;
</perl>
Grüße Jurenda
Antworten
Beitrag von Sander (8133 Beiträge) am Mittwoch, 24.April.2002, 08:56.
Re: Zähler verschiedener Datensätze
Es gibt was schnelleres:
<perl>
get "Modell==* ","main";
while (get_next("main"))
{
$Anzahl{$Modell}++;
}
foreach $Modell(keys %Anzahl)
{
out "$Modell - Anzahl: $Anzahl{$Modell}<br>";
}
</perl>
Sander
Antworten
Beitrag von Toralf (101 Beiträge) am Mittwoch, 24.April.2002, 10:46.
Re: Zähler verschiedener Datensätze
DAnke Sander!
Nun möchte ich abernoch sortieren, dass die meisten oben in der Liste erscheinen.
Antworten
Beitrag von Fabian (52 Beiträge) am Mittwoch, 24.April.2002, 11:29.
Re: Zähler verschiedener Datensätze - Zusatzfrage
Hallo,
prima Sache, aber wie mache ich es bei mehreren Feldern? Also ich möchte z.B. wissen, wieviel mal ein Merkmal gesetzt wurde, aber dieses Merkmal steht nicht nur in dem Feld Modell, sondern in den Feldern Modell1, Modell2 und Modell 3.
Dankeschön !
Antworten
Beitrag von Claus S. (1671 Beiträge) am Mittwoch, 24.April.2002, 17:47.
Re: Zähler verschiedener Datensätze - Zusatzfrage
hallo,
bei mehreren _gleichartigen_ feldern müsste es so gehen (zumindest hat es bei mir so geklappt):
<perl>
get "Modell_1==* ","main";
while (get_next("main"))
{
$Anzahl{$Modell_1}++;
$Anzahl{$Modell_2}++;
$Anzahl{$Modell_3}++;
}
foreach $Modell_1(keys %Anzahl)
{
out "$Modell - Anzahl: $Anzahl{$Modell_1}<br>";
}
</perl>
nur das sortieren habe ich noch nicht hingekriegt :-(
gruss
Antworten
Beitrag von Sander (8133 Beiträge) am Mittwoch, 24.April.2002, 18:32.
Re: Zähler verschiedener Datensätze
So wird sortiert
<perl>
get "Modell==* ","main";
while (get_next("main"))
{
$Anzahl{$Modell}++;
}
%temp=%Anzahl;
@sortiert=sort { $temp{$a} <=> $temp{$b} } keys %temp;
foreach (@sortiert)
{
out "$_ - Anzahl: $Anzahl{$_}<br>";
}
</perl>
Sander
Antworten
Beitrag von Claus S. (1671 Beiträge) am Mittwoch, 24.April.2002, 19:18.
Re: Zähler verschiedener Datensätze
hallo sander,
dein sortierbeispiel funzt, aber in meinem beispiel brauche ich die sortierung andersherum, d.h. der wert, der in $_ steht, soll sortiert werden.
da ich leider die syntax aus deinem beispiel nicht verstehe, kann ich es mir nicht dementsprechend umbauen. vieeleicht kannst du es mal erklären.
danke
Antworten
Beitrag von Sander (8133 Beiträge) am Mittwoch, 24.April.2002, 19:44.
Re: Zähler verschiedener Datensätze
<perl>
get "Modell==* ","main";
while (get_next("main"))
{
$Anzahl{$Modell}++;
}
%temp=%Anzahl;
@sortiert=sort { $temp{$a} <=> $temp{$b} } keys %temp;
@reversed=reverse @sortiert;
foreach (@reversed)
{
out "$_ - Anzahl: $Anzahl{$_}<br>";
}
</perl>
%temp=%Anzahl;
hier wird das array kopiert.
@sortiert=sort { $temp{$a} <=> $temp{$b} } keys %temp;
aus dem temp. array werden die keys als liste zusammengefasst und dabei nach der sort {} -bedingung sortiert. Dabei steht $a für den linken, $b für den rechten wert der values. Das ist praktisch ne kleine sub, die entweder 1 für grösser, 0 für = oder -1 für kleiner zurückliefert. Könnte man auch so schreiben (aus selfhtml):
sub NummernSort {
if($a < $b)
{ return -1; }
elsif($a == $b)
{ return 0; }
else
{ return 1; }
}
je nach rückgabe werden die Werte getauscht oder auch nicht.
Sander
Antworten
Beitrag von Sander (8133 Beiträge) am Mittwoch, 24.April.2002, 19:48.
Re: Zähler verschiedener Datensätze
Antworten
Beitrag von Claus S. (1671 Beiträge) am Mittwoch, 24.April.2002, 21:03.
Re: Zähler verschiedener Datensätze
danke sander,
funzt jetzt fast ;-),
allerdings noch das zahlen-sort-problem 1 - 10 - 11 - 12 - 2 - 3 - 31 - 32 etc.,
obwohl in der datei die felder vom typ und sort auf zahl definiert sind.
Antworten
Beitrag von Sander (8133 Beiträge) am Mittwoch, 24.April.2002, 21:13.
Re: Zähler verschiedener Datensätze
nach welchem bsp sortierst du jetzt. poste mal ein bischen code...
Sander
Antworten
Beitrag von Claus S. (1671 Beiträge) am Mittwoch, 24.April.2002, 22:21.
Re: Zähler verschiedener Datensätze
hier der code:
<perl>
#------------------------------------------------#
#--SR Ermitteln VK-Statistik #
#------------------------------------------------#
sub do_vkstat
{
get "zahl_1==*","../acd/acvk";
while (get_next("../acd/acvk"))
{
$Anzahl{$zahl_1}++;
$Anzahl{$zahl_2}++;
$Anzahl{$zahl_3}++;
$Anzahl{$zahl_4}++;
}
&do_content_o("200","196","","",""); # Ausgabe Content-Section
&do_headline("VK-Statistik","","","140"); # Ausgabe Content-Headline
out <<EOF;
<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
<TR><TD ALIGN="center">
<TABLE WIDTH='90%' BORDER=0>
<TR><TH CLASS='th1'>Gebiet</TH>
<TH CLASS='th1' COLSPAN=7>Verkäufe</TH></TR>
EOF
foreach $zahl_1(sort (keys %Anzahl))
{
out "<TR BGCOLOR=" . ($_loop %2 ? "#A0A0A0" : "#E0E0E0") . ">\n";
out "<TD CLASS='b8' ALIGN='center'> $zahl_1 </TD>";
out "<TD CLASS='b8' ALIGN='center'> $Anzahl{$zahl_1} </TD>";
out "</TR>\n";
}
out "</TD></TR></TABLE>";
out "<BR><BR><A CLASS='link3' HREF='javascript:window.close();'>[Schliessen]</A>\n";
out "</TD></TR></TABLE>\n";
&do_content_u; # Ausgabe Content-Section Unten
}
</perl>
Antworten
Beitrag von Claus S. (33 Beiträge) am Donnerstag, 25.April.2002, 10:46.
@sander Re: Zähler verschiedener Datensätze
hallo sander,
hier der code:
<perl>
#------------------------------------------------#
#--SR Ermitteln VK-Statistik #
#------------------------------------------------#
sub do_vkstat
{
get "zahl_1==*","../acd/acvk";
while (get_next("../acd/acvk"))
{
$Anzahl{$zahl_1}++;
$Anzahl{$zahl_2}++;
$Anzahl{$zahl_3}++;
$Anzahl{$zahl_4}++;
}
&do_content_o("200","196","","",""); # Ausgabe Content-Section
&do_headline("VK-Statistik","","","140"); # Ausgabe Content-Headline
out <<EOF;
<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
<TR><TD ALIGN="center">
<TABLE WIDTH='90%' BORDER=0>
<TR><TH CLASS='th1'>Gebiet</TH>
<TH CLASS='th1' COLSPAN=7>Verkäufe</TH></TR>
EOF
foreach $zahl_1(sort (keys %Anzahl))
{
out "<TR BGCOLOR=" . ($_loop %2 ? "#A0A0A0" : "#E0E0E0") . ">\n";
out "<TD CLASS='b8' ALIGN='center'> $zahl_1 </TD>";
out "<TD CLASS='b8' ALIGN='center'> $Anzahl{$zahl_1} </TD>";
out "</TR>\n";
}
out "</TD></TR></TABLE>";
out "<BR><BR><A CLASS='link3' HREF='javascript:window.close();'>[Schliessen]</A>\n";
out "</TD></TR></TABLE>\n";
&do_content_u; # Ausgabe Content-Section Unten
}
</perl>
Antworten
Beitrag von Sander (8133 Beiträge) am Donnerstag, 25.April.2002, 11:11.
Re: @sander Re: Zähler verschiedener Datensätze
Antworten
Beitrag von Claus S. (1671 Beiträge) am Donnerstag, 25.April.2002, 11:37.
Re: @sander Re: Zähler verschiedener Datensätze
hallo sander,
prima, funzt bestens ;-)
verstehe nur den code leider nicht: (sort {$a<=>$b}keys %Anzahl)
und dann habe ich noch eine frage (nerv...)
der code für die abwechselnde einfärbung der zellen out "<TR BGCOLOR=" . ($_loop %2 ? "#A0A0A0" : "#E0E0E0") . ">\n";
funzt hier leider nicht. bisher hatte ich das auch nur bei 'get while get next' eingesetzt. funzt das bei einer foreach-schleife nicht?
gruss claus
Antworten
Beitrag von Sander (8133 Beiträge) am Donnerstag, 25.April.2002, 11:58.
Re: @sander Re: Zähler verschiedener Datensätze
Antworten
Beitrag von Claus S. (1671 Beiträge) am Donnerstag, 25.April.2002, 12:06.
Re: @sander Re: Zähler verschiedener Datensätze
Antworten
Beitrag von Toralf (101 Beiträge) am Donnerstag, 25.April.2002, 00:04.
Re: Zähler verschiedener Datensätze
Danke Sander,
so tut´s gut.
Grüße
Antworten