PDA

Ver la Versión Completa : Primea Letra En Mayúscula


Tangela
31-10-2005, 12:07:19
Hola a todos:
Pues lo que necesitaría es una rutina que me permita poner en mayúscula la primera letra de cada palabra de un string dado que está en minúsculas.

Y de paso, ¿alguien sabe como conseguir que al pasar de mayúsculas a minúsculas con la funcion LowerCase() se conviertan también las Ñ y los Ó,Á, etc...?

dec
31-10-2005, 12:20:33
Hola,

A ver si este par de funciones te apañan:


{ ············································································ }

function Capitalizar(const cadena: string): string;
var
s: string;
i: integer;
b: boolean;
begin
s := '';
b := true;
for i := 1 to Length(cadena) do
begin
if b then
s := s + AnsiUpperCase(cadena[i])
else
s := s + cadena[i];
b := (cadena[i] = ' ');
end;
Result := s;
end;

{ ············································································ }

function CapitalizarFrase(const frase: string) : string;
var
i: integer;
up: boolean;
begin
up := true;
Result := frase;
for i := 1 to Length(frase) do
begin
if up then
Result := Result + AnsiUpperCase(frase[i])
else
Result := Result + AnsiLowerCase(frase[i]);
up := frase[i] = ' ';
if up and (Length(frase) >= (i + 2)) and
(frase[i+2] = ' ') then up := false;
end;
end;

{ ············································································ }

Delfino
31-10-2005, 12:43:45
Yo lo hago con la funcion StuffString de la unidad StrUtils :

StuffString(s,1,1,UpperCase(LeftStr(s,1)));

Tangela
01-11-2005, 00:20:11
{ ············································································ }

function CapitalizarFrase(const frase: string) : string;
var
i: integer;
up: boolean;
begin
up := true;
Result := frase;
for i := 1 to Length(frase) do
begin
if up then
Result := Result + AnsiUpperCase(frase[i])
else
Result := Result + AnsiLowerCase(frase[i]);
up := frase[i] = ' ';
if up and (Length(frase) >= (i + 2)) and
(frase[i+2] = ' ') then up := false;
end;
end;

{ ············································································ }


Muchas gracias, es justo lo que necesitaba. Unicamente he tenido que hacer la siguiente modificación para que funcione perfecto:
en lugar de

Result := frase;

Puse:

Result := '';

porque de lo contrario el resultado de la función era la frase original más la frase capitalizada: por ejemplo: la frase originalLa Frase Capitalizada

Gracias, muchas gracias

yusnerqui
01-11-2005, 19:36:57
Bueno ya el caso está resuelto, pero aporto otra solución para la base de datos de los foros haciendo uso de los TStrings.

function AsTitulo(Frase:String):String;
Var
Lista : TStrings;
i : integer;
Temp : String;
begin
Lista := TStringList.Create;
Lista.Delimiter := ' ';
Lista.DelimitedText := Frase;
for i := 0 to Lista.Count - 1 do
begin
Temp := LowerCase(Lista[i]);
Temp[1]:= UpCase(Temp[1]);
Lista[i] := Temp;
end;
Result := Lista.DelimitedText;
Lista.Free;
end;


Saludos;)

dec
02-11-2005, 06:34:19
Hola,



Muchas gracias, es justo lo que necesitaba. Unicamente he tenido que hacer la siguiente modificación para que funcione perfecto:
en lugar de


Result := frase;

Puse:


Result := '';

porque de lo contrario el resultado de la función era la frase original más la frase capitalizada: por ejemplo: la frase originalLa Frase Capitalizada

Pues así es la verdad. Gracias a ti por informar del error, que he corregido en donde era menester. ;)