Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Wortanfänge in Großbuchstaben (https://www.delphipraxis.net/201946-wortanfaenge-grossbuchstaben.html)

Maekkelrajter 12. Sep 2019 13:25

Wortanfänge in Großbuchstaben
 
In einem String, der aus mehreren Wörtern besteht, soll jedes Wort mit einem Großbuchstaben beginnen, wie es bei englischsprachigen Metadaten von Musikstücken üblich ist (Titel, Interpret, Album usw.). Gibt es da irgendetwas 'Fertiges' oder muss ich das 'zu Fuß' erledigen? Ein Ansatz wäre, über alle Zeichen eines Strings zu iterieren und das erste Zeichen und alle Zeichen, die auf ein Leer- oder Interpunktionszeichen folgen, durch Großbuchstaben zu ersetzten. Wahrscheinlich habe ich da noch den einen oder anderen zu berücksichtigenden Fall vergessen.
Oder kennt noch jemand eine bessere Lösung?

Gruß LP

FBrust 12. Sep 2019 14:46

AW: Wortanfänge in Großbuchstaben
 
Hallo,

die Infos in diesem Thread könnten Dir evtl. weiterhelfen:

Anfangsbuchstaben groß machen

Gruß
Frank

Maekkelrajter 12. Sep 2019 22:12

AW: Wortanfänge in Großbuchstaben
 
Zitat:

Zitat von FBrust (Beitrag 1445877)
Hallo,

die Infos in diesem Thread könnten Dir evtl. weiterhelfen:

Anfangsbuchstaben groß machen

Gruß
Frank

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz