[Allegro] Perl-Skrite für Avanti
Thomas Berger
ThB at Gymel.com
Fr Mai 19 14:20:02 CEST 2006
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Lieber Herr Mentzel-Reuters,
> Oder sind es wieder die mysteriösen Sonderkonditionen meines Rechners,
> die das alles verschulden?
diesmal eher unwahrscheinlich...
> (1) ALLEGRO.PL (Z. 393 im Originalskript, wie esmit dem aktuellen Avanti
> geliefert wird): Um mit Hilfe von REGSRCH.PL die Kurztitelliste zu
> öffnen, wird $Input übergeben, die Kurztitel werden geladen und mittels
> SPLIT in Segmente zerlegt. Man findet diese Stelle leicht, wenn man nach
> "foreach $Z" sucht. Der Trenner zwischen den Kurztiteln wird von
> Höppner als Hexwert 7F kodiert. Unter meinem alten Avanti auf Xitami ist
> das richtig. Im neuen System ist es der Hexwert CA (Ê). [[Darum, Herr
> Berger, gab es bei Ihren Versuchen an unserem OPAC die leeren Kurztitel
> - der Splitbefehl war wirkungslos, alle Kurztitel gerieten in einen
> HTML-Tag <TD ...> hinein und blieben unsichtbar.]]
Herr Allers hatte ja schon die relevanten alten Mailinglisten-
Beitraege herausgesucht. (Mir war im Maerz allerdings nicht klargewesen,
dass hier ein Feature von acwww25 zerbrochen war, ich hatte gedacht,
nur Herr Allers haette das Problem gehabt).
> (2) ALLGERO.PL Z. 473 ff. wird das Holen der nächsten Seite bei der
> Kurztitelanzeige geregelt. Die aktuelle Fassung von Z. 491ff lautet so:
>
> if( $Command =~ /ende/i )
das betrifft also nur die Anforderung "letzte Seite".
> {
> $Position = ($#nummern-1) - ( ($#nummern-1) % $maxKurztitel );
> $Mitte = 1;
> return;
> }
>
> Das funktioniert aber sehr schlecht; das Skript kann dabei in negative
> Zahlen geraten und überhaupt vergessen, wo es ist. Der Apache reagiert
> darauf sehr ungnädig, Xitami zwar nicht, aber eine gescheite
> Funktionalität habe ich auch dort nicht erlebt. Nimmt man statt dessen
> Höppners Version aus der Allegro.pl von ca. 1996, dann läuft es. Die
> ging so:
>
>
> if( $Command =~ /ende/i ) # alte Version
> {
> $Position = $#nummern + 1 - ( ( $#nummern + 1 ) % $maxKurzTitel );
> $Mitte = 1;
> return;
> }
Hier ist grosse Vorsicht geboten, evtl. ist Ihre Version ein Mix aus
verschiedenen Versionen:
Ab Zeile 99 findet sich im aktuellen allegro.pl eine ueberraschende
Operation:
if( $in{'recnums'} ){
@nummern = split( ",", $in{'recnums'} );
$#nummern++;
}
d.h. gab es den Uebergabeparameter 'recnums' nicht, so wurde das
Array @nummern nicht ins Leben gerufen, und $#nummern ist -1.
War der Parameter leer, so hat $#nummern den Wert 0.
Regulaer ist aber vermutlich nur der Fall mindestens einer Satznummer,
@nummern enthaelt dann diese (das typischerweise abschliessende ","
im Parameter 'recnums' wird gluecklicherweise nicht beruecksichtigt)
*plus* ein undefiniertes Element, $#nummern ist dann mindestens 1.
Das in der Formel stets benutzte $#nummern -1 ist also eigentlich
das originale $#nummern ...
Als $Position benoetigen wir (angenommen $maxKurzTitel ist 10) die
Werte 0, 10, 20, ...
Wir haben mit dem Code aus dem aktuellen allegro.pl
uebergebene Satznummern 1 2 3 4 5 6 7 8 9 10 11 ...
$Position 0 0 0 0 0 0 0 0 0 0 10 ...
damit ist also alles korrekt.
Einen negativen Wert (-10) gibt es nur, wenn der Uebergabeparameter
'recnums' nicht existiert / nicht gelesen werden konnte. Sind wir
da wieder bei Ihrem alten Problem?
Die Formel aus der 1996er-Version hingegen liefert (egal ob das
ominoese $#nummern++ vorhanden ist oder nicht) fuer 10 Werte
immer die falsche $Position = 10 (allerdings nie eine negative
Zahl)
viele Gruesse
Thomas Berger
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3-nr1 (Windows XP)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFEbbfyhKFJT0F1FsoRApKUAJ4i3DSefJ90MiAn0M9N3G7Y3VVNYwCdEWH7
+pbNU987aePZxzVr4HpkYQs=
=jdWJ
-----END PGP SIGNATURE-----
Mehr Informationen über die Mailingliste Allegro