ProperCase in Strings

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: ProperCase in Strings

Beitrag von Nino »

:D

OK, dann z.B. so:

Code: Alles auswählen

EnableExplicit

#Separator$ = " "

Procedure.s ProperCase(text$)
   Protected i, count = CountString(text$, #Separator$) + 1
   Protected word$, result$ = ""
   
   For i = 1 To count
      word$ = StringField(text$, i, #Separator$)
      result$ + UCase(Left(word$, 1)) + Mid(word$, 2)
      If i < count
         result$ + #Separator$
      EndIf   
   Next
   
   ProcedureReturn result$
EndProcedure

Debug "'" + ProperCase("äpfel birnen kirschen") + "'"
Debug "'" + ProperCase("  äpfel birnen kirschen  ") + "'"
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Re: ProperCase in Strings

Beitrag von 7x7 »

Also wenn wir schon am Rumklugscheissen sind: Variablennamen wie "i", "I", "l", "L" usw. sollten
tunlichst wegen Verwechslungsgefahr vermieden werden. Dieser Quatsch stammt -weshalb auch
immer- aus den Urzeiten der Programmierung. Und wegen der besseren Lesbarkeit gehört zum "Next"
auch immer die Schleifenvariable, auch wenn der Compiler ohne damit zurecht kommt.

So, neuer Code:

Code: Alles auswählen

EnableExplicit

#Separator$ = " "

Procedure.s ProperCase(text$)
   Protected a, count = CountString(text$, #Separator$) + 1
   Protected word$, result$ = ""
   
   For a = 1 To count
      word$ = StringField(text$, a, #Separator$)
      result$ + UCase(Left(word$, 1)) + Mid(word$, 2)
      If a < count
         result$ + #Separator$
      EndIf   
   Next a
   
   ProcedureReturn result$
EndProcedure

Debug "'" + ProperCase("äpfel birnen kirschen") + "'"
Debug "'" + ProperCase("  äpfel birnen kirschen  ") + "'"
Bin ich jetzt Sieger dieses Wettbewerbs? :mrgreen:
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
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

Re: ProperCase in Strings

Beitrag von ts-soft »

7x7 hat geschrieben:Also wenn wir schon am Rumklugscheissen sind: Variablennamen wie "i", "I", "l", "L" usw. sollten
tunlichst wegen Verwechslungsgefahr vermieden werden. ...
...
Bin ich jetzt Sieger dieses Wettbewerbs? :mrgreen:
Nein, weil es gibt auch den Variablentyp .a! :mrgreen:

For i ist allgemein üblich und sollte im Kontext mit For auch zu keinerlei Verwechslungen führen.
Aber sprechende Variablennamen sind natürlich vorzuziehen!
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
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: ProperCase in Strings

Beitrag von Nino »

7x7 hat geschrieben:Variablennamen wie "i", "I", "l", "L" usw. sollten
tunlichst wegen Verwechslungsgefahr vermieden werden. Dieser Quatsch stammt -weshalb auch
immer- aus den Urzeiten der Programmierung.
Da hast du wohl etwas falsch verstanden. "i" und "L" gehören nicht zu der Aufzählung, denn wenn man die nicht unterscheiden kann, sollte man sich besser einen Termin beim Augenarzt besorgen.
7x7 hat geschrieben: Und wegen der besseren Lesbarkeit gehört zum "Next"
auch immer die Schleifenvariable, auch wenn der Compiler ohne damit zurecht kommt.
Die Lesbarkeitb wird dadurch höchstens verbessert, wenn es sich um mehrere verschachtelte For/Next-Schleifen handelt.
ts-soft hat geschrieben:For i ist allgemein üblich
Ja, und das "i" steht hier für "index".
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

Re: ProperCase in Strings

Beitrag von ts-soft »

Nino hat geschrieben:Ja, und das "i" steht hier für "index".
Und ich dachte immer für Item :mrgreen:
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
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: ProperCase in Strings

Beitrag von Derren »

Und wofür steht dann das k bei StringField? :mrgreen:

Also diese Funktion sollte man vielleicht nicht ProperCase nennen. CamelCase mit Leerzeichen vielleicht...
Unter ProperCase habe ich mir jetzt eine Funktion vorgestellt, die Buchstaben nach entsprechenden Satzzeichen groß schreibt (wie man es vom Handy kennt).
Signatur und so
MikeLGS
Beiträge: 3
Registriert: 18.05.2012 13:42

Re: ProperCase in Strings

Beitrag von MikeLGS »

tut mir wirklich leid, wenn ich hier eine Welle der Programmier-Empörung ausgelöst habe. Für mich ist der Code einfach, schnell und auch für Laien gut zu verstehen. Man kann sich ja auch im Programmieren verlieren und es so, so oder so machen und am Ende sieht man den Wald vor lauter Bäumen nicht.
Bei mir funzt er auch mit Umlauten.

Zu Nino:
mit Left(UCase(d$),1) wird ja der erste Buchstabe abgeschnitten :D

trotzdem vielen Dank an alle für die Anregungen. :D
man kann ja den Code in ein anderes Thema verschieben.

MfG Mike
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: ProperCase in Strings

Beitrag von Nino »

MikeLGS hat geschrieben:tut mir wirklich leid, wenn ich hier eine Welle der Programmier-Empörung ausgelöst habe.
Von "Empörung" habe ich hier nirgendwo etwas gelesen ...
MikeLGS hat geschrieben:Zu Nino:
mit Left(UCase(d$),1) wird ja der erste Buchstabe abgeschnitten :D
Ja und? Das habe ich auch nicht bestritten. Vielleicht liest du einfach mal genau was ich geschrieben habe, wenn das nicht zu viel verlangt ist :?:
Benutzeravatar
mk-soft
Beiträge: 3856
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: ProperCase in Strings

Beitrag von mk-soft »

Das mit den Pointer gedöns finde ich noch am besten. Für mich ist es logisch mit Pointern zu arbeiten.

:wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
MikeLGS
Beiträge: 3
Registriert: 18.05.2012 13:42

Re: ProperCase in Strings

Beitrag von MikeLGS »

noch mal's Entschuldigung.

Nino: meine Augen sind nicht mehr die Besten. :cry:

ich arbeite auch mit Pointern. :D wo's angebracht ist. Und das schon seit zwanzig Jahren (VB,Java,C++ und seit der Herausgabe auch mit PureBasic)

Verzeiht mir, dass ich in meinem Programmiererleben einige Dinge für unzweckmäßig erachte. Z.B. ellenlanger Code.
Das kann jeder für sich entscheiden denke ich.

LG Mike
Antworten