 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Sex Mar 12, 2010 2:04 pm Assunto: Tem como criar um função para separar endereço? |
|
|
Pessoal, estou precisando saber se tem como criar uma função para separar endereço
O endereço se encontra numa string, e pode estar assim
rua tal 500
rua tal, 500
rua tal tal 500
Ou seja com virgula, sem virgula, etc..
O mais proximo que eu consegui chegar foi assim
| Código: | function SeparaEndereco(const S: String; SubStr: String; Parte: Byte): String;
var
i: Byte;
j: Word;
Aux: String;
begin
Result := '';
Aux := S;
for i := 1 to Parte-1 do
begin
j := Pos(SubStr,Aux);
Aux := Copy(Aux,j+1,Length(Aux)-j);
end;
j := Pos(SubStr,Aux);
if J > 0 then
Result := Trim(Copy(Aux,1,J-1))
else
Result := Trim(Aux);
end; |
Usando assim
| Código: | CriaTag('xLgr',SeparaEndereco(esqueletoNF.fieldbyname('endereco').asstring,',',1)); // pegando a primeira posição antes da virgula
//ID E07 CAMPO nro
// _numero_endereco := SoNumero(SeparaEndereco(esqueletoNF.fieldbyname('endereco').asstring,' ',1));
CriaTag('nro',SeparaEndereco(esqueletoNF.fieldbyname('endereco').asstring,',',2)); |
Mais funciona apenas se estiver separado por virgula. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
| Voltar ao Topo |
|
 |
joemil Moderador

Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9100 Localização: Sinop-MT
|
Enviada: Sex Mar 12, 2010 3:11 pm Assunto: |
|
|
mas e se....
(sempre tem um "se")
como o texto nao é padronizado, vai ficar dificil mesmo separar. veja mais exemplos:
RUA TAL 52
RUA TAL, 52
RUA TAL N. 52
RUA TAL Nº 52
RUA TAL, N. 52
RUA TAL, Nº 52
RUA TAL 52 APTO 12
....
imagina qtas possibilidades?
se nenhum endereco tiver algo apos o numero, ja fica mais facil (no caso dos 6 primeiros exemplos acima).
basta vc percorrer o texto de tras pra frente, q qdo achar alguma coisa q nao e numero, vc para de percorrer e joga esse valor no campo determinado. mas somente nos 6 primeiros (mesmo q nao tenha espaco) _________________ <b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/ |
|
| Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Sex Mar 12, 2010 3:47 pm Assunto: |
|
|
| joemil escreveu: | mas e se....
(sempre tem um "se")
como o texto nao é padronizado, vai ficar dificil mesmo separar. veja mais exemplos:
RUA TAL 52
RUA TAL, 52
RUA TAL N. 52
RUA TAL Nº 52
RUA TAL, N. 52
RUA TAL, Nº 52
RUA TAL 52 APTO 12
....
imagina qtas possibilidades?
se nenhum endereco tiver algo apos o numero, ja fica mais facil (no caso dos 6 primeiros exemplos acima).
basta vc percorrer o texto de tras pra frente, q qdo achar alguma coisa q nao e numero, vc para de percorrer e joga esse valor no campo determinado. mas somente nos 6 primeiros (mesmo q nao tenha espaco) | Já imaginei sim, por isso não consegui achar se existe uma logica pra esta função amigo. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
| Voltar ao Topo |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Sex Mar 12, 2010 4:48 pm Assunto: |
|
|
procura primeiro caracter não numerico do ultimo para o primeiro.
achou?
dele pra frente, exceto ele, é o numero, o resto é o endereço. |
|
| Voltar ao Topo |
|
 |
pestana Colaborador

Registrado: Sábado, 25 de Junho de 2005 Mensagens: 3147 Localização: Araras-SP
|
Enviada: Sex Mar 12, 2010 6:45 pm Assunto: |
|
|
Adriano por padrão os números ficam por último ou não tem como saber?
Teste estes dois codigos abaixo e verifique se resolve:
| Código: | 1)
var
endereco, numero : string;
i : integer;
begin
endereco := Edit1.Text;
for i := Length(endereco) downto 0 do
if (endereco[i] in ['0'..'9']) then
numero := endereco[i] + numero;
ShowMessage(numero);
end;
2)
var
endereco, numero : string;
encontrou : boolean;
i : integer;
begin
endereco := Edit1.Text;
encontrou := true;
i := Length(endereco);
while (i >= 0) and encontrou do
begin
if (endereco[i] in ['0'..'9']) then
numero := endereco[i] + numero
else
encontrou := false;
dec(i)
end;
ShowMessage(numero);
end; |
A diferença é que a primeira percorre toda a string e a segunda percorre enquanto se encontra caracter numerico. _________________ Ao invés de ficar desanimado no que deu de errado, olhe para frente, aprenda com os erros e veja o que ainda pode ser feito. A determinação e a persistência é uma das etapas para o sucesso. |
|
| Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
| Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Sex Mar 12, 2010 7:01 pm Assunto: |
|
|
| pestana escreveu: | Adriano por padrão os números ficam por último ou não tem como saber?
Teste estes dois codigos abaixo e verifique se resolve:
| Código: | 1)
var
endereco, numero : string;
i : integer;
begin
endereco := Edit1.Text;
for i := Length(endereco) downto 0 do
if (endereco[i] in ['0'..'9']) then
numero := endereco[i] + numero;
ShowMessage(numero);
end;
2)
var
endereco, numero : string;
encontrou : boolean;
i : integer;
begin
endereco := Edit1.Text;
encontrou := true;
i := Length(endereco);
while (i >= 0) and encontrou do
begin
if (endereco[i] in ['0'..'9']) then
numero := endereco[i] + numero
else
encontrou := false;
dec(i)
end;
ShowMessage(numero);
end; |
A diferença é que a primeira percorre toda a string e a segunda percorre enquanto se encontra caracter numerico. | Olá Pestana, eu não fiz os testes, volto a postar pra ver se vai funcionar, mais creio que como disse antes:
| Citação: | Pensei nisso, mais tem um problema, existe também o complemento que vem depois do numero.
rua tal 5000 bloco 5 cj 12
o pior que assim fica dificil |
Não sei se vai dar certo amigo _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
| Voltar ao Topo |
|
 |
marcellomm Colaborador

Registrado: Segunda-Feira, 7 de Novembro de 2005 Mensagens: 1045
|
Enviada: Seg Mar 15, 2010 6:34 pm Assunto: |
|
|
| Se existe a possibilidade de saber qual(is) o(s) formato(s) que mais ocorre(m), aplique a função para esse(s) formatos. Deixando os de menor ocorrencia para serem feitos na unha. É claro, se não chegarem aos milhares ou dezenas de centenas... |
|
| Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
| Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qua Mar 17, 2010 8:43 am Assunto: |
|
|
Eu até fiz cfe o Pestana disse, mais ainda não esta de acordo com que eu preciso
| Código: | function SeparaEndereco(const S: String; SubStr: String; Parte: Byte): String;
var
i: Byte;
j: Word;
Aux: String;
begin
Result := '';
Aux := S;
for i := 1 to Parte-1 do
begin
j := Pos(SubStr,Aux);
Aux := Copy(Aux,j+1,Length(Aux)-j);
end;
j := Pos(SubStr,Aux);
if J > 0 then
Result := Trim(Copy(Aux,1,J-1))
else
Result := Trim(Aux);
end; |
| Código: |
function _Numeros_Endereco(_endereco: string): string;
var
_ender, _num : string;
_int : integer;
begin
_endereco := SeparaEndereco(_endereco,',',2); // Separa o endereço depois da virgula
_ender := _endereco; //variavel recebe o valor do parametro
for _int := Length(_ender) downto 0 do // Le de traz pra fente a string
if (_ender[_int] in ['0'..'9']) then // somente numeros
_num := _ender[_int] + _num;
Result := _num;
end; |
_________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|