mehrfache Zeichen zu eines reduzieren

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

@ts-soft,

top routine :allright:

[Edit]

Code: Alles auswählen

#r = 100000

Debug "Start Test..."
time1 = ElapsedMilliseconds()
For ri = 1 To #r

Text.s = "Hallo,           wie             geht's?"
neu.s = ""

For i = 1 To Len(text)
  If Mid(text, i, 1) = " "
    If leer = #False
      leer = #True
      neu + Mid(text, i, 1)
    EndIf
  Else
    leer = #False
    neu + Mid(text, i, 1)
  EndIf
Next i

Next

time1 = ElapsedMilliseconds() - time1

;----------------------------
time2 = ElapsedMilliseconds()
For ri = 1 To #r

Text.s = "Hallo,           wie             geht's?"

While FindString(Text, "  ", 1)
  Text = ReplaceString(Text,"  "," ")
Wend

Next

time2 = ElapsedMilliseconds() - time2

;----------------------------
time3 = ElapsedMilliseconds()
For ri = 1 To #r

Text.s = "Hallo,           wie             geht's?"

*sText.Byte = @Text
*dText.Byte = @Text
Repeat
  *dText\b = *sText\b
  If *dText\b = ' '
    While *sText\b = ' '
      *sText+1
    Wend
  Else
    *sText+1
  EndIf
  *dText+1
Until *sText\b = 0
*dText\b = *sText\b

Next

time3 = ElapsedMilliseconds() - time3

;----------------------------
time4 = ElapsedMilliseconds()
For ri = 1 To #r

  Text.s = "Hallo,           wie             geht's?"

  *wert.byte = @Text
  Text2.s = Space(Len(Text))
  *wert2.byte = @Text2
  Repeat
    If *wert\b = 32
      *wert + 1
      *wert2 + 1
      While *wert\b = 32
        *wert + 1
      Wend
    EndIf
    *wert2\b = *wert\b
    *wert + 1
    *wert2 + 1
  Until *wert\b = 0
  
Next

time4 = ElapsedMilliseconds() - time4

result.s = "mk-soft: " + Str(time1)+" / Kiffi: "+Str(time2)+" / Deeem2031: "+Str(time3)+" / ts-soft: "+Str(time4)

MessageRequester("Result", result)

fast so schnell wie Kiffi´s

FF :allright:
Zuletzt geändert von mk-soft am 28.04.2006 00:10, insgesamt 1-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

@Deeem2031,

Sorry, habe jetzt ohne Debugger getestet. DU BIST SIEGER :allright: (bis jetzt) <)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

mk-soft hat geschrieben:@ts-soft,

top routine :allright:
Danke, aber Deeem seine ist schneller
mk-soft hat geschrieben: fast so schnell wie Kiffi´s

FF :allright:
das kann nicht stimmen, nur Deeem ist etwas schneller :wink:

Hier der Komplettest, meins ohne Procedure usw.

Code: Alles auswählen

#r = 100000
 
time1 = ElapsedMilliseconds()
 
For ri = 1 To #r
 
  Text.s = "Hallo,           wie             geht's?"
  neu.s = ""
 
  For i = 1 To Len(text)
    If Mid(text, i, 1) = " "
      If leer = #False
        leer = #True
        neu + Mid(text, i, 1)
      EndIf
    Else
      leer = #False
      neu + Mid(text, i, 1)
    EndIf
  Next i
 
Next
 
time1 = ElapsedMilliseconds() - time1
 
time2 = ElapsedMilliseconds()
 
For ri = 1 To #r
 
  Text.s = "Hallo,           wie             geht's?"
 
  While FindString(Text, "  ", 1)
    Text = ReplaceString(Text,"  "," ")
  Wend
 
Next
 
time2 = ElapsedMilliseconds() - time2
 
time3 = ElapsedMilliseconds()
 
For ri = 1 To #r
 
  Text.s = "Hallo,           wie             geht's?"
 
  *sText.Byte = @Text
  *dText.Byte = @Text
  Repeat
    *dText\b = *sText\b
    If *dText\b = ' '
      While *sText\b = ' '
        *sText+1
      Wend
    Else
      *sText+1
    EndIf
    *dText+1
  Until *sText\b = 0
  *dText\b = *sText\b
 
Next
 
time3 = ElapsedMilliseconds() - time3
 
 
time4 = ElapsedMilliseconds()
For ri = 1 To #r
 
  Text.s = "Hallo,           wie             geht's?"
 
  *wert.byte = @Text
  Text2.s = Space(Len(Text))
  *wert2.byte = @Text2
  Repeat
    If *wert\b = 32
      *wert + 1
      *wert2 + 1
      While *wert\b = 32
        *wert + 1
      Wend
    EndIf
    *wert2\b = *wert\b
    *wert + 1
    *wert2 + 1
  Until *wert\b = 0 
 
Next
time4 = ElapsedMilliseconds() - time4
 
MessageRequester("",Str(time1)+" "+Str(time2)+" "+Str(time3)+" "+Str(time4))
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
der-sigi
Beiträge: 39
Registriert: 07.04.2006 12:22

Beitrag von der-sigi »

Hallo ihr Fleißigen ...

klasse, was da alles rausgekommen ist. Dankeschön.

Ich habe das seither mit 'ner Schleife gelöst, ähnlich wie mk-soft und dabei halte ich mich wie Kiffi mit "Ich lege i. A. mehr Wert auf Code, den ich auch nach langer Zeit auf Anhieb lesen kann." Ich meine damit nur was anderes als Kiffi (grins), denn die Schleife ist mir lieber als proprietärer Kode, der schwierig (wenn man es nicht kennt) in andere Sprachen zu übersetzen ist - eine Schleife kann man beispielsweise direkt übernehmen und es funktioniert.

Nochmal Danke
und viele Grüße
Sigi
Benutzeravatar
Karl
Beiträge: 520
Registriert: 21.07.2005 13:57
Wohnort: zu Hause

Beitrag von Karl »

Bitte jetzt ´ne Analyse in 0-Notation :D

Gruß Karl
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
Exabot
Beiträge: 63
Registriert: 10.12.2004 09:50

Beitrag von Exabot »

Code: Alles auswählen

Procedure.s RemoveDuplicateBytes( Text.s, Byte.c )
  *sText.Byte = @Text 
  *dText.Byte = @Text 
  Repeat 
    *dText\b = *sText\b 
    If *dText\b = Byte
      While *sText\b = Byte
        *sText+1 
      Wend 
    Else 
      *sText+1 
    EndIf 
    *dText+1 
  Until *sText\b = 0 
  *dText\b = *sText\b 
  ProcedureReturn Text
EndProcedure
So ists universeller,
das war der Vorteil von Kiffis Code

Gruss
Spider
Antworten