Seite 1 von 1

StringOfChar - Zeichenkette mit x*Zeichen

Verfasst: 12.08.2012 12:53
von TKRoth
Mal was Kleines von mir:

Code: Alles auswählen

Procedure.s StringOfChar(Count.i,Char.s)
  ProcedureReturn ReplaceString(Space(Count)," ",Char)
EndProcedure

Debug "10 Sterne: "+StringOfChar(10,"*")

Re: StringOfChar - Zeichenkette mit x*Zeichen

Verfasst: 12.08.2012 13:07
von STARGÅTE
Dafür wäre es aber besser LSet oder RSet zu verwenden um das Suchen/Ersetzen zu ersparen:

Code: Alles auswählen

Debug "10 Sterne: "+LSet("", 10, "*")
oder bei dir dnan halt:

Code: Alles auswählen

Procedure.s StringOfChar(Count.i,Char.s)
  ProcedureReturn LSet("", Count, Char)
EndProcedure

Debug "10 Sterne: "+StringOfChar(10,"*")

Re: StringOfChar - Zeichenkette mit x*Zeichen

Verfasst: 12.08.2012 17:03
von Derren
In wie fern ist das schneller oder besser als eine Fox/Next Schleife?
Du musst ja zu dem Schluss gekommen sein, dass For/Next deinen Ansprüchen nicht genügt, oder wie kommt man sonst auf so eine Idee?

Re: StringOfChar - Zeichenkette mit x*Zeichen

Verfasst: 12.08.2012 17:10
von STARGÅTE
Derren hat geschrieben:In wie fern ist das schneller oder besser als eine Fox/Next Schleife?
Wenn du mit For/Next sowas meinst wie:

Code: Alles auswählen

For N = 1 to 10
  String + "x"
Next
Dann ist diese Variante sehr langsam, weil 10 mal eine neue Zeichenkette erstellt werden muss.

Re: StringOfChar - Zeichenkette mit x*Zeichen

Verfasst: 12.08.2012 17:21
von ts-soft
STARGÅTE hat schon Recht, LSet ist günstiger als Deine Procedure.
Erstens erfolgt ein Call zum Aufruf der Procedure und dann werden 2 PB-Funktionen aufgerufen.

Der Geschwindigkeitsunterschied wird sich in den meisten Anwendungen zwar nicht unbedingt wiederspiegeln,
aber es ist einfach nicht nötig.

Du hast also das Rad neu erfunden, aber das neue Rad ist nicht wirklich besser :wink:
Aber das passiert einem immer wieder in seinem Programmiererleben :)

Gruß
Thomas

Re: StringOfChar - Zeichenkette mit x*Zeichen

Verfasst: 12.08.2012 18:02
von DarkDragon
ts-soft hat geschrieben:STARGÅTE hat schon Recht, LSet ist günstiger als Deine Procedure.
Erstens erfolgt ein Call zum Aufruf der Procedure und dann werden 2 PB-Funktionen aufgerufen.
Das ist aber nicht der Knackpunkt. Der Knackpunkt ist die Tatsache, dass die zwei Funktionen, die TKRoths Prozedur aufruft (Space und ReplaceString) 2 mal durch die volle Länge iterieren (einmal um den String mit dem Leerzeichen zu füllen und einmal um alle Leerzeichen durch andere Zeichen zu ersetzen), wohingegen STARGATEs Aufruf nur einmal durch den gesamten String muss um die Zeichen auf den Zielwert zu bringen.