Seite 1 von 2

FirstChar = Grossbuchstabe

Verfasst: 31.10.2005 05:05
von Blackskyliner
wie kann ich es machen, dass der erste buchstabe eines wortes mit nem grossem zeichen beginnt?? also sowat in der art UCFirst(satz.s)

Verfasst: 31.10.2005 05:10
von Blackskyliner
hab was gefunde hat sich erledigt sorry!

Code: Alles auswählen

Procedure.s ucfirst (string.s) ; Erster Buchstabe gross darstellen. 
  For x=1 To Len(string.s) 
    If Mid(string.s,x,1)<>Chr(32) 
       BrkPos.l=x 
       Break 
    EndIf 
  Next x 
  ersterteil.s=UCase(Mid(String.s,1,BrkPos.l)) 
  zweiterteil.s=Mid(String.s,BrkPos.l+1,len(string.s)-BrkPos.l) 
  ProcedureReturn ersterteil.s+zweiterteil.s 
EndProcedure 

Verfasst: 31.10.2005 06:23
von crossroads
Etwas kürzer:

Code: Alles auswählen

Procedure.s ucfirst(String$)
  ersterteil.s = LTrim(String$)
  ProcedureReturn Space(Len(String$) - Len(ersterteil)) + UCase(Left(ersterteil, 1)) + Right(ersterteil, Len(ersterteil) - 1)
EndProcedure

Debug ucfirst("          hallo!")

Verfasst: 31.10.2005 10:19
von Froggerprogger
Hier noch eine Version, die wahrscheinlich etwas schneller ist:

Code: Alles auswählen

Procedure.s UCaseFirst(str.s)
  Protected result.s
  result = str
  PokeB(@result, Asc(UCase(PeekS(@result, 1))))
  ProcedureReturn result
Endprocedure

Verfasst: 01.11.2005 17:10
von Blackskyliner
Danke!

Verfasst: 01.11.2005 18:42
von Rob
Und noch ein paar Millisekunden beschleunigt :D
Es läuft übrigens ~10 mal so schnell, wenn du es aus der Prozedur rausnimmst:

Code: Alles auswählen

string.s = "hallo welt"




Procedure.s UCaseFirst(str.s) 
  Protected result.s 
  result = str 
  PokeB(@result, Asc(UCase(PeekS(@result, 1)))) 
  ProcedureReturn result 
EndProcedure

Procedure.s ucfirst(String$) 
  ersterteil.s = LTrim(String$) 
  ProcedureReturn Space(Len(String$) - Len(ersterteil)) + UCase(Left(ersterteil, 1)) + Right(ersterteil, Len(ersterteil) - 1) 
EndProcedure


Debug "Bitte warten..."

start = ElapsedMilliseconds()
For i = 1 To 10000000
  str.s = ucfirst(string)
Next
Debug "crossroads - Procedure: " + Str(ElapsedMilliseconds() - start) +  " ms"


start = ElapsedMilliseconds()
For i = 1 To 10000000
  ersterteil.s = LTrim(string) 
  str.s = Space(Len(string) - Len(ersterteil)) + UCase(Left(ersterteil, 1)) + Right(ersterteil, Len(ersterteil) - 1)
Next
Debug "crossroads - direkt: " + Str(ElapsedMilliseconds() - start) +  " ms"


start = ElapsedMilliseconds()
For i = 1 To 10000000
  s.s = UCaseFirst(string)
Next
Debug "Froggerprogger - Procedure: " + Str(ElapsedMilliseconds() - start) +  " ms"



start = ElapsedMilliseconds()
For i = 1 To 10000000
  s.s = UCase(Chr(PeekB(string))) + Right(string,Len(string)-1)
Next
Debug "Rob - direkt: " + Str(ElapsedMilliseconds() - start) +  " ms"


start = ElapsedMilliseconds()
For i = 1 To 10000000
  PokeB(@string, Asc(UCase(PeekS(@string, 1)))) 
Next
Debug "Froggerprogger - direkt: " + Str(ElapsedMilliseconds() - start) +  " ms"


strong.s = "hallo welt"

start = ElapsedMilliseconds()
For i = 1 To 10000000
  PokeB(strong, UCase(Chr(PeekB(strong))))
Next
Debug "Rob 2 - direkt: " + Str(ElapsedMilliseconds() - start) +  " ms"

strung.s = "hallo welt"

start = ElapsedMilliseconds() 
For i = 1 To 10000000 
  PokeB(strung, PeekB(strung)-32) 
Next 
Debug "Rob 3 - direkt: " + Str(ElapsedMilliseconds() - start) +  " ms"
[EDIT: Keine Ahnung was UCase() genau macht, aber für "normale" Strings mit Buchstaben kannst du auch einfach 32 abziehen. Ist nochmal etwas schneller.

Code: Alles auswählen

PokeB(string, PeekB(string)-32)
]

Verfasst: 01.11.2005 20:46
von Blackskyliner
Dankeschön!! Des hebt die Performance erheblich :D

Verfasst: 01.11.2005 20:47
von Blackskyliner
PokeB(strung, PeekB(strung)+32)
gibt mir aber nur ne Adresse zurück...

EDIT:
ahh ok isst die buffer address

Code: Alles auswählen

start = ElapsedMilliseconds() 
For i = 1 To 10000000 
  PokeB(strung, PeekB(strung)+32) 
Next 
Debug "Rob 3 - direkt: " + Str(ElapsedMilliseconds() - start) +  " ms"
Gibt bei mir bei nem Debug von nem PeekS() des PokeB´s ein falsches zeichen aus...

Verfasst: 01.11.2005 21:02
von Rob
Ich Trottel :>
Musst natürlich 32 abziehen, nicht addieren (Siehe ASCII-Tabelle)

So gehts:

Code: Alles auswählen

string.s = "hallo welt"
PokeB(string, PeekB(string)-32) 
Debug string

Verfasst: 02.11.2005 19:00
von NicTheQuick
Was soll denn das mit diesen "strong" und "strung"?

Hab übrigens neue Ergebnisse:
Programm hat geschrieben:crossroads - Procedure: 13920 ms
crossroads - direkt: 10354 ms
Froggerprogger - Procedure: 11707 ms
Rob - direkt: 4947 ms
Froggerprogger - direkt: 511 ms
Rob 2 - direkt: 431 ms
Rob 3 - direkt: 120 ms

Code: Alles auswählen

string.s = "hallo welt" 

#MaxD = 10000000


Procedure.s UCaseFirst(str.s) 
  Protected Result.s 
  Result = str 
  PokeB(@Result, Asc(UCase(PeekS(@Result, 1)))) 
  ProcedureReturn Result 
EndProcedure 

Procedure.s ucfirst(String$) 
  ersterteil.s = LTrim(String$) 
  ProcedureReturn Space(Len(String$) - Len(ersterteil)) + UCase(Left(ersterteil, 1)) + Right(ersterteil, Len(ersterteil) - 1) 
EndProcedure 


start = ElapsedMilliseconds() 
  For i = 1 To #MaxD 
    str.s = ucfirst(string) 
  Next 
text.s = "crossroads - Procedure: " + Str(ElapsedMilliseconds() - start) +  " ms" + #CRLF$


start = ElapsedMilliseconds() 
  For i = 1 To #MaxD 
    ersterteil.s = LTrim(string) 
    str.s = Space(Len(string) - Len(ersterteil)) + UCase(Left(ersterteil, 1)) + Right(ersterteil, Len(ersterteil) - 1) 
  Next 
text + "crossroads - direkt: " + Str(ElapsedMilliseconds() - start) +  " ms" + #CRLF$


start = ElapsedMilliseconds() 
  For i = 1 To #MaxD 
    s.s = UCaseFirst(string) 
  Next 
text + "Froggerprogger - Procedure: " + Str(ElapsedMilliseconds() - start) +  " ms"  + #CRLF$



start = ElapsedMilliseconds() 
  For i = 1 To #MaxD 
    s.s = UCase(Chr(PeekB(string))) + Right(string,Len(string)-1) 
  Next 
text + "Rob - direkt: " + Str(ElapsedMilliseconds() - start) +  " ms" + #CRLF$


start = ElapsedMilliseconds() 
  For i = 1 To #MaxD 
    PokeB(@string, Asc(UCase(PeekS(@string, 1)))) 
  Next 
text + "Froggerprogger - direkt: " + Str(ElapsedMilliseconds() - start) +  " ms" + #CRLF$


string.s = "hallo welt" 

start = ElapsedMilliseconds() 
  For i = 1 To #MaxD 
    PokeB(string, UCase(Chr(PeekB(string)))) 
  Next 
text + "Rob 2 - direkt: " + Str(ElapsedMilliseconds() - start) +  " ms" + #CRLF$

string.s = "hallo welt" 

start = ElapsedMilliseconds() 
  For i = 1 To #MaxD 
    PokeB(string, PeekB(string)-32) 
  Next 
text + "Rob 3 - direkt: " + Str(ElapsedMilliseconds() - start) +  " ms" + #CRLF$

MessageRequester("Ergebnisse", text)

SetClipboardText(text)
Aber auf was man auch noch achten sollte: Was ist, wenn der erste Buchstabe schon großgeschrieben ist?