Seite 1 von 2
Einem String nach jedem Buchstaben ein Leerzeichen geben ?
Verfasst: 05.01.2008 18:07
von Fusselohr
Guten Abend an alle Progger da draußen

,
Ich habe ein Problem...
Und zwar soll...
Der String:
Soll zu:
werden. Aber leider komme ich nur soweit dass der String so aussieht:
usw.
Kann mir denn jemand helfen ?
Fusselohr
Verfasst: 05.01.2008 18:15
von milan1612
Code: Alles auswählen
Procedure.s Spacifize(string.s)
Protected newstr.s
Protected *ptr.Character = @string
While *ptr\c
If Len(newstr) > 0
newstr + " "
EndIf
newstr + Chr(*ptr\c)
*ptr + SizeOf(Character)
Wend
ProcedureReturn newstr
EndProcedure
Debug Spacifize("Hallo ich bin ein String.")
So etwa?
Verfasst: 05.01.2008 18:17
von mk-soft
War jemand schneller, muss aber nicht immer alles gleich mit Pointern für Anfänger sein.
Code: Alles auswählen
Procedure.s DoppelString(String.s, Separator.s = " ")
Protected helpstring.s, len, i
len = Len(String)
For i = 1 To len
helpstring + Mid(String, i, 1) + Separator
Next
ProcedureReturn helpstring
EndProcedure
Debug DoppelString("Hallo ich bin ein String")
FF

Verfasst: 05.01.2008 18:22
von Fusselohr
Danke euch beiden ^^. Ihr habt mir wirklich geholfen

Verfasst: 05.01.2008 18:29
von milan1612
@mk-soft
Hab grad zum Spaß mal ein paar Tests gemacht, deine Methode
ist um fast ein Drittel schneller als meine
PB's Mid Befehl hats anscheinend echt drauf...

Verfasst: 05.01.2008 18:34
von Macros
Einen großen Teil mach sicher aus, das du jedes mal Len aufrufst
Teste mal kurz einfach das hier:
Code: Alles auswählen
Procedure.s Spacifize(string.s)
Protected newstr.s,first.l
Protected *ptr.Character = @string
While *ptr\c
If first
newstr + " "
Else
first=1
EndIf
newstr + Chr(*ptr\c)
*ptr + SizeOf(Character)
Wend
ProcedureReturn newstr
EndProcedure
Verfasst: 05.01.2008 18:38
von milan1612
Code: Alles auswählen
Procedure.s Spacifize(string.s)
Protected newstr.s,first.l
Protected *ptr.Character = @string
While *ptr\c
If first
newstr + " "
Else
first=1
EndIf
newstr + Chr(*ptr\c)
*ptr + SizeOf(Character)
Wend
ProcedureReturn newstr
EndProcedure
Procedure.s DoppelString(String.s, Separator.s = " ")
Protected helpstring.s, len, i
len = Len(String)
For i = 1 To len
helpstring + Mid(String, i, 1) + Separator
Next
ProcedureReturn helpstring
EndProcedure
x = ElapsedMilliseconds()
For i = 1 To 100000
Spacifize("Hallo ich bin ein String")
Next
res1 = ElapsedMilliseconds() - x
x = ElapsedMilliseconds()
For i = 1 To 100000
DoppelString("Hallo ich bin ein String")
Next
res2 = ElapsedMilliseconds() - x
MessageRequester("Result 1", Str(res1))
MessageRequester("Result 2", Str(res2))
Result 1 = 859
Result 2 = 641
EDIT:
Wenn ich den Check komplett rausnehme und dann am Schluss
einfach Trim() nehme ist meine schneller:
Code: Alles auswählen
Procedure.s Spacifize(string.s)
Protected newstr.s
Protected *ptr.Character = @string
While *ptr\c
newstr + " " + Chr(*ptr\c)
*ptr + SizeOf(Character)
Wend
ProcedureReturn Trim(newstr)
EndProcedure
Verfasst: 05.01.2008 18:48
von AND51
Warum jagst du alle Werte durch
Chr()? Das verlangsamt deinen Code doch auch!
ich grüble auch grade an einer Lösung, die euch alle in den Schatten stellt *muahaha*
P.S.: Viellicht ne doofe Frage, aber weiß jemand, ob und wenn ja wo es schon Dokumentationen zur Version 4.20 gibt? Oder muss ich alle Befehle (so auch das neue
Mid()) selbst ausprobieren?
Verfasst: 05.01.2008 18:50
von milan1612
Beim 'neuen' Mid ist einfach der letzte Parameter optional...
Verfasst: 05.01.2008 18:52
von AND51
Danke! Und dann? Schnibbelt der den String bis zum Ende aus, wenn ich nichts angebe?
Gibts denn keine Art Dokumentation? Muss ja nicht auf Deutsch sein, aber irgendetwas ausführlicheres als den Changelog würd ich mir schon wünschen...
