Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Copiar textos entre cartacter


Gavoha

Pergunta

Senhores, tenho a seguinte string que recebo dentro de um TMemo

 

{"altitude":533.2,"bairro":null,"cep":"17290000","latitude":"-22.504198","longitude":"-48.71221","logradouro":"Macatuba","cidade":"Macatuba","ddd":14,"ibge":"3528007","estado":"SP"}


Preciso separar essa string em variáveis

sAltitude 
sBairro, 
sCEP, 
sLatitude, 
sLongitude, 
sLogradouro, 
sCidade, 
sDDD, 
sIBGE, 
sEstado

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0
altitude":533.2,"bairro":null,"cep":"17290000","latitude

voce tem como delimitadores o ( : ) dois pontos e a ( , ) virgula

use o comando POS do delphi ( veja no help F1 ) para procurar o ( : )  e limite a contagem na virgula

jogue o valor da linha do Memo em uma string 

extraia os caracteres da string ( use o comando COPY ) nesse intervalo e atribua o valor para as variaveis ( sAltitude , sBairro, sCEP, sLatitude, etc..) 

depois, delete a string ( use o comando DELETE ) nesse intervalo e repita a operação até o final

abraço

 

Link para o comentário
Compartilhar em outros sites

  • 0

Com base na minha pouca experiência eu fiz algo que resolveu:

 

mResultado.Text := StringReplace(mResultado.Text , '"','',[rfReplaceAll, rfIgnoreCase]);
mResultado.Text := StringReplace(mResultado.Text , '{','',[rfReplaceAll, rfIgnoreCase]);
mResultado.Text := StringReplace(mResultado.Text , '}','',[rfReplaceAll, rfIgnoreCase]);
mResultado.Text := StringReplace(mResultado.Text , ':',',',[rfReplaceAll, rfIgnoreCase]);

listCordenadas.Items.Clear;
listCordenadas.Items.Delimiter := ',';

listCordenadas.items.DelimitedText := mResultado.Text;

edAltitude.Text   := listCordenadas.items[1];
edBairro.Text     := listCordenadas.Items[3];
edCEP.Text        := listCordenadas.Items[5];
edLatitude.Text   := listCordenadas.Items[7];
edLongitude.Text  := listCordenadas.Items[9];

1-Removi os Caracteres Aspas, Chave Aberta, Chave Fechada e Dois pontos 

2- Coloquei a Virgula como Delimitador

3- Preenchi os Edits com as Linhas do ListBox

Havia maneira mais simples ou mais segura?

Link para o comentário
Compartilhar em outros sites

  • 0

ok... o que voce fez, foi apenas outra forma de obter o mesmo resultado

voce poderia ter feito assim tambem

procedure TForm1.Button1Click(Sender: TObject);
var S: string;
begin
  S := ' altitude":533.2,"bairro":null,"cep":"17290000","latitude;

  sAltitude := copy(s,Pos(':', S)+1,Pos(',', S)-1);
  delete(s,1,Pos(',', S));

  sBairro := copy(s,Pos(':', S)+1,Pos(',', S)-1);
  delete(s,1,Pos(',', S));

  // repetir para as demais variaveis

end;

OBS: a string S receberia a linha do Memo

 

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas, tive alguns problemas com essa forma que você postou:

Com o Texto:

{"altitude":760.0,"bairro":"Ipiranga","cep":"04209000","latitude":"-23.2971699728","longitude":"-46.3623848631","logradouro":"Rua do Manifesto, até 1089/1090","cidade":"São Paulo","ddd":11,"ibge":"3550308","estado":"SP"}

sAltitude ficou 760.0,"bairro":"I

sBairro ficou "Ipiranga","cep":"0

sCEP ficou "04209000","lati

sLatitude ficou "-23.2971699728","longitude

sLongitude ficou "-46.3623848631","logradouro

Link para o comentário
Compartilhar em outros sites

  • 0

era só fazer os ajustes

procedure TForm1.Button1Click(Sender: TObject);
var s : string; sAltitude, sBairro, sCEP, sLatitude,
sLongitude, sLogradouro, sCidade, sDDD, sIBGE, sEstado : string ;
begin
   s := '{"altitude":533.2,"bairro":null,"cep":"17290000","latitude":"-22.504198","longitude":"-48.71221","logradouro":"Macatuba","cidade":"Macatuba","ddd":14,"ibge":"3528007","estado":"SP"}';

   delete(s,1,Pos(':', S)-1);

   sAltitude := copy(s,Pos(':', S)+1,Pos(',', S)-1);
   delete(s,1,Pos(',', S));

   sBairro := copy(s,1,Pos(',', S)-1);
   delete(s,1,Pos(',', S));

   sCEP := copy(s,1,Pos(',', S)-1);
   delete(s,1,Pos(',', S));

   sLatitude := copy(s,1,Pos(',', S)-1);
   delete(s,1,Pos(',', S));

   sLongitude := copy(s,1,Pos(',', S)-1);
   delete(s,1,Pos(',', S));

   sLogradouro := copy(s,1,Pos(',', S)-1);
   delete(s,1,Pos(',', S));

   sCidade := copy(s,1,Pos(',', S)-1);
   delete(s,1,Pos(',', S));

   sDDD := copy(s,1,Pos(',', S)-1);
   delete(s,1,Pos(',', S));

   sIBGE := copy(s,1,Pos(',', S)-1);
   delete(s,1,Pos(',', S));
   delete(s,1,Pos(':', S));

   sEstado := copy(s,2,2);
   showmessage(sEstado);
end;

 

OBS: esse código ainda poderia ser mais curto ...é só observar e ver o que poderia ser melhorado

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...