| |
|
|
- Seite 1 - |
|
Jörg Sellmeyer | Gibts eine schnellere/kürzere Version als das hier? KompilierenMarkierenSeparierenSet("Decimals",0)
Proc Zerlege1
Parameters Text$,Trenner$
Declare Ergebnis$
WhileLoop Len(Text$)
Ergebnis$ = Ergebnis$ + Mid$(Text$,&Loop,1) + Trenner$
Wend
Return Ergebnis$
EndProc
Proc Zerlege2
Parameters Text$,Trenner$
Declare Ergebnis$
WhileLoop Len(Text$)
Ergebnis$ = Ergebnis$ + SubStr$(Text$,&Loop) + Trenner$
Wend
Return Ergebnis$
EndProc
Proc Zerlege3
Parameters Text$,Trenner$
Declare Ergebnis$,c&
c&=len(text$)-1
WhileLoop c&,1,-1
Text$ = Ins$(Trenner$,Text$,&loop)
Wend
Return Text$
EndProc
Proc Zerlege4
Parameters t$,u$
declare e$,f&
f&=Addr(t$)
whileloop 0,Len(t$)-1
e$=e$+Char$(f&,&Loop,1)+u$
endwhile
Return e$
endproc
Def MultiByteToWideChar(6) !"Kernel32","MultiByteToWideChar"
Proc Zerlege5
Parameters Text$,Trenner$
Declare c&,b#
c& = Len(Text$) * 2 + 1
Dim b#,c&
MultiByteToWideChar(0,0,Addr(Text$),Len(Text$),b#,c& )
Text$ = Translate$(Char$(b#,0,c& - 1),"z","|")
Return Text$
EndProc
Cls
Var a& = &GetTickCount
ClearClip
PutClip "Z01 Z02 Z03 Z04 Z05
"
WhileLoop 5
Zerlege1(MkStr$("ABCDEFGHIJKLMNOP",200),"|")
PutClip Str$(&GetTickCount - a&) + " "
a& = &GetTickCount
Zerlege2(MkStr$("0123456789012345",200),"|")
PutClip Str$(&GetTickCount - a&,) + " "
a& = &GetTickCount
Zerlege3(MkStr$("QRSTUVWXYZÄÖÜß@A",200),"|")
PutClip Str$(&GetTickCount - a&) + " "
a& = &GetTickCount
Zerlege4(MkStr$("0987654321098765",200),"|")
PutClip Str$(&GetTickCount - a&) + " "
a& = &GetTickCount
Zerlege5(MkStr$("qjeudkfotlgkcjdh",200),"|")
PutClip Str$(&GetTickCount - a&) + "
"
WindowTitle Str$(&Loop)
Wend
Print GetClip$()
WaitInput
|
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 08.08.2008 ▲ |
|
|
|
|
| |
|
- Seite 1 - |
|
RGH | @iF: Zu SizeOf() aus der Hilfe:
@SizeOf(V) V : Name einer Variablen Ergebnis: Longint
Beachte die Beschreibung des Parameters! Man sollte die Funktion schon so nutzen, wie sie gedacht ist und nicht wie man sie vielleicht gerne hätte! Für etwas anderes als einen Variablenbezeichner als Parameter ist die Funktion schlicht nicht definiert.
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 08.08.2008 ▲ |
|
|
|
|
Jac de Lad | |
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 08.08.2008 ▲ |
|
|
|
|
| Zerlege3 gibt es bereits, wie viel Zeit benötigt Dein "Zerlege4" im Ggs. zum Zerlege3 Jac? |
|
|
| |
|
|
|
| Nachtrag: @Jörg: Habe noch eine Idee welche vielleicht schneller ist als alle anderen bisherigen hier geposteten Algos.
Den String einfach in einen WideString konvertieren und per Translate die Nullen ersetzen...
Somit wäre das Meiste auf native Abarbeitung gelagert, also sehr fix... - und man benötigt keine Schleife mehr. |
|
|
| |
|
|
|
Jörg Sellmeyer | Jacs Version ist etwas schneller als meine beiden, aber langsamer als die von David:
Z01 Z02 Z03 Z04
375 266 171 344
782 500 359 484
984 516 375 469
969 500 375 469
969 515 360 437
703 250 218 360
829 515 360 375
625 250 187 234
609 438 375 469
969 515 375 469
Jetzt werde ich noch die WideString-Variante testen. Kann jemand erklären, warum der erste Durchgang deutlich schneller ist? Das ist auch so, wenn ich statt PutClip, das jeweils sowort auf den Schirm bringe. Ich hätte eher erwartet, daß es schneller wird.
Nachtrag: Super! MultiByteToWideChar ist es:
Z01 Z02 Z03 Z04 Z05
375 250 203 266 15
265 250 297 469 0
516 500 375 468 0
516 500 375 469 15
515 500 391 469 0
Oben im ersten Beitrag habe ich alle Versionen zusammengefaßt. |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 08.08.2008 ▲ |
|
|
|
|
Jac de Lad | @iF: Hat sich ja schon erledigt. |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 08.08.2008 ▲ |
|
|
|
| |
|
- Seite 2 - |
|
|
|
Kann jemand erklären, warum der erste Durchgang deutlich schneller ist?
IMHO wegen Delphi, es nutzt eine sehr dynamische AnsiStringVerwaltung... |
|
|
| |
|
|
|
Frank Abbing | Die Umwandlung in einen Unicodestring dürfte nicht mehr zu toppen sein! |
|
|
| |
|
|
|
Jörg Sellmeyer | Ja, irgendwie kommt man nicht mehr unter Null. Vielleicht schafft es ja einer, einen Algorhythmus zu schreiben, bei dem man Zeit gewinnt... |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 08.08.2008 ▲ |
|
|
|
|
| Das ist der Community-Algorithmus... |
|
|
| |
|
|
|
| Frank Abbing
Die Umwandlung in einen Unicodestring dürfte nicht mehr zu toppen sein!
Hat aber auch einen Nachteil, denn "XProfanstrings" sind binärsicher, Zerlege1-4 auch, Zerlege5 nicht - schliesslich wird hier mit z aufgefüllt und geht wegen dem Translate aus dem Orginalstring verloren. Nichts ist für alles gut. |
|
|
| |
|
|
|
Jörg Sellmeyer | Für meinen Zweck ist es hervorragend, da ich nur Zahlen in den Strings habe. |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 08.08.2008 ▲ |
|
|
|