Seite 2 von 2

Verfasst: 05.01.2008 18:59
von milan1612
Readme :roll:
Und ja, er schnippelt den String dann bis zum Ende...

Verfasst: 05.01.2008 19:01
von AND51
So, hier dann mal meine Prozedur, die euch um Längen schlägt (siehe Zeitmessungen unten):

Code: Alles auswählen

Procedure.s Spazifize(string.s)
	Protected *pos.Character=@string, result$=Space(StringByteLength(string)*2)
	Protected *result.Character=@result$
	While *pos\c
		*result\c=*pos\c
		*pos+SizeOf(Character)
		*result+SizeOf(Character)*2
	Wend
	ProcedureReturn result$
EndProcedure

Debug Spazifize("Ich bin ein String.")
Vergleicht mal folgende Werte:
  • res1 = 1094 ms (milan)
  • res2 = 781 ms (macros)
  • res3= 94 ms (and51)
Werte natürlich ohne Debugger, etc., auf (m)einem 3,4 GHz-DualCore ermittelt.

Verfasst: 05.01.2008 19:05
von milan1612
Autsch, das ist gut :allright:
Und jetzt das ganze noch in Assembler... :lol:

Verfasst: 05.01.2008 19:06
von AND51
Thooooorium, dein Typ wird verlangt! :D
Also ich kann ein bisschen MOV, INC und DEC aber dann hört's auf... :)

P.S.: Danke für das Lob! :allright:

P.P.S.: du hast was geschrieben von wegen, um deinen Coe zu beschleunigen, nimmst du Trim()? Das geht nicht, dann schneidest du nänmlich auch alle Leerzeichen rechts weg, doch nach dem letzten Zeichen soll ja auch ein Leerzeichen kommen, oder? :wink:

Verfasst: 05.01.2008 19:10
von milan1612
AND51 hat geschrieben:P.P.S.: du hast was geschrieben von wegen, um deinen Coe zu beschleunigen, nimmst du Trim()? Das geht nicht, dann schneidest du nänmlich auch alle Leerzeichen rechts weg, doch nach dem letzten Zeichen soll ja auch ein Leerzeichen kommen, oder? :wink:
Öhm, nö. Oder?

Verfasst: 05.01.2008 19:14
von AND51
milan1612 hat geschrieben: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
Doch hier... Aber wie gesagt, das allerletzte Zeichen muss immer ein Leerzeichen sein, schließlich soll jedem Buchstaben ja ein Leerzeichen folgen. Dein Trim() bewirkt jedoch, dass links und rechts Leerzeichen abgeschnitten werden. genau genommen entspricht dies nicht der "Aufgabenstellung". :wink:

Verfasst: 05.01.2008 19:18
von mk-soft
@AND51

Toll /:-> :allright: Brauch mein Code nicht mehr reinstellen. Gleiche Lösung :allright:

FF :wink:

Verfasst: 05.01.2008 19:20
von AND51
Danke sehr, mk-soft! :allright:

Verfasst: 05.01.2008 19:20
von milan1612
AND51 hat geschrieben:
milan1612 hat geschrieben: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
Doch hier... Aber wie gesagt, das allerletzte Zeichen muss immer ein Leerzeichen sein, schließlich soll jedem Buchstaben ja ein Leerzeichen folgen. Dein Trim() bewirkt jedoch, dass links und rechts Leerzeichen abgeschnitten werden. genau genommen entspricht dies nicht der "Aufgabenstellung". :wink:
Dann eben LTrim() :lol:

Verfasst: 05.01.2008 19:22
von AND51
Jo :lol: