Français
Forum

String dans einzelne Buchstaben décomposer

 

Jörg
Sellmeyer
Gibts une schnellere/kürzere Version comme que voici?
KompilierenMarqueSéparation
Set("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...
 
08.08.2008  
 



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)
 
08.08.2008  
 




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.
 
08.08.2008  
 




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éparation
Set("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

KompilierenMarqueSéparation
Proc Zerlege3

    Parameters t$,u$
    declare e$,f&
    f&=Addr(t$)

    whileloop 0,Len(t$)-1

        e$=e$+Char$(f&,&Loop,1)+u$

    endwhile

    Return e$

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, comment viel Zeit nécessaire Dein "Zerlege4" im Ggs. zum Zerlege3 Jac?
 
08.08.2008  
 



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.
 
08.08.2008  
 




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  
 




répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

5.390 Views

Untitledvor 0 min.
RudiB.26.04.2022
Manfred Barei18.11.2018
Heiko Dix13.11.2012
Frank Vorholzer24.05.2012

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie