Willkommen Gast. Bitte einloggen oder registrieren.
Übersicht Hilfe Suche Einloggen Registrieren

+  BrettspielWelt
|-+  Technische Fragen
| |-+  Puppet-Stuff (Moderator: SLC)
| | |-+  SETSTRING--Befehl? gelöst (danke Seq!)
0 Mitglieder und 1 Gast betrachten dieses Thema. « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: SETSTRING--Befehl? gelöst (danke Seq!)  (Gelesen 177 mal)
Narkissos
Zaubermeister
*****
Geschlecht: Männlich
Beiträge: 843


Wahrhaft zu lieben bedeutet: bei sich im anderen sein. (frei nach G.W.F.Hegel)


Profil anzeigen
« am: 29.03.2006, 02:18:44 »

Hiho liebe Puppetbastler,

ich möchte in einer Liste alle Leerzeichen durch ein anderes Zeichen ersetzen & es ggf wieder zurückwandeln. Leider gibt es aber keinen analogen Befehl zum SETELEMENT-Befehl, der genau dies lösen könnte. Meine Lösung für dieses Problem schaut so aus:

WHEN MATCH "!wandle *" DO umwandeln

ACTION umwandeln
 LOCAL n = 0
 LOCAL STR1
 LOCAL STR2

 FOR aktElement IN [SUBST1] DO
  BEGIN
   SET STR1 "[STR1]_[aktElement]"
  END
 >> Ergebnis 1: [STR1]

 WHILE [n] < LENGTH [STR1]
  BEGIN
   EVAL n = [n]+1
   SET aktSTRING [= [n] CHAROF [STR1]]
   IF "_" == [aktSTRING]
    SET STR2 "[STR2] "
   ELSE
    SET STR2 "[STR2][aktSTRING]"
  END
  >> Ergebnis 2: [STR2]
END


Ergebnis:

(01:08:54) Narkissos: !wandle ich weiss, dass er weiss, dass ich nichts weiss
(01:08:54) Testpille: Ergebnis 1: _ich_weiss,_dass_er_weiss,_dass_ich_nichts_weiss
(01:08:59) Testpille: Ergebnis 2:  ich weiss, dass er weiss, dass ich nichts weiss


Mir dauert meine Routine aber zu lange, hat einer von euch eine elegantere und schnellere Lösung?

Kisschen
« Letzte Änderung: 29.03.2006, 11:52:51 von Narkissos » Gespeichert

wer bittet, der empfängt
wer sucht, der findet
wer anklopft, dem wird aufgetan
Sequoia
Zauberlehrling
**
Geschlecht: Weiblich
Beiträge: 68


Smile . . . tomorrow will be worse. (The Murphy Philosophy)


Profil anzeigen WWW
« Antworten #1 am: 29.03.2006, 04:04:32 »

REPLACE <var> <Von> <Nach>

Ersetzt in <var> alle Vorkommen von <Von> durch <Nach> (ohne Rücksicht auf Listenformate).

Code:
REPLACE SUBST1 " " "_"
>> Ergebnis 1: [SUBST1]
REPLACE SUBST1 "_" " "
>> Ergebnis 2: [SUBST1]

seq
Gespeichert
Narkissos
Zaubermeister
*****
Geschlecht: Männlich
Beiträge: 843


Wahrhaft zu lieben bedeutet: bei sich im anderen sein. (frei nach G.W.F.Hegel)


Profil anzeigen
« Antworten #2 am: 29.03.2006, 11:47:34 »

Ja soooooooooooooooooooo kann das jeder! lool

Danke Seq! Jetzt hab ich den Befehl auch entdeckt *gg*

Ganz dickes Kisschen!

Aber trotzdem: einen direkten Befehl gibt es nicht, womit ich das [n]te Zeichen durch ein anderes Zeichen ersetzen kann, oder hab ich wieder was überlesen?
Noch was: wie lang kann eine Liste sein? Die Maximalbelegung für eine Variable sind 5000 Zeichen, d.h. die Liste darf maximal 5000 Zeichen lang sein, oder? (Hat das jemand mal ausprobiert?)
Gespeichert

wer bittet, der empfängt
wer sucht, der findet
wer anklopft, dem wird aufgetan
Stechmuck
BSW-Admin
*****
Geschlecht: Männlich
Beiträge: 5900


Erfahrung ist eine nützliche Sache, leider macht man sie immer erst kurz nachdem man sie bräuchte.


Profil anzeigen WWW
« Antworten #3 am: 29.03.2006, 12:29:39 »

Ahoi,
Aber trotzdem: einen direkten Befehl gibt es nicht, womit ich das [n]te Zeichen durch ein anderes Zeichen ersetzen kann, oder hab ich wieder was überlesen?
Gibts meines wissens nach nur für Listen:
Code:
SETELEMENT <Listenname> <Index> (1(n+1)) <Element>

wie lang kann eine Liste sein? Die Maximalbelegung für eine Variable sind 5000 Zeichen, d.h. die Liste darf maximal 5000 Zeichen lang sein, oder? (Hat das jemand mal ausprobiert?)
Richtig, wobei die Leerzeichen (Listentrenner) dazuzählen.
Sprich: 5000 - Anzahlelemente + 1

Grüßle Stechi
Gespeichert


SLC
Magier
*****
Geschlecht: Männlich
Beiträge: 14510


Ich heiße SLC, komme aus Hamburg und spiele gern (wer denn nicht?)

SLC_BSW
Profil anzeigen WWW
« Antworten #4 am: 29.03.2006, 14:41:47 »

Aber trotzdem: einen direkten Befehl gibt es nicht, womit ich das [n]te Zeichen durch ein anderes Zeichen ersetzen kann, oder hab ich wieder was überlesen?
Das nicht, aber immerhin gibt es
Code:
SUBSTR var vonIndex
SUBSTR var vonIndex bisIndex
(Indizes alle 1-basiert)

Generell sollte man lieber mit Listen arbeiten (SETELEMENT),
aber im Notfall kann man mit 2 mal SUBSTR auch diesen speziellen
Wunsch (den ich für nicht puppettauglich halte) erfüllen... Grin

Beispiel:
Code:
SET string "Dies ist ein Text"
LOCAL str1 = [string]
LOCAL str2 = [string]
LOCAL pos = 7
SUBSTR str1 1 [=pos - 1]
SUBSTR str2 [=pos + 1]
>> Alt: [string]
SET string "[str1]X[str2]"
>> Neu: [string]
Wenn das umständlich aussieht, so liegt es daran,
daß das Problem puppetuntauglich ist... Grin

Grüße, SLC
Gespeichert
Sequoia
Zauberlehrling
**
Geschlecht: Weiblich
Beiträge: 68


Smile . . . tomorrow will be worse. (The Murphy Philosophy)


Profil anzeigen WWW
« Antworten #5 am: 29.03.2006, 16:00:23 »

wie lang kann eine Liste sein? Die Maximalbelegung für eine Variable sind 5000 Zeichen, d.h. die Liste darf maximal 5000 Zeichen lang sein, oder? (Hat das jemand mal ausprobiert?)
Richtig, wobei die Leerzeichen (Listentrenner) dazuzählen.
Sprich: 5000 - Anzahlelemente + 1

Nein, nicht richtig. Ich hab's ausprobiert und konnte 5018 Zeichen mit einer PUBLIC-Variablen rausschreiben.
(Wie lang eine Liste sein kann, kann man ohnehin nicht sagen, da dies von der Länge der Listenelemente abhängt.)

seq
Gespeichert
Stechmuck
BSW-Admin
*****
Geschlecht: Männlich
Beiträge: 5900


Erfahrung ist eine nützliche Sache, leider macht man sie immer erst kurz nachdem man sie bräuchte.


Profil anzeigen WWW
« Antworten #6 am: 29.03.2006, 16:14:38 »

Ahoi,

also 5000 Zeichen ist meines Wissens nach die offizielle Zahl Wink

Und die Rechnung bezog sich auf die Summe der Zeichen in den eizelnen Listenelementen die möglich sind in die Liste zu packen, da ja eine Liste genau so behandelt wird wie ein String und somit die Leerzeichen mitgezählt werden müssen.

Grüßle Stechi
Gespeichert


Sequoia
Zauberlehrling
**
Geschlecht: Weiblich
Beiträge: 68


Smile . . . tomorrow will be worse. (The Murphy Philosophy)


Profil anzeigen WWW
« Antworten #7 am: 29.03.2006, 16:32:11 »

Narkissos hat aber gefragt ob es jemand ausprobiert hat. Dass dies die  offizielle Zahl ist, hat er schliesslich schon selber erwähnt.

Leerzeichen in einem String mitzuzählen ist trivial, die haben den gleichen Stellenwert wie jedes andere Zeichen (genauso könntest Du darauf hinweisen, alle e's mitzuzählen).
Und die Zeichen aller Listenelemente zu zählen, dabei die Leerzeichen wegzulassen (und nachher wieder draufzuaddieren) macht keinen Sinn, wenn man die Länge des Gesamtstrings wissen will  Tongue

Mit "LENGTH <string>" erübrigt sich sowieso jede Zählerei.

seq
Gespeichert
Stechmuck
BSW-Admin
*****
Geschlecht: Männlich
Beiträge: 5900


Erfahrung ist eine nützliche Sache, leider macht man sie immer erst kurz nachdem man sie bräuchte.


Profil anzeigen WWW
« Antworten #8 am: 29.03.2006, 17:05:15 »

Hach du willst mich nur wieder nicht verstehen, gibs doch zu Tongue

Zähl die Leerzeichen nicht mit und mach mal ne Liste in der 5000 Elemente mit dem inhalt "a" gespeichert sind. Grin

Grüßle Stechi
Gespeichert


SLC
Magier
*****
Geschlecht: Männlich
Beiträge: 14510


Ich heiße SLC, komme aus Hamburg und spiele gern (wer denn nicht?)

SLC_BSW
Profil anzeigen WWW
« Antworten #9 am: 30.03.2006, 15:21:53 »

Nein, nicht richtig. Ich hab's ausprobiert und konnte 5018 Zeichen mit einer PUBLIC-Variablen rausschreiben.
Das wäre dann ein Bug (den ich derzeit nicht nachvollziehen kann).
Die Antwort 5000 - n + 1 war jedenfalls korrekt! Grin

Grüße, SLC
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.15 | SMF © 2006-2009, Simple Machines
SMFAds for Free Forums
Prüfe XHTML 1.0 Prüfe CSS