Você está na página 1de 3

function AbreviaNome(NomeInteiro: String): String; //Funo para abreviar nomes var Nomes : array[1..

20] of string; //Array para receber cada nome PAbrev : String; i, TotalLetras, TamNome, TotalNomes, LetraComPonto: Integer; begin TotalLetras := (Length(NomeInteiro)); TamNome := 25; //ATENO AQUI O LIMITADOR DE ESPAOS DOS NOMES NomeInteiro := NomeInteiro + #32; //Insere um espao para garantir que todas as letras sejam testadas i := Pos(#32, NomeInteiro); //Pega a posio do primeiro espao que ele achar if i > 0 then //Se a variavel achar algo sera maior que 0 begin TotalNomes := 0; while i > 0 do //Enquanto tiver joga nome por nome em cada posio do Arra y begin Inc(TotalNomes); //Incrementa o contador Nomes[TotalNomes] := Copy(NomeInteiro, 1, i - 1); //A variavel de Nomes recebe o primeiro nome da posio 1 do Array de quantidade i - 1 = nome sem es pao //===========================================Coloca em maiscula ou em minscula================================================= LetraComPonto := Pos('.', Nomes[TotalNomes]); //Procura por ponto em palavras abreviadas para no deixar em minscula a abrevio if (Length(Nomes[TotalNomes]) <= 3) and (Copy(Nomes[TotalNomes], 1 , 1) = 'D') and (LetraComPonto = 0) and (TotalNomes > 1) and (Nomes[TotalNomes] <> 'DR.') and (Nomes[TotalNomes] <> 'DRA.') then //Se o nome menor ou igual a 3 letras e a partir do segundo nome ou se as palavras DR. ou DRA. begin Nomes[TotalNomes] := LowerCase(Nomes[TotalNomes]); //Coloca a palavra em minuscula end else begin Nomes[TotalNomes] := UpperCase(Copy(Nomes[TotalNomes], 1, 1) ) + LowerCase(Copy(Nomes[TotalNomes], 2, Length(Nomes[TotalNomes]))); //A variav el de Nomes receber transformada em maiuscula a primeira letra de cada palavra end; //================================================================ =============================================================== Delete(NomeInteiro, 1, i); //Deleta o nome que foi lido i := Pos(#32, NomeInteiro); //Pega a posio do espao do sengundo nome end; for i := 1 to TotalNomes - 1 do //Esse for varre os nomes em procura d as palavras Doutor ou Doutora e abrevia begin if (Length(Nomes[i]) > 3) then //Contm mais de 3 letras? (ignorar d e, da, das, do, dos, etc.) begin if (Nomes[i]) = 'Doutor' then //Verifica se existe a palavra D outor nos nomes begin Nomes[i] := 'Dr.'; end; if (Nomes[i]) = 'Doutora' then //Verifica se existe a palavra Doutora nos nomes begin Nomes[i] := 'Dra.';

end; end; end; //Primeiro filtro de abreviao if (TotalNomes > 2) and (TotalLetras > TamNome) then //Verifica se t em 3 nomes e se ultrapassa o limite de caracteres begin if (TotalNomes < 4) then //Se tiver somente 3 nomes iniciar o FO R com 2 pois o 3 o ultimo nome no pode ser abreviado begin i := 2; end else begin i := 3; end; for i := i to TotalNomes - 1 do //Comea abreviar a partir da cond io acima begin if (Length(Nomes[i]) > 3) and (i > 1) and (Nomes[i] <> 'Dr.' ) and (Nomes[i] <> 'Dra.') and (Nomes[i+1] <> 'Dr.') and (Nomes[i+1] <> 'Dra.') and (Nomes[i-1] <> 'Dr.') and (Nomes[i-1] <> 'Dra.') then // Se tiver mais de 3 letras, comea a partir da 2 palavra, se no for a atual, proxima ou anterior begin Nomes[i] := Nomes[i][1] + '.'; //Pega apenas a primeira letra do nome e coloca um ponto aps end; end; end; for i := 1 to TotalNomes do PAbrev := PAbrev + Trim(Nomes[i]) + #32; //Ajunta cada nome com um espao entre eles PAbrev := Trim(PAbrev); //Trim tira o espao no final do nome comp leto PAbrev := PAbrev; //Variavel Abreviado recebe a sada final //Segundo filtro de abreviao, caso ainda esteja estourando o limite ai nda tenta abreviar mais if (Length(PAbrev) > TamNome) then //Verifica se continua estourando o limite aps a primeira abreviao begin for i := 2 to TotalNomes - 1 do //Comea abreviar a partir da cond io acima begin if (Length(Nomes[i]) > 3) and (i > 1) and (Nomes[i] <> 'Dr.' ) and (Nomes[i] <> 'Dra.') and (Nomes[i+1] <> 'Dr.') and (Nomes[i+1] <> 'Dra.') and (Nomes[i-1] <> 'Dr.') and (Nomes[i-1] <> 'Dra.') then // Se tiver mais de 3 letras, comea a partir da 2 palavra, se no for a atual, proxima ou anterior begin Nomes[i] := Nomes[i][1] + '.'; //Pega apenas a primeira letra do nome e coloca um ponto aps end; end; end; Abreviado := ''; //limpa a variavel de sada for i := 1 to TotalNomes do

Abreviado := Abreviado + Trim(Nomes[i]) + #32; //Ajunta cada nom e com um espao entre eles Abreviado := Trim(Abreviado); //Trim tira o espao no final do nom e completo Abreviado := Abreviado; //Variavel Abreviado recebe a sada final if (Length(Abreviado) > TamNome) then //Verifica se continua estoura ndo o limite aps a segunda abreviao begin MessageBox(frmCartoes.Handle, PAnsiChar(Format('%s', ['O nome '+ Nomeinteiro+' ainda est estourando o limite de caracteres'])), 'Ateno', mb_ok+mb_ic oninformation) end; end; end; function ValidarCEP(const CEP: string): string; //Funo para verificar o CEP var i: integer; begin CepValido := ''; for I := 1 to Length(CEP) do if CEP[I] in ['0'..'9'] then CepValido := CepValido + CEP[I]; if Length(CepValido) <> 8 then MessageBox(frmCartoes.Handle, PAnsiChar(Format('%s', ['O Cep de '+ErrCodig o+' '+ErrNome+' est errado!'])), 'Ateno', mb_ok+mb_iconinformation) else CepValido := Copy(CepValido, 1, 2) + '.' + Copy(CepValido, 3, 3) + '-' + C opy(CepValido, 6, 3); end;