![]() |
groß/kleinschreibung
hallo leute.
hab ein problem: aus hErMAn mEieR soll Herman Meier gemacht werden. Wie kann man Namen so mit einer delphi-function formatieren? :cry: |
Re: groß/kleinschreibung
Hi, herzlich willkommen!
Das ist etwas unperformant und auf die Schnelle hingecoded, müsste aber gehen:
Delphi-Quellcode:
Nur wenn das tausende Namen sind, die du formatieren musst, würde ich wohl nach einer anderen Lösung suchen. :zwinker:
function CreateCorrectName(MyName: string): string;
var i: Integer; TempName: string; begin TempName := MyName; TempName := LowerCase(TempName); for i := 1 to Length(MyName) do begin if i = 1 then TempName[i] := UpperCase(TempName[i])[1] else if TempName[i - 1] = ' ' then TempName[i] := UpperCase(TempName[i])[1] end; result := TempName; end; Edit: Da war eine Zeile zuviel. ^^ |
Re: groß/kleinschreibung
Du gehst einfach iterativ durch den String durch. Der erste Buchstabe nach einem Leerzeichen (oder der erste buchstabe überhaupt) wird groß, der Rest klein geschrieben.
Delphi-Quellcode:
Var
bFirst : boolean; i : Integer; Begin bFirst := True; // <-- Nachträglich eingefügt For i := 1 to Length (aWord) do Begin If bFirst Then begin aWord[i] := Upc(aWord[i]); bFirst := False; end else aWord[i] := LowerCase(aWord[i]); bFirst := (aWord[i]=' '); End; End; |
Re: groß/kleinschreibung
Kann man nicht ersteinmal alle klein machen und dann über pos(' ')+1 die ersten Buchstaben großmachen? Da sollte doch schneller gehen, oder?
|
Re: groß/kleinschreibung
Hallo,
du lässt eine Schleife von 1 bis length(string) über den String laufen und checkst in dieser Schleife ob du: a) ein Leerzeichen hast, wenn ja wird das nächste Zeichen Großgeschrieben b) kein Leerzeichen hast, dann wird das aktuelle Zeichen, wenn nicht durch a) ein durchlauf vorher "markiert" kleingeschrieben Klein und Großschreibung geht mit uppercase und lowercase mfG Markus
Delphi-Quellcode:
EDIT: @ Nikolai: Oder man machts so wie ich (oder dein Vorredner) und macht alles klein, was nicht groß werden soll
function correctName(str : string):string;
var up : boolean; var i : integer; begin up := false; str[1] := uppercase(str[1]); for i := 2 to length(str) do begin if str[i] <> ' ' then begin if up then str[i] := uppercase(str[i) else str[i] := lowercase(str[i]); up := false; end else begin up := true; end; end; result := str; end; Ups, ich stelle gerade fest, dass der Code meines VorVorrednera eigentlich identisch mit meinem ist ... Pech gehabt ^^ |
Re: groß/kleinschreibung
Zitat:
|
Re: groß/kleinschreibung
Zitat:
Aber kann ich selbstverständlich irren. |
Re: groß/kleinschreibung
Sagt mal, geht das nur mir so, oder fehlt in alzaimars Code trotz der Deklaration als "Delphi-Code" das Syntaxhighlighting? :gruebel:
|
Re: groß/kleinschreibung
Zitat:
|
Re: groß/kleinschreibung
ich würde sagen, dass bei dem code das highlightening fehlt, weil dort die begriffe, die normalerweise ge-highlightet werden alle groß geschrieben sind und es deswegen nicht werden.
Flare |
Re: groß/kleinschreibung
nein, daran liegt es nicht! Code von alzaimar in "richtiger" Form:
Delphi-Quellcode:
Var
bFirst : boolean; i : Integer; Begin bFirst := True; // <-- Nachträglich eingefügt For i := 1 to Length (aWord) do Begin If bFirst Then begin aWord[i] := Upc(aWord[i]); bFirst := False; end else aWord[i] := LowerCase(aWord[i]); bFirst := (aWord[i]=' '); End; End; |
Re: groß/kleinschreibung
Hallo Nicolai1605,
ich denke so klappt es auch und ist noch etwas schöner:
Delphi-Quellcode:
Var
bFirst : boolean; i : Integer; Begin bFirst := True; For i := 1 to Length (aWord) do Begin If bFirst Then aWord[i] := Upc(aWord[i]) else aWord[i] := LowerCase(aWord[i]); bFirst := (aWord[i]=' '); End; End; |
Re: groß/kleinschreibung
Zitat:
|
Re: groß/kleinschreibung
Wie wäre es in der Art
Delphi-Quellcode:
PS: Wer hat behauptet, daß das erste Zeichen nicht auch schon ein Leerzeichen ist und ob überhaupt was eingegeben wurde?
Function CreateCorrectName(Const MyName: String): String;
Var i: Integer; Begin Result := AnsiLowerCase(Trim(MyName)); If Result = '' Then Exit; i := 1; While i > 0 do Begin Result[i] := UpperCase(Result[i]); i := PosEx(' ', Result, i); If i <> 0 Then Inc(i); End; End; |
Re: groß/kleinschreibung
Zitat:
Zitat:
|
Re: groß/kleinschreibung
Außerdem muß ein Name ja nicht unbedingt per " " getrennt sein ... Doppelnamen werden oft per "-" getrennt und wenn man zuerst den Nachnamen angibt, mach man im Allgemeinen ein "," rein.
Delphi-Quellcode:
In dem Code wird zwar bei mehreren aufeinanderfolgenden " ", "-" und/oder "," zwar unnötig versucht eines der Zeichen Großzuschreiben, aber dat is ja eigentlich egal ... jedenfalls wäre 'ne Abfrage um das zu verhindern nicht sehr viel Performanceeinbringender ^^
Function CreateCorrectName(Const MyName: String): String;
Var i: Integer; Begin Result := AnsiLowerCase(Trim(MyName)); i := 1; While i <= Length(Result) do Begin Result[i] := UpperCase(Result[i]); While (i <= Length(Result) and not (Result[i] in [' ', '-', ',']) do Inc(i); Inc(i); End; End; |
Re: groß/kleinschreibung
klar. ich test das jetzt mal in meiner stringgrid mit der 1.spalte.
cya |
Re: groß/kleinschreibung
Hallo,
eine andere Möglichkeit wäre es mit Hilfe einer Stringliste zu lösen:
Delphi-Quellcode:
Grüße von Dale
FUNCTION CreateCorrectName(MyName: STRING): STRING;
VAR i : Integer; Liste: TStrings; BEGIN Liste := TStringList.Create; Liste.Delimitier := ' '; // Hier muss natürlich ein Leerzeichen stehen Liste.DelimitedText := MyName; FOR i := 0 TO Liste.Count - 1 DO Liste[i] := UpperCase(Liste[i]); // und da hat eine Klammer gefehlt Result := Liste.DelimitedText; Liste.Free; END; |
Re: groß/kleinschreibung
Delphi-Quellcode:
MyName[i] := UpperCase(MyName[i]);
Zitat:
Delphi-Quellcode:
While not (MyName[i] in [' ', '-', ',']) do Inc(i);
Zitat:
|
Re: groß/kleinschreibung
Tut mir leid, hab halt die Parameter von UpCase nicht im Kopf ... schau mal in die OH, aber vielleicht hilf da
UpCase(MyName[i])[1]; Und wegen der "linken Seite" ... geh nochmal in meinen Post da oben (hatte einiges durch Result ersetzt :zwinker: und gerade noch ein (i <= Length(Result) and eingefügt :stupid: ) |
Re: groß/kleinschreibung
Zitat:
UpperCase(const S: string): string; mag er nich .. aber UpCase( ch : Char ) : Char; mag er ^^ und gegen
Delphi-Quellcode:
hat er das:
While (i <= Length(Result) and not (Result[i] in [' ', '-', ',']) do Inc(i);
[Fehler] Unit1.pas(37): Operator ist auf diesen Operandentyp nicht anwendbar :gruebel: EDIT: ahh da fehlt ne klammer zu!
Delphi-Quellcode:
While (i <= Length(Result)) and not (Result[i] in [' ', '-', ',']) do Inc(i);
|
Re: groß/kleinschreibung
Zitat:
ich hab die fehler geändert aber trotzdem geht das noch nicht? aufgerufen mit: for i:= 0 to sgfiles.RowCount-1 do begin CreateCorrectName(sgfiles.cells[0,i]); |
Re: groß/kleinschreibung
Hallo danku,
himitsu stellt dir eine Funktion zur Verfügung, keine Prozedur :wink:
Delphi-Quellcode:
Gruß Hawkeye
sgfiles.cells[0,i] := CreateCorrectName(sgfiles.cells[0,i]);
|
Re: groß/kleinschreibung
Stimmt ... StringGrid.Cells ist ein Property (ist doch eines?) und da gibt's entweder Setter-, oder Getter-Methoden, man kann also den Wert entweder nur auslesen, oder setzen ... also nicht gleichzeitig, somit ist es nicht möglich dieses als eine Variable zu übergeben.
Lösung: siehe Vorredner ^^
Delphi-Quellcode:
SetterMethode := CreateCorrectName(GetterMethode);
// GetterMethode > get - Wert auslesen // SetterMethode > set - Wert setzen/ändern |
Re: groß/kleinschreibung
wie kann ich das noch erweitern wenn z.b. folgender fall vorliegt:
test+test2 -> wird nach dem obengenannten prinzip so formatiert: Test+test2 Ziel: test+test2 -> Test + Test2 |
Re: groß/kleinschreibung
hat einer eine ahnung?
|
Re: groß/kleinschreibung
einfach nach dem Plus suchen und dann jeweils das Zeichen davor und dahinter prüfen, ob's ein Leerzeichen ist und wenn nicht, dann einfach eines einfügen
Was man z.B. z.B. machen kann:
Delphi-Quellcode:
i := Pos('+', S);
If i <> 0 Then Begin If (i > 1) and (S[i - 1] <> ' ') Then Insert(' ', S, i); If (i < Length(S)) and (S[i + 1] <> ' ') Then Insert(' ', S, i + 1); End; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz