[Allegro] Von einer Variablen einen variabel langen Teil abschneiden

Sibylle Koczian Sibylle.Koczian at T-Online.de
Mi Jul 18 15:30:00 CEST 2007


Man kann den Hilfe-Abschnitt zu den cstrings doch gar nicht oft genug lesen!

"Sibylle Koczian" <Sibylle.Koczian at T-Online.de> schrieb:
> Liebe Liste,
> 
> ich möchte in eine Kategorie eine Zeichenkette schreiben, die aus Nullen und Einsen besteht. Das Problem dabei: wo die Einsen stehen, muss aus Inhalten anderer Kategorien berechnet werden. Es geht auf ziemlich umständliche Art mit zwei Schleifen: Nullen anhängen, so lange der interne Zähler kleiner ist als die Position der ersten Eins, Eins anhängen, den internen Zähler um den gewünschten Abstand erhöhen, zum Schleifenanfang; in einer weiteren Schleife mit Nullen bis zur gewünschten Länge auffüllen.
> 
> Etwas netter schiene mir:
> 
> $ausgangsstring = '000000000000'            (gewünschte Gesamtlänge)
> z = $gewuenschteStartposition
> :loop
> $ausgangsstring = $ausgangsstring(0,z-1) '1' $ausgangsstring(z+1,0)
> z = z + $gewuenschterAbstand
> if z < $gewuenschteGesamtlaenge jump loop
> 
> Geht leider nicht (auch nicht mit u-Variablen). $ausgangsstring(0,z) ergibt einfach den Ausgangs-String in voller Länge, und $ausgangsstring(0,z-1) bringt A99 zum Absturz.
> 

Es geht aber etwas anderes und ist ziemlich einfach (_wenn_ man eben mal die Existenz der J-Sondervariablen zur Kenntnis genommen hat):

variable $gewuenschteStartposition
z =
variable '1' JL0
insert $zielstring
variable $gewuenschterAbstand
z =
variable '1' JL0
insert $abstandsString
:loop
variable $zielstring $abstandsString
insert $zielstring
variable $zielstring Jl
     ***     Der Einfachheit halber keine variable Gesamtlänge für den entstehenden String
if <12 jump loop
variable $zielstring(0,12)
message

Ich muss dazu sagen, dass ich es mit u-Variablen getestet und nur in diese Nachricht lange Variablennamen hineingeschrieben habe, um mir Erklärungen zu sparen. Es wäre also denkbar, dass es mit freien Variablen irgendwo hakt, und Avanti kann es so nicht.

> Ich sehe doch richtig, dass es keinen Flex-Befehl gibt, der einfach ganz direkt der i-ten Stelle einer Kategorie oder Variablen ein neues Zeichen zuweist (mit variablem Wert von i)?
> 

Dies - und damit der angekündigte Trick 48 - ist natürlich eine ganz andere Baustelle (für Allegro, nicht unbedingt für jede beliebige Programmiersprache).

-- 
Dr. Sibylle Koczian 
Fasanenstrasse 12 
D-82293 Mittelstetten 




Mehr Informationen über die Mailingliste Allegro