Seite 2 von 2

Re: String splitten

Verfasst: 30.01.2010 21:22
von hörmi
7x7 hat geschrieben:Spitzencode. Jetzt hat es 'Tombi' als Anfänger mit Sicherheit kapiert wie es geht.
au ja schwierigen code schreiben :mrgreen:


aber mal im ernst ich hab mal mk-soft's code hergenommen um ihn ein kleines bisschen zu modifizieren, der is wirklich schnell

Code: Alles auswählen

EnableExplicit

Global text1$

text1$ = "Stringfield ist eine extrem langsame Funktion"
text1$ + " und wenn du weiter mit einer Array arbeiten willst,"
text1$ + " dann könnte dies schneller sein. Das solltest du mal Testen !"

Dim Woerter.s(0)

Procedure.s StringFieldFast(text.s, separator.s, index.l)

  Protected *mem.Character = @text 
  Protected *posi.character = *mem - SizeOf(character)
  Protected anz, pos
  Protected zeichen = Asc(separator)
  
  anz = CountString(text, separator)
  anz + 1

  
  Repeat
  
    If *mem\c = zeichen 
      *posi + SizeOf(character)
      pos + 1
      If pos=index
      ProcedureReturn PeekS(*posi, (*mem - *posi) / SizeOf(character))
      EndIf
      *posi = *mem
    EndIf
    *mem + SizeOf(character)
   
  Until *mem\c = 0

EndProcedure

Define.l c,i
Define.l t1,t2,t3

t1=GetTickCount_()

For c=0 To 10000
  For i = 0 To 20
    StringFieldFast(text1$, " " , i)
  Next
Next
t2=GetTickCount_()
For c=0 To 10000
  For i = 0 To 20
    StringField(text1$,i, " " )
  Next
Next
t3=GetTickCount_()
Debug t3-t2
Debug t2-t1
edit: sorry lag am quote-tag das die leerzeichen nicht angezeigt wurden....

Re: String splitten

Verfasst: 30.01.2010 21:28
von TomS
@hörmi: Code-Tags und einrücken. /:->
Danke.

@mk-soft: :allright:
Habe den Code nicht auf Speed getestet. Ich glaube es dir einfach mal. Außerdem kommt's bei meinen kleineren Anwendungen eh noch nicht so auf Speed an und man soll ja bekanntlich nicht zu früh optimieren.
Aber als PHP-ler kommt mir eine Version mit Arrax gerade recht :)

Re: String splitten

Verfasst: 30.01.2010 23:25
von c4s
hörmi hat geschrieben:ich hab mal mk-soft's code hergenommen um ihn ein kleines bisschen zu modifizieren, der is wirklich schnell

Code: Alles auswählen

[...]
Debug t3-t2
Debug t2-t1
Kleiner wichtiger Hinweis:
Bei Geschwindigkeitstests immer den Debugger aussschalten. Komplett!

Wie dem auch sei. Der Code ist in der Tat schnell - bei mir immerhin um das 6 fache.

Re: String splitten

Verfasst: 31.01.2010 15:18
von mk-soft
@hörmi

dein vergleich ist nicht richtig. Die PB-Funktion ist auf jeden fall schneller. Erst beim splitten mit vielen Wörtern auf einen Array kommt der Vorteil zur Geltung. War aber nicht auf Speed ausgelegt

FF :wink: