Seite 4 von 4

Verfasst: 05.02.2008 23:54
von AND51
Wir sollten uns nochmal auf die "Regeln" einigen.
Eure Prozeduren korrigieren nur Buchstaben, denen (in)direkt ein Leerzeichen voransteht.

Auf solche Konstrukte geht ihr nicht ein:

Code: Alles auswählen

Debug wasnlos("muss_dies_hier_nicht_auch_Großgeschrieben_werden?")
Ich dachte, es geht hier darum, frei stehende Worte zu korrigieren; dabei müssen diese nicht unbedingt nur durch ein Leerzeichen getrennt sein.

Machen wir das jetzt nur vom Leerzeichen abhängig oder nehmen wir auch Konstrukte wie mein obiges Beispiel mit rein?

> LCase
LCase() ist der "worst case" ^^
Stell dir mal vor, du jagst mein obiges Beispiel durch LCase(). Dabei würde das Wort "Großschreibung" verkleinert. Deine Prozedur macht das aber nicht rückgängig, also ist deine Prozedur fehlerhaft!
Wenn du das so machen möchtest, gern; dann musst du aber auch alle 'erkennbar freistehenden' Wörter korrigieren und nicht nur jene, die (in)direkt durch Leerzeichen getrennt sind.

Deshalb schlage icgh vor, wir beschränken uns nicht nur auf Leerzeichen, sondern nehmen auch andere Trennzeichen mit rein. Theoretisch kann ja jedes Zeichen außer a-z und A-Z als Trennzeichen dienen.


@ alle
Noch was:
Bin dank dem Stichwort LCase() drauf gekommen. LCase() berücksichtigt auch Sonderzeichen wie é, Ä, Ö und so weiter. Diese müssen wir hier auch einbauen. Habe bisher auch nicht dran gedacht, aber Jungs, wir wissen ja jetzt was zu tun ist!
Frisch ans Werk! :allright:

Verfasst: 05.02.2008 23:59
von AND51
Hier eine Liste der Buchstaben, die wir in unseren Prozeduren berücksichtigen müssen:

Code: Alles auswählen

For n=32 To 255
	If Asc(LCase(Chr(n))) <> Asc(UCase(Chr(n)))
		Debug "Zeichen: "+Chr(n)+" ("+Str(n)+")"
	EndIf
next
Achtung: Passt auf, zum Beispiel scheint Chr(247), wenn man es durch UCase() und LCase() jagt, kein gültiges Zeichen zu sein!

Verfasst: 06.02.2008 00:38
von HeX0R
Du musst jetzt aber auch keine Doktorarbeit über dieses Pipifaxthema abhandeln.

Ich bin nur eingestiegen, weil mich Andreas' Aussage irgendwie gereizt hat:
>>Glaub aber das man das nicht mehr schneller machen kann, es seidenn es kann mir jemand das gegenteil beweisen^^

Das Thema sollte nun durch sein, zumindest für mich, so spannend finde ich das denn auch wieder nicht.

Verfasst: 06.02.2008 00:43
von AND51
Es zwingt dich ja niemand, mitzumachen.
Leider kann man nicht ohne Weiteres !32 zum kleinschreiben und |32 zum großschreiben anwenden, dies klappt bei ein paar Zeichen nicht.
Trotzdem danke für diese Idee, ist immerhin schneller als +-32.
Dennoch: Wenn man's macht, sollte man's schon richtig machen. Finde ich.

Verfasst: 06.02.2008 01:16
von AND51
So hier meine Prozedur:

Code: Alles auswählen

Procedure.s Capitalize(text.s)
	Protected *pos.Character=@text, inWord.l
	While *pos\c
		Select *pos\c
			Case 1 To 64, 91 To 96, 123 To 191, 215, 247
				inWord=0
			Default
				If inWord
					Select *pos\c
						Case 65 To 90, 192 To 214, 216 To 222
							*pos\c|32
						Case 159
							*pos\c=255
					EndSelect
				Else
					Select *pos\c
						Case 97 To 122, 224 To 246, 248 To 254
							*pos\c!32
						Case 255
							*pos\c=159
					EndSelect
					inWord=1
				EndIf
		EndSelect
		*pos+SizeOf(Character)
	Wend
	ProcedureReturn text
EndProcedure

Debug Capitalize("<DiES 'isT #eIn +testText, ~um 3zu 4zEigÖn &wAs_(paS)siertÖ")
Debug Capitalize("äöüÄÖÜß ß ^ ÿÞ")
Die wandelt ganze Wörter um, egal ob diese durch Leerzeichen, Bindestriche, Unterstriche, etc. getrennt sind.
Durch die falsche Handhabung von ÿ und Ÿ musste ich eine manuelle Korrektur mit einem zusätzlichen Case vornehmen.