Abend zusammen
Ich versuch mal präziesere Angaben zu machen:
$sessioncut enthält z.B. folgenden String:
1_10x5_50.00_2_10x5x2_50.00
Ich möchte die Unterstriche in diesem String zählen.
$cnt = $sessioncut =~ tr/_/_/;
Dann möchte ich zum Ergebnis eins (+1) dazuzählen.
$cnt++;
Dann den so erhaltenen Wert durch drei (geteilt 3) teilen.
$cnt /= 3;
-> Ergebnis = Anzahl Datensätze (Artikel).
Mann du machst dir echt das Leben schwer.
my @data = split(/_/, $sessioncut);
my @aricles;
for(my $i=0; i < @data, i+=3 ){
push @article, @data[$i .. $i+2];
}
Der Perl-Code dazu sieht so aus:
Bloss nicht hingucken...
for(my $i = 0; $i <= length($sessioncut); $i++) {
if ($sessioncut =~ m/_/) {
$zeichenanzahl = $zeichenanzahl + 1;
}
}
Hier testest du pro Zeichen in $sessionslut, ob der Text ein _ enthält.
Es zählt mitnichten die _
$zeichenanzahl = ($zeichenanzahl + 1) / 3;
Das kannst du einfacher haben:
$bukllshit = length($sessioncut)+1 / 3
Die for Schleife ermittelt über length die Länge von $sessioncut und läuft so lange durch, bis $sessioncut endet. Bei jedem Durchlauf sieht die if-Anweisung nach, ob ein Unterstrich gefunden wurde. Wenn ja, erhöht sich $zeichenanzahl um eins.
Genau, und es findet immer ein _
Unter der For-Schleife wird dann eins dazugezählt und duch drei dividiert.
Soweit zur Theorie...
Irgendwo muss in der Schleife ein Fehler sein.
Nö, der Fehler ist in deinem Denken. Die Schleife ist durchaus OK, wenn auch programmatischer Nonsense.
Er liefert 4,666666666667 (Periode) statt 5 (Unterstriche) plus 1 (dazu) Ergebnis durch drei also (5+1)/3 = 2 Artikel!
Warum?
Weil du das so programmiert hast.
mfg Beat
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische