Aus Das deutschsprachige Scratch-Wiki
Dieses Tutorial zeigt, wie man ein Skript schreibt, das jedes Vorkommen eines bestimmten Strings in einem String findet und durch einen anderen String ersetzt. Ein solches Skript wird oft benötigt, weil es in Scratch keinen Block für diese Aufgabe gibt.
Programmierung
Das Skript sollte drei Vorgaben erhalten: der String, der verabeitet werden soll, ein String, der ersetzt werden soll und einen String, durch den er ersetzt werden soll. Es sollte die verarbeitete Zeichenkette in eine (Ergebnis)
Variable ausgeben.
Scratch bietet keine Methode zum Auffinden von Substrings, daher muss das Skript eine Schleife über jedes Zeichen in der Zeichenkette ziehen und prüfen, ob das aktuelle Zeichen am Anfang des zu ersetzenden Substrings steht. Ist dies der Fall, wird zum Ende der Substring gesprungen und die Ersatzzeichenkette zur Ausgabe hinzugefügt. Ist dies nicht der Fall, wird einfach das aktuelle Zeichen an die Ausgabe angehängt.
Um festzustellen, ob das aktuelle Zeichen am Anfang der Substring steht, wird selbst ein Teil der Zeichenkette in einer Schleife durchlaufen.
Definiere finde und ersetze (substring :: custom-arg) mit (ersetzung :: custom-arg) in (string :: custom-arg) setze [ergebnis v] auf () setze [index v] auf (1) // Zähler wiederhole (Länge von (string :: custom-arg)) mal setze [index2 v] auf (0) // ein weiterer Zähler setze [ersetze? v] auf [true] // es beginnt mit der Annahme, dass es am Anfang der ersetzten Zeichenfolge steht wiederhole (Länge von (substring :: custom-arg)) mal falls <nicht <(Zeichen ((index2) + (index)) von (string :: custom-arg)) = (Zeichen ((index2) + (1)) von (substring :: custom-arg))>> , dann setze [ersetze? v] auf [false] end ändere [index2 v] um (1) end // es prüft nun, ob die Annahme wahr ist falls <(ersetze?) = [true]> , dann ändere [index v] um ((Länge von (substring :: custom-arg)) - (1)) // überspringe ersetzte Zeichenfolge setze [ergebnis v] auf (verbinde (ergebnis) und (ersetzung :: custom-arg)) sonst setze [ergebnis v] auf (verbinde (ergebnis) und (Zeichen (index) von (string :: custom-arg))) end ändere [index v] um (1) end
Demo
[wiki=de:Ersetzen einer Teilzeichenkette in einer Zeichenkette]Ersetzen einer Teilzeichenkette in einer Zeichenkette[/wiki]