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

(Resolvido) Organizar strings delphi


Kali

Pergunta

Olá amigos da Script brasil,

Eu estou desenvolvendo um aplicativo (jogo on-line) com uma forma de pagamento própria, enfim.

Consegui um website para verificar os tipos dos cartões (crédito/debito) .

Seguinte, o website disponibiliza o meio REQUEST : http://www.binlist.net/json/

Meu script está basicamente assim:

const

strWEB = 'http://www.binlist.net/json/'+ strCompletWebRequest.Text;

begin

end;

No caso ficando da seguinte forma:

http://www.binlist.net/json/548826

O website exibe o seguinte resultado:

{"bin":"548826","brand":"MASTERCARD","sub_brand":"","country_code":"BR","country_name":"Brazil","bank":"CAIXA ECONOMICA FEDERAL","card_type":"CREDIT","card_category":"STANDARD","latitude":"-10","longitude":"-55","query_time":"344.902µs"}

Queria exibir em um outro edit da seguinte forma:

CAIXA ECONOMICA FEDERAL | CREDIT MASTERCARD | BRAZIL

Como posso fazer isto ? Obrigado !! Preciso com urgencia !!!!

Editado por Kali
Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

OBS: os links não estão funcionando

"brand":"MASTERCARD"

"country_name":"Brazil"

"bank":"CAIXA ECONOMICA FEDERAL"

"card_type":"CREDIT"

voce pode usar essas palavras chaves para procurar as strings dentro de ( por exemplo ) um memo

{"bin":"548826","brand":"MASTERCARD","sub_brand":"","country_code":"BR","country_name":"Brazil","bank":"CAIXA ECONOMICA
FEDERAL","card_type":"CREDIT","card_category":"STANDARD","latitude":"-10","longitude":"-55","query_time":"344.902µs"}

exemplo

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var s, cartao, tipo, cidade, banco : string; i : integer;
begin

   s := Memo1.Lines.text;
   if pos('brand',s) > 0 then
    begin
       tipo := copy(s,pos('brand',s)+8,10);
       showmessage(tipo);
    end;

   if pos('country_name',s) > 0 then
    begin
       cidade := UpperCase(copy(s,pos('country_name',s)+15,6));
       showmessage(cidade);
    end;

   if pos('bank',s) > 0 then
    begin
       banco := UpperCase(copy(s,pos('bank',s)+7,25));
       showmessage(banco);
    end;

   if pos('card_type',s) > 0 then
    begin
       cartao:= UpperCase(copy(s,pos('card_type',s)+12,6));
       showmessage(cartao);
    end;

end;

end.

OBS: Faça as mudanças necessarias para o seu uso

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Aqui o link correto:

http://www.binlist.net/xml/406669

No caso (O final ali os 6 numeros depois do /xml/ seria os 6 primeiros números do cartão)

Eu queria colocar eles num edit é ir para WEB.

Achei essa forma mais simples, como ficaria??? abraços.

No website fica assim:

<Response>
<Bin>406669</Bin>
<Brand>VISA</Brand>
<SubBrand/>
<CountryCode>BR</CountryCode>
<CountryName>Brazil</CountryName>
<Bank>BANCO BRADESCO CARTOES, S.A.</Bank>
<CardType>CREDIT</CardType>
<CardCategory>INFINITE</CardCategory>
<Latitude>-10</Latitude>
<Longitude>-55</Longitude>
<QueryTime>323.243µs</QueryTime>
</Response>
Queria que no meu Edit2 Exibi-se o resultado da seguinte forma:
BANCO BRADESCO CARTOES, S.A. | CREDIT INFINITE | BRAZIL
Como faço isso? abraçossssss !!!
Editado por Kali
Link para o comentário
Compartilhar em outros sites

  • 0

jogue o conteudo da pagina em um memo

faça da mesma forma que te expliquei

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var s, cartao, tipo, cidade, banco : string; i : integer;
begin
   for i := 0 to Memo1.Lines.Count-1 do
   begin
      s := Memo1.Lines.Strings[i];

      if pos('Bank',s) > 0 then
         banco := UpperCase(copy(s,pos('Bank',s)+5,pos('</Bank',s)-7));

      if pos('CountryName',s) > 0 then
         cidade := UpperCase(copy(s,pos('CountryName',s)+12,pos('</CountryName',s)-14));

      if pos('CardCategory',s) > 0 then
         cartao:= UpperCase(copy(s,pos('CardCategory',s)+13,pos('</CardCategory',s)-15));

      if pos('CardType',s) > 0 then
         tipo:= UpperCase(copy(s,pos('CardType',s)+9,pos('</CardType',s)-11));

       edit2.Text := banco + '  |  ' + tipo + '  ' + cartao + '  |  ' + cidade;
   end;
end;

end.

resultado

BANCO BRADESCO CARTOES, S.A. | CREDIT INFINITE | BRAZIL

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Consegui seguir o exemplo, agora meu problema é o seguinte, eu quero verificar o banco emissor no caso, tenho o seguinte script na WEB:

 <?xml version="1.0" encoding="UTF-8" ?> 
- <Response>
  <Bin>376449</Bin> 
  <Brand>AMERICAN EXPRESS</Brand> 
  <SubBrand /> 
  <CountryCode>BR</CountryCode> 
  <CountryName>Brazil</CountryName> 
  <Bank>BANCO BRADESCO</Bank> 
  <CardType>CREDIT</CardType> 
  <CardCategory>PLATINUM</CardCategory> 
  <Latitude>-10</Latitude> 
  <Longitude>-55</Longitude> 
  <QueryTime>329.457µs</QueryTime> 
  </Response>

O script no delphi está da seguinte forma:

var s, cartao, tipo, cidade, banco, bandeira : string; i : integer;
begin
 for i := 0 to Memo1.Lines.Count-1 do
   begin
      s := Memo1.Lines.Strings[i];

      if pos('Brand',s) > 0 then
         bandeira := UpperCase(copy(s,pos('Brand',s)+13,pos('</Brand',s)-9));

      if pos('Bank',s) > 0 then
         banco := UpperCase(copy(s,pos('Bank',s)+5,pos('</Bank',s)-9));

      if pos('CountryName',s) > 0 then
         cidade := UpperCase(copy(s,pos('CountryName',s)+12,pos('</CountryName',s)-16));

      if pos('CardCategory',s) > 0 then
         cartao:= UpperCase(copy(s,pos('CardCategory',s)+13,pos('</CardCategory',s)-17));

      if pos('CardType',s) > 0 then
         tipo:= UpperCase(copy(s,pos('CardType',s)+9,pos('</CardType',s)-13));

       edit1.Text := banco + '  |  ' + tipo + '  ' + cartao + '  |  ' + cidade + ' | ' + bandeira;
   end;
end;

Resultado exibido no Edit1:

BANCO BRADESCO | CREDIT PLATINUM | BRAZIL | (Aqui no final não está vindo á função da minha Bandeira) que deveria ficar assim:

BANCO BRADESCO | CREDIT PLATINUM | BRAZIL | AMERICAN EXPRESS

Como faço ? e se possível poderia me explicar Os números nas funções +12,pos('</CountryName',s)-16

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0

<Brand>AMERICAN EXPRESS</Brand>
<SubBrand />

observe que existem 2 strings que contem a substring Brand

nesse caso voce deve usar um diferencial para que o valor correto seja pego

<Brand>AMERICAN EXPRESS</Brand>
<SubBrand />

então voce deve usar o Brand>

procedure TForm1.Button1Click(Sender: TObject);
var s, cartao, tipo, cidade, banco, bandeira : string; i : integer;
begin
   for i := 0 to Memo1.Lines.Count-1 do
   begin
      s := Memo1.Lines.Strings[i];

      if pos('Brand>',s) > 0 then
         bandeira := UpperCase(copy(s,pos('Brand',s)+6,pos('</Brand',s)-8));

      if pos('Bank',s) > 0 then
         banco := UpperCase(copy(s,pos('Bank',s)+5,pos('</Bank',s)-7));

      if pos('CountryName',s) > 0 then
         cidade := UpperCase(copy(s,pos('CountryName',s)+12,pos('</CountryName',s)-14));

      if pos('CardCategory',s) > 0 then
         cartao:= UpperCase(copy(s,pos('CardCategory',s)+13,pos('</CardCategory',s)-15));

      if pos('CardType',s) > 0 then
         tipo:= UpperCase(copy(s,pos('CardType',s)+9,pos('</CardType',s)-11));

       edit2.Text := banco + '  |  ' + tipo + '  ' + cartao + '  |  ' + cidade +
       '  |  ' + bandeira;
   end;
end;

poderia me explicar Os números nas funções +12,pos('</CountryName',s)-16 ???? faça a correção

cidade := UpperCase(copy(s,pos('CountryName',s)+12,pos('</CountryName',s)-14));

veja

<CountryName>Brazil</CountryName>

tem 12 caracteres ... depois disso vem a palavra Brazil

<CountryName>Brazil</CountryName>

tem 13 caracteres + 1 ... como quero pegar somente a palavra Brazil tenho que eliminar os caracteres que

estão depois da palavra Brazil

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Muito obrigado Jonathan.

Á parte de obter o código-fonte do XML na WEB fiz por Web Request é está pqp muito lindo, segue o script é ve se ficou bacana , rss.

Procedure WebRequestMethode;
var
  sString, sString2 : String;
begin
  with Form1 do
    begin
    sString := Edit1.Text;
    Edit2.Text := copy(sString,0,6);
    idHTTP1.Request.UserAgent := ('Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0');
    Memo1.Lines.Add(idHTTP1.Get('http://www.binlist.net/xml/' + Edit2.Text));
    Application.ProcessMessages;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  hID : Dword;
  uThread : Cardinal;
begin
  uThread := beginThread(nil,0,@WebRequestMethode,nil,0,hID);

O mesmo foi resolvido muito obrigado Jonathan, pode fechar aqui , aproveita e ve se o script que fiz ficou bacana , oakskoaska

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,3k
    • Posts
      652,3k
×
×
  • Criar Novo...