Array
(
)

Função para caixabaixa em char??

Faustoalves
   - 07 ago 2004

Salve galera..

Estou com o seguinte problema:
Preciso percorrer uma string e transforma-la em minuscula letra a letra:
para transformar em MAIUSCULA, eu utilizo a seguinte construção

#Código

for k := Length(Linha) do
begin
Linha[k] := UpCase(linha[K]);
end;


Mas não estou conseguindo encontrar a função inversa..
Já tentei Lower(). AnsiStrLower(), StrLower(). o problema é que AnsiStrLower(), e StrLower() trabalhamcom Pchar e quanto utilizo

a construção do For, cada item da variavel linha é retornada como Char.. ai tenho a seguinte msg de erro:
[Error] UString.pas(53): Incompatible types: ´Char´ and ´PChar´

Se alguém puder me ajudar desde já agradeço

Fausto


Oscar Candido
   - 07 ago 2004

Tente usar a função:

#Código

Linha[k] := AnsiLowerCase(linha[K]);


Espero ter ajudado
um abraço


Emerson
   - 07 ago 2004

só uma pequena correção:

// deve ser solicitado o primeiro elemento, visto que AnsiLowerCase()
// retorna uma string, mas Linha[k] espera um char
for k := 1 to Length(linha) do
    Linha[k] := AnsiLowerCase(linha[K])[1];


Faustoalves
   - 07 ago 2004


Citação:
só uma pequena correção:

// deve ser solicitado o primeiro elemento, visto que AnsiLowerCase()
// retorna uma string, mas Linha[k] espera um char
for k := 1 to Length(linha) do
 
Linha[k] := AnsiLowerCase(linha[K])[1];


Não deu certo, na verdade estou com uma unit que converte o nome próprio para maiuscula desconsiderando as letras e silabas de junção de nomes, ex:
jose da silva fica Jose da Silva
Mas ela somente faz isto se toda a string já for minuscula estou convertendo uma base de dados e os nomes estão todos em maiusculas ai eu estou fazendo assim:

Se eu Chamar a função assim não funciona:

#Código


ClienteFBNOMECLIENTE.Value := Proprio(ClienteDBFCLINOM.Value);


Mas se eu chamar a função assim funciona:
#Código

ClienteFBNOMECLIENTE.Value := Proprio(LowerCase(ClienteDBFCLINOM.Value));


Observe que nesta ultima chamada eu utilizo o LowerCase(NomeCampo).


Mas o ideal seria inserir o LowerCase dentro da função que esta definita assim:#Código

function Proprio(Letra: String):String ;
begin
// o ideal seria que aqui ele transformasse tudo em minuscula
// Já tentei assim

Letra := LowerCase(Letra);

// e assim também

for i := 1 to length(Letra) do
Letraaux := AsiLowerCase(Letra[i])[1];
Letra := LetraAux;

Em ambos os casos não funcionou...


Se alguém puder me dar uma dica desde já agradeço

Fausto


G1b4
   - 07 ago 2004

Tenta isso:

#Código


function Proprio(Letra: String):String ;
var
resultado:string;
k: integer;
begin
resultado:=´´;
for k:=1 to length(linha) do
resultado:=resultado+AnsiLowerCase(Letra[k]);
result:=resultado
end;


:wink:


Emerson
   - 07 ago 2004

veja se essa função te ajuda:

// formata nome para iniciais em maiúsculas
function FormataNome(Texto: string): string;
const Excessao: array[0..5] of string = (´ de ´,´ do ´,´ da ´,´ dos ´,´ das ´,´ e ´);
var i: integer;
begin
    Result := Texto;

    if Texto = EmptyStr
    then exit;

    Result[1] := AnsiUpperCase(Result[1])[1];

    for i := 2 to Length(Result) do
        if Result[i-1] = ´ ´ then
            Result[i] := AnsiUpperCase(Result[i])[1]
        else
            Result[i] := AnsiLowerCase(Result[i])[1];

    for i := 0 to High(Excessao) do
        Result := StringReplace( Result,Excessao[i],Excessao[i],[rfReplaceAll,rfIgnoreCase] );

end;