Formatação para numero de telefone

SQL

Delphi

20/10/2017

Bom dia, Uso o Fast report para impressão de relatórios, mas preciso criar uma formatação para apresentação dos números de telefone, para que quando seja celular com 12 dígitos, ele formate (999)99999-9999 e quando seja telefone Fixo ou celular que ainda não tenha o 9, ele formate para 11 dígitos (999)9999-9999, fiz da seguinte maneira, mas apresenta "PARÂMETROS DEMAIS".

procedure Memo77OnBeforePrint(Sender: TfrxComponent);
var
FON : String;
begin
FON :=<aCliente."CL_FON1">;
case Length(FON) of
11 : Memo77.text :=Copy(FON,1,2,3)+'.'+Copy(FON,3,4,5,6)+ '-' +Copy(FON,7,8,9,10);
12 : Memo77.text :=Copy(FON,1,2,3)+'.'+Copy(FON,3,4,5,6,7)+ '-' +Copy(FON,8,9,10,11);
end;
end;
Caio Tiago

Caio Tiago

Curtidas 0

Melhor post

Natanael Ferreira

Natanael Ferreira

20/10/2017

Creio que esteja incorreta a sintaxe da função "Copy".
Sintaxe:
function copy (Source : string; StartChar, Count : Integer ) : string;


Primeiro parâmetro é a string original (source);
Segundo parâmetro é o primeiro caracter que será copiado (startchar);
Terceiro parâmetro é a quantidade de caracteres que serão copiados (count);

Teste seu código assim:
procedure Memo77OnBeforePrint(Sender: TfrxComponent);
var
  FON: String;
begin
  FON := <aCliente."CL_FON1">;
  case Length(FON) of
    11:
      Memo77.text := Copy(FON, 1, 3) + '.' + Copy(FON, 4, 4) + '-' + Copy(FON, 8, 4);
    12:
      Memo77.text := Copy(FON, 1, 3) + '.' + Copy(FON, 4, 4) + '-' + Copy(FON, 8, 5);
  end;
end;
GOSTEI 1

Mais Respostas

Caio Tiago

Caio Tiago

20/10/2017

Bom dia, Uso o Fast report para impressão de relatórios, mas preciso criar uma formatação para apresentação dos números de telefone, para que quando seja celular com 12 dígitos, ele formate (999)99999-9999 e quando seja telefone Fixo ou celular que ainda não tenha o 9, ele formate para 11 dígitos (999)9999-9999, fiz da seguinte maneira, mas apresenta "PARÂMETROS DEMAIS".

procedure Memo77OnBeforePrint(Sender: TfrxComponent);
var
FON : String;
begin
FON :=<aCliente."CL_FON1">;
case Length(FON) of
11 : Memo77.text :=Copy(FON,1,2,3)+'.'+Copy(FON,4,5,6,7)+ '-' +Copy(FON,8,9,10,11);
12 : Memo77.text :=Copy(FON,1,2,3)+'.'+Copy(FON,4,5,6,7)+ '-' +Copy(FON,8,9,10,11,12);
end;
end;


Corrijindo as partes.
11 : Memo77.text :=Copy(FON,1,2,3)+'.'+Copy(FON,4,5,6,7)+ '-' +Copy(FON,8,9,10,11);
12 : Memo77.text :=Copy(FON,1,2,3)+'.'+Copy(FON,4,5,6,7)+ '-' +Copy(FON,8,9,10,11,12);
GOSTEI 0
Caio Tiago

Caio Tiago

20/10/2017

Acredito que tenha localizado o erro, colocando dessa forma saindo de manira correta, mas caso tenham alguma informação por favor me fala.

procedure Memo77OnBeforePrint(Sender: TfrxComponent);
var
FON : String;
begin
FON := <aCliente."CL_FON1">;
case Length(FON) of
11: Memo77.text :='('+Copy(FON,1,3)+')'+Copy(FON,4,4)+ '-' +Copy(FON,8,4);
12: Memo77.text :='('+Copy(FON,1,3)+')'+Copy(FON,4,5)+ '-' +Copy(FON,9,4);
end;
end;
GOSTEI 0
Caio Tiago

Caio Tiago

20/10/2017

Creio que esteja incorreta a sintaxe da função "Copy".
Sintaxe:
function copy (Source : string; StartChar, Count : Integer ) : string;


Primeiro parâmetro é a string original (source);
Segundo parâmetro é o primeiro caracter que será copiado (startchar);
Terceiro parâmetro é a quantidade de caracteres que serão copiados (count);

Teste seu código assim:
procedure Memo77OnBeforePrint(Sender: TfrxComponent);
var
  FON: String;
begin
  FON := <aCliente."CL_FON1">;
  case Length(FON) of
    11:
      Memo77.text := Copy(FON, 1, 3) + '.' + Copy(FON, 4, 4) + '-' + Copy(FON, 8, 4);
    12:
      Memo77.text := Copy(FON, 1, 3) + '.' + Copy(FON, 4, 4) + '-' + Copy(FON, 8, 5);
  end;
end;


Exatamente, havia informado de maneira incorreta, quando coloquei assim deu certo...
Obrigado

referente ao com 12 acredito que a melhor maneira seja:
12: Memo77.text :='('+Copy(FON,1,3)+')'+Copy(FON,4,5)+ '-' +Copy(FON,9,4);
GOSTEI 0
Natanael Ferreira

Natanael Ferreira

20/10/2017

Isso mesmo, Caio.

Que bom que funcionou.

Abraço.
GOSTEI 1
POSTAR