Dort stieß ich auf das Stichwort 'AnsiProperCase', was mich zu diesem Code führte:
Delphi-Quellcode:
const
StdWordDelims: TSysCharset = [#0..'
','
,','
.','
;','
/','
\','
:','
''
','
"','
`','
(','
)','
[','
]','
{','
}'];
function AnsiProperCase(
const S:
string;
const WordDelims: TSysCharSet):
string;
var
P,
PE : PChar;
begin
//Result:=AnsiLowerCase(S);
Result:= S;
P:= PChar(pointer(Result));
PE:= P + Length(Result);
while (P <
PE)
do
begin
while (P <
PE)
and CharInSet(P^, WordDelims)
do
inc(P);
if (P <
PE)
then
P^:= UpCase(P^);
while (P <
PE)
and not (CharInSet(P^, WordDelims))
do
inc(P);
end;
end;
ShowMessage(AnsiProperCase('
Suite No. 2 for Orchestra (1921 version): IV. Comodo',StdWordDelims));
//liefert: 'Suite No. 2 For Orchestra (1921 Version): IV. Comodo'
Auf den ersten Blick scheint alles zu funktionieren. Die erste Zeile musste ich auskommentieren, weil es in dem vorgesehenen Anwendungsgebiet keine Großbuchstaben an falscher Stelle gibt, die ersetzt werden müssen. Man sollte annehmen, dass das für das Ergebnis unerheblich ist. Aber in einem der Teststrings (s.o.) kamen römische Zahlen vor, die normalerweise mit Großbuchstaben dargestellt werden, und bei denen - unschön, aber logisch - nur das erste Zeichen groß geschrieben wurde. So scheint die Routine brauchbar zu sein, aber aus alter Erfahrung weiß ich, dass es bestimmt noch Fälle gibt, die nicht berücksichtigt sind. Warten wir's ab
Gruß LP