Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Capitalize


spike0 - Fr 13.05.05 18:30
Titel: Capitalize
Gibt's ne Funktion für Capitalize (die ersten Buchstaben von allen Wörtern groß schreiben, z.B. bei Memo o. Richedit)?
Wenn nicht, wie könnte ich es sonst machen?


retnyg - Fr 13.05.05 18:34


Delphi-Quelltext
1:
2:
3:
4:
5:
function eBg(s:string):string;
begin
  result := s;
  result[1] := uppercase(s[1]);
end;


GSE - Fr 13.05.05 18:45

ich glaube er meint nur die Anfangsbuchstaben der Wörter groß schreiben.
grob: du musst den Satz nach Wörtern durchsuchen, will heißen du durchsuchst ihn nach Worttrennzeichen(Kommas, Leerzeichen, Punkte, etc.) und wenn nach einem Trennzeichen kein trennzeichen kommt, fängt ein neues Wort an -> den Buchstaben "upcasen" (UpCase).
z.B. so (ist jetzt auf die schnelle und ungetestet)

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
function Capitalize(s: string): string;
const
 Delimiters = [' ''.''!'];
var
 i: integer;
 IsWord: boolean;
begin
 IsWord := false;
 for i := 1 to Length(s) do
 begin
  if (not(s[i] in Delimiters)) and (not IsWord) then
  begin
   s[i] := UpCase(s[i]);
   IsWord := true;
  end;
  if ((s[i] in Delimiters)) then IsWord := false;
 end;

 result := s;
end;


mfg
GSE


spike0 - Fr 13.05.05 18:45

Funktioniert nicht: bei uppercase geht nur string, und kein char


retnyg - Fr 13.05.05 19:02

dann halt upcase
interessanter asm code:
system.pas hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
function        UpCase( ch : Char ) : Char;
asm
{ ->    AL      Character       }
{ <-    AL      Result          }

        CMP     AL,'a'
        JB      @@exit
        CMP     AL,'z'
        JA      @@exit
        SUB     AL,'a' - 'A'
@@exit:
end;



spike0 - Fr 13.05.05 19:27

@ GSE

Danke, das war genau das Richtige.
Hinweis: Meine Antwort ("es geht nicht") war auf die 1. Antwort bezogen...