| |
|
|
Jörg Sellmeyer | Gibts une schnellere/kürzere Version comme que voici? KompilierenMarqueSéparationSet("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$(à class=s2>)
WaitInput
|
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 08.08.2008 ▲ |
|
|
|
|
| peut-être statt WhileLoop Len(Text$)
var c&=len(text$)-1 whileLoop c&,1,-1
et statt Ergebnis$ = Ergebnis$ + Milieu$(Text$,& Loop,1) + Trenner$
Ergebnis$ = ins$(trenner$,text$,&loop)
suis malheureusement grad zeitlich très eingespannt... |
|
|
| |
|
|
|
| Nachtrag: Bug im XProfan: imprimer sizeOf(explode("12:34",":")) gibt 4 aus statt 2. Mir ist bien sûr weshalb es cela tut (sizeof sur long), richtig ists mais pas.
Nachtrag: imprimer sizeOf(explode(»,".")) gibt (naturellement ensuite) aussi 4 aus, statt <b><u>NULL</u></b> (mais cela avec qui fehlenden NULL chez Explode wünscht Roland oui so) |
|
|
| |
|
|
|
Jörg Sellmeyer | iF
Nachtrag: Bug im XProfan: imprimer sizeOf(explode("12:34",":")) gibt 4 aus statt 2. Mir ist bien sûr weshalb es cela tut (sizeof sur long), richtig ists mais pas.
Pourquoi Bug? de quoi veux Du car là qui Taille ermitteln? de qui Funktion SizeOf? ou bien meinst Du Profan sollte là avec einer Fehlermeldung réagir?
Doit maintenant la fois Dein Beispiel testen. |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 08.08.2008 ▲ |
|
|
|
|
| Explode Ergebnis: Dynamisches String-Array
explode liefert un Array zurück, Arrays peut dans Arrays transfert volonté. un sizeOf sur un Array sollte le nombre qui Einträge zurückliefern - aucun Bandbreite.
Mir ist bien sûr comment Roland cela gelöst hat, mais ici manquer simple encore un paire Ausnahmendeklarationen. |
|
|
| |
|
|
|
Jörg Sellmeyer | So ici la fois un Statistikdurchlauf. Seltsamerweise ist la première Version beim ersten Durchlauf ähnlich vite, comment Nr deux. chez weiteren Durchläufen braucht vous presque doppelt so longtemps. Votre Version (#3) scheint qui schnellst trop son. je vergesse toujours wieder, qui es Ins$ überhaupt gibt. KompilierenMarqueSéparationSet("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
Cls
Var a& = &GetTickCount
ClearClip
PutClip "Z01 Z02 Z03
"
WhileLoop 10
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&) + "
"
WindowTitle Str$(&Loop)
Wend
Print GetClip$()
f='./../../function-references/XProfan/waitinput/'>WaitInput
Ergebnisse:
Z01 Z02 Z03
375 250 187
516 406 375
875 515 360
875 500 375
875 516 375
875 500 375
891 500 375
875 500 375
890 500 375
875 516 375
|
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 08.08.2008 ▲ |
|
|
|
|
RGH | @iF: trop SizeOf() aus qui Aider:
@SizeOf(V) V : nom einer Variablen Ergebnis: Longint
Beachte qui Beschreibung des Paramètres! on sollte qui Funktion déjà so nutzen, comment vous gedacht ist et pas comment on vous peut-être volontiers hätte! Pour autre chose comme une Variablenbezeichner comme paramètre ist qui Funktion schlicht pas défini.
Salut 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 | |
|
|
|
| Zerlege3 gibt es bereits, comment viel Zeit nécessaire Dein "Zerlege4" im Ggs. zum Zerlege3 Jac? |
|
|
| |
|
|
|
| Nachtrag: @Jörg: Habe encore une concept quelle peut-être plus rapide ist comme alle anderen bisherigen ici geposteten Algos.
Den String simple dans une WideString konvertieren et per Translate qui Nullen ersetzen...
Somit wäre cela Meiste sur native Abarbeitung gelagert, alors très fix... - et on nécessaire aucun Boucle plus. |
|
|
| |
|
|
|
Jörg Sellmeyer | Jacs Version ist quelque chose plus rapide comme mon beiden, mais langsamer comme qui de 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
maintenant werde je encore qui WideString-variante testen. peux quelqu'un expliquer, pourquoi qui erste Durchgang deutlich plus rapide ist? c'est aussi so, si je statt PutClip, cela jeweils sowort sur den Schirm bringe. je hätte plutôt erwartet, qui es plus rapide 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
dessus im ersten Beitrag habe je 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 oui déjà 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 ▲ |
|
|
|