Deletar tudo depois da quot;/quot;

Delphi

05/09/2006

Estou desenvolvendo uma aplicação com Socket.. onde o cliente vai digitar o endereço em um Edit ..

o edit só vai aceitar endereço dessa maneira >

www.host.com.br

agora se o cliente digitar

www.host.com.br/intranet

eu queria que deletar tudo depois da barra ´/´

dai ia ficar

www.host.com.br

se alguem puder ajudar...


Delphitotal

Delphitotal

Curtidas 0

Respostas

Raserafim

Raserafim

05/09/2006

aí vai uma sugestão. provavelmente deve haver uma outra bem mais simples, mas...

var
  Texto_Orig, Texto_Dest: String;
  S: Smallint;
begin
  Texto_Orig := ´www.host.com.br/intranet´;
  for S := 0 to Length(Texto_Orig) - 1 do
  begin
    if Texto_Orig[S] <> ´/´ then
    begin
      SetLength(Texto_Dest, Length(Texto_Dest) + 1);
      Texto_Dest[S] := Texto_Orig[S];
    end
    else
      Break;
  end;

  ShowMessage(Texto_Dest);
end;



GOSTEI 0
Massuda

Massuda

05/09/2006

Você pode fazer assim...
var
  N: Integer;
  S: string;
...
  S := ´www.seusite.com.br/algumacoisa´;
  N := Pos(´/´, S);
  if N > 0 then begin
    Delete(S, N, MaxInt);
  end;
...
...mas note que isso não funciona ´certo´ no caso de ´http://www.seusite.com.br/algumacoisa´.


GOSTEI 0
Marco Salles

Marco Salles

05/09/2006

delphi 7.0 , fu~ção PosAx unit StrUtils;

mas note que isso não funciona ´certo´ no caso de ´http://www.seusite.com.br/algumacoisa´.


N: Integer;
  S: string;
begin
  S := ´http://www.seusite.com.br/algumacoisa´;
  N := Pos(´//´,S);
  N:=posEx(´/´,S,N+2);
  if N > 0 then begin
    Delete(S,N, MaxInt);
  end;



GOSTEI 0
Delphitotal

Delphitotal

05/09/2006

consegui isso no Edit ..
mais me deparei com outra coisa.. tirar a mesma coisa mais de todos os hosts de uma listbox..

tpo >

www.empresa.com/cliente1
www.empresa.com/cliente2
www.empresa.com/cliente3
www.empresa.com/cliente4
www.empresa.com/cliente5

etc..

dai ele remove tudo depois da / no ListBox .. dai ficaria >

www.empresa.com/
www.empresa.com/
www.empresa.com/
www.empresa.com/
www.empresa.com/


GOSTEI 0
Marco Salles

Marco Salles

05/09/2006

é so percorrer a lista

procedure TForm1.Button1Click(Sender: TObject);
var
  N,i: Integer;
  S: string;
begin
for i:=0 to listbox1.Count - 1 do
  begin
     s:=ListBox1.Items.Strings[i];
     N := Pos(´/´, S);
     if N > 0 then
      begin
       Delete(S,N+1, MaxInt);
       ListBox1.Items.Strings[i]:=S;
      end;
  end;
end;



GOSTEI 0
Delphitotal

Delphitotal

05/09/2006

vlw!! ficou ótimo ..

mais só que eu queria tudo depois da ultima / ..

o código que fizeram remove geral .. exemplo:

www.empresa.com.br/~ddbrasil/brasil/index.php

dai com o código de vcs fica >

www.empresa.com.br

eu to querendo que ele remova tudo só da última barra ..

exemplo:

www.empresa.com.br/~ddbrasil/brasil/index.php

ficaria:

www.empresa.com.br/~ddbrasil/brasil/


GOSTEI 0
Marco Salles

Marco Salles

05/09/2006

ai vai ter que usar o posEx como eu tinha dito anteriormente

Unit : StrUtils;

var
N,i: Integer;
S: string;
begin
for i:=0 to listbox1.Count - 1 do
  begin
     s:=ListBox1.Items.Strings[i];
     N := Pos(´/´,S);
     N:=posEx(´/´,S,N+1);
     if N > 0 then
       begin
        Delete(S,N+1, MaxInt);
        ListBox1.Items.Strings[i]:=S;
       end;
  end;
end;



GOSTEI 0
Raserafim

Raserafim

05/09/2006

testado e aprovado! :)

...
var
  Texto_Orig, Texto_Dest: String;
  S: Smallint;
begin
  Texto_Orig := ´www.host.com.br/intranet/downloads/index.html´;
  for S := Length(Texto_Orig) - 1 downto 0 do
  begin
    if Texto_Orig[S] = ´/´ then
    begin
      Texto_Dest := Copy(Texto_Orig, 0, S);
      Break;
    end
  end;

  ShowMessage(Texto_Dest);
end;



GOSTEI 0
Delphitotal

Delphitotal

05/09/2006

Oi ..
Estou com outro problema ..
andei utilizando por algum tempo esses códigos que me ajudaram muito aqui no trampo ...

Estou precisando de outra ajuda ..
o código que me passaram remove de boa depois da ultima barra..

exemplo:

www.empresa.com.br/~ddbrasil/brasil/index.php

dai o código remove tudo depois da ultima barra ai fica:

www.empresa.com.br/~ddbrasil/brasil/

Certo ai tudo bem ..
mais só que por exemplo ..

vamos supor que na lista tem

www.empresa.com.br/~ddbrasil/brasil/index.php
www.empresa.com.br/index.php
www.empresa.com/intranet/dados.jsp

passando o código ficaria:

www.empresa.com.br/~ddbrasil/brasil/
www.empresa.com.br/index.php
www.empresa.com/intranet/

ou seja no segundo link:
www.empresa.com.br/index.php

o index.php não foi removido porque será? sendo que remove tudo depois da ultima / ..

era pra ficar

www.empresa.com.br/~ddbrasil/brasil/
www.empresa.com.br/
www.empresa.com/intranet/

alguém pode ajudar?


GOSTEI 0
Marco Salles

Marco Salles

05/09/2006

teste ai:

var
Np,N,i: Integer;
S: string;
begin
for i:=0 to listbox1.Count - 1 do
  begin
     s:=ListBox1.Items.Strings[i];
     N := Pos(´/´,S);
     while N > 0 DO
      begin
        NP:=N;
        N:=posEx(´/´,S,N+1);
      end;
          Delete(S,NP+1, MaxInt);
        ListBox1.Items.Strings[i]:=S;
  end;



GOSTEI 0
Delphitotal

Delphitotal

05/09/2006

Marco Salles,

Vlw! realmente era isso que eu precisava ..
Obrigado..


GOSTEI 0
Delphitotal

Delphitotal

05/09/2006

Marco Salles,

Outro probleminha ... :cry:

Estou utilizando esse código em um software de bloqueio que desenvolvi .. onde a pessoa coloca o dominio que vai ser bloqueado ou o subdir que vai ser bloqueado etc..

Páginas com o endereço assim:

www.site.com.br/intranet.php?inc=operador/

passando o código teria que ficar

www.site.com.br/

outras assim

www.site.com.br/produtos.php?categoria=productos/sp/fornece/

Passando o código teria que ficar:

www.site.com.br/

acho que filtrando isso o código estaria 100¬ perfeito (completo)


GOSTEI 0
Marco Salles

Marco Salles

05/09/2006

Fiz rápido aqui.. De uma conferida ai :

procedure TForm1.Button1Click(Sender: TObject); var Np,N,i: Integer; S: string; begin for i:=0 to listbox1.Count - 1 do begin s:=ListBox1.Items.Strings[i]; if S[Length(S)-1] = ´/´ then ListBox1.Items.Strings[i]:=copy(S,1,pos(´/´,S)) else begin N := Pos(´/´,S); while N > 0 DO begin NP:=N; N:=posEx(´/´,S,N+1); end; Delete(S,NP+1, MaxInt); ListBox1.Items.Strings[i]:=S; end; end; end;



GOSTEI 0
Delphitotal

Delphitotal

05/09/2006

Marco Salles,

Funcionou perfeito mais não filtra quando o site é assim:

http://www.site.com.br/index.php?pagina=3512-software/plugin/
http://www.site.com.br/index.php?pagina=destaques/
http://www.site.com.br/index.php?pagina=conteudo/


GOSTEI 0
Marco Salles

Marco Salles

05/09/2006

Marco Salles, Funcionou perfeito mais não filtra quando o site é assim: http://www.site.com.br/index.php?pagina=3512-software/plugin/[b:10bf699395] [/b:10bf699395] http://www.site.com.br/index.php?pagina=destaques/[b:10bf699395] [/b:10bf699395] http://www.site.com.br/index.php?pagina=conteudo/


eu acho que é porque nessas strings , tem espaços vazios no fim;
alem disso apareceu um novo diferencial a sequencia de strings
http://

então devemos mudar um pouco o codigo e tb a logica

1)eliminar espaços vazios 2)retirar o ´/´ no Fim 3)e por fim Filtrar


var
Np,N,i: Integer;
S: string;
begin
  for i:=0 to listbox1.Count - 1 do
    begin
      s:=ListBox1.Items.Strings[i];
      Np:=Length(S);
      //retira espaços vazios no Fim
     //ps não confunda while S[Np]=´ ´ do com while S[Np]=´´ do
      while S[Np]=´ ´ do
            Np:=Np-1;
      s:=copy(s,1,Np);
     //elimina o ´/´ no Fim da String se Houver
        if S[Np] = ´/´ then
           Delete(S,Np,1);
    //efetua o Filtro normalmente...
        N := Pos(´/´,S);
        while N > 0 DO
          begin
            NP:=N;
            N:=posEx(´/´,S,N+1);
            end;
      Delete(S,NP+1, MaxInt);
      ListBox1.Items.Strings[i]:=S;
    end;



GOSTEI 0
Delphitotal

Delphitotal

05/09/2006

Marco Salles, muito obrigado agora o programinha ta funcionando a 100¬

Vlw ! :D


GOSTEI 0
Marco Salles

Marco Salles

05/09/2006

atê o próximo ajuste no codigo... :lol: :lol: :lol:


GOSTEI 0
Delphitotal

Delphitotal

05/09/2006

Marco Salles, muito Obrigado pela sua ajuda! já me salvou varias vezes!!!

Preciso da sua ajuda novamente pra ajuste no código do meu programinha de bloqueios.

Séria assim o que eu gostaria de fazer

Um listbox recebe:

www.uol.com.br/batepapo/
www.terra.com.br/batepapo/
www.br.inter.net/batepapo/
www.outrosite.com/chat/
www.outrosite.com/pastaqualquer/

eu queria copiar todos os dominios pra um listbox ficando:

www.uol.com.br
www.terra.com.br
www.br.inter.net
www.outrositequalquer.com
www.outrositequalquer.com

e queria copiar todas as subpastas pra outro listbox ficando:

/batepapo/
/batepapo/
/batepapo/
/chat/
/pastaqualquer/

Tentei fazer aqui mais desisti !

Agradeço desde já!

Obrigado.


GOSTEI 0
Marco Salles

Marco Salles

05/09/2006

mas como é que o codigo vai conseguir diferenciar

[u:c408720e41]situação anterior[/u:c408720e41]

Páginas com o endereço assim: www.site.com.br/intranet.php?inc=operador/ passando o código teria que ficar www.site.com.br/


de situaçãoe assim :


www.uol.com.br/batepapo/ Séria assim o que eu gostaria de fazer www.uol.com.br


qual o filtro que o codigo deva entender que deve deletar tudo depois do \
ou deletar o Proprio \... Quero dizer que deve ter um diferença lógica
nessas duas situações acima... Pq se passar o codigo em
[u:c408720e41][b:c408720e41]www.uol.com.br/batepapo/ [/b:c408720e41][/u:c408720e41] do jeito que o codigo propõem é claro que
o resultado ficará assim : [u:c408720e41][b:c408720e41]www.uol.com.br/[/b:c408720e41][/u:c408720e41]


GOSTEI 0
Delphitotal

Delphitotal

05/09/2006

Marco Salles você não entendeu ...

Estou falando de outro filtro, o filtro anterior está perfeito já estou usando a muito tempo!

O Software que criei manda a requisição e analisa o cabeçalho pra vêr se vai poder bloquear ou não. tipo um proxy entende?

não posso iniciar uma conexão pelo socket assim:

ClientSocket.Host := ´www.uol.com.br/batepapo/´;

vai dar erro

por isso tentei fazer o filtro pra mover a subpasta pra um ListBox e o host pra outro... assim eu poderia fazer algo como :

Dominio := ListBox1.Items.String[0];
Subpasta := ListBox2.Items.String[0];

Assim eu poderia trabalhar com a requisição!

séria mais ou menos isso que queria fazer.


GOSTEI 0
Warfighter

Warfighter

05/09/2006

Como faço para usar isso em vez de um Listbox ser um Memo1 ?

[b:d88eda630c]procedure TForm1.Button1Click(Sender: TObject);
var
Np,N,i: Integer;
S: string;
begin
for i:=0 to listbox1.Count - 1 do
begin
s:=ListBox1.Items.Strings[i];
if S[Length(S)-1] = ´/´ then
ListBox1.Items.Strings[i]:=copy(S,1,pos(´/´,S))
else
begin
N := Pos(´/´,S);
while N > 0 DO
begin
NP:=N;
N:=posEx(´/´,S,N+1);
end;
Delete(S,NP+1, MaxInt);
ListBox1.Items.Strings[i]:=S;
end;
end;
end;[/b:d88eda630c]


GOSTEI 0
Marco Salles

Marco Salles

05/09/2006

Como faço para [b:b1970fd95c]usar isso [/b:b1970fd95c]em vez de um Listbox ser um Memo1 ?


afinal o que voce quer ??? São tantos os codigos nesse post é melhor voce afinar aquilo que voce pretende...


GOSTEI 0
Warfighter

Warfighter

05/09/2006

[quote:e3295fa2ec=´Marco Salles´]
Como faço para [b:e3295fa2ec]usar isso [/b:e3295fa2ec]em vez de um Listbox ser um Memo1 ?


afinal o que voce quer ??? São tantos os codigos nesse post é melhor voce afinar aquilo que voce pretende...[/quote:e3295fa2ec]

Esse código ae em baixo quero usalo em um memo por exemplo seria assim ex: [b:e3295fa2ec]for i:=0 to memo1.Count - 1 do [/b:e3295fa2ec] , s:=memo1.lines.Items.Strings[i]; ?

Flw

é pq o conteudo que quero pegar vem de um memo1 e não do listbox a não ser que possa converter do memo1 para o listbox



procedure TForm1.Button1Click(Sender: TObject); var Np,N,i: Integer; S: string; begin for i:=0 to listbox1.Count - 1 do begin s:=ListBox1.Items.Strings[i]; if S[Length(S)-1] = ´/´ then ListBox1.Items.Strings[i]:=copy(S,1,pos(´/´,S)) else begin N := Pos(´/´,S); while N > 0 DO begin NP:=N; N:=posEx(´/´,S,N+1); end; Delete(S,NP+1, MaxInt); ListBox1.Items.Strings[i]:=S; end; end; end;



GOSTEI 0
Warfighter

Warfighter

05/09/2006

Como faiz para pegar algo que esteja no meio por exemplo

http:\\[b:8118748c8f]www.site.com.br\[/b:8118748c8f]index.php

como faiz ?


GOSTEI 0
Marco Salles

Marco Salles

05/09/2006

Como faiz para pegar algo que esteja no meio por exemplo http:\\[b:92b37239d5]www.site.com.br\[/b:92b37239d5]index.php como faiz ?


subtende-se que o que voce quer é o que esta em [b:92b37239d5]negrito[/b:92b37239d5]

para o seu caso especifico , é assim :

var
s:String;
posi,posf:integer;
begin
 s:=´http:\\www.site.com.br\index.php´;
 posi:=pos(´\\´,s);
 posf:=PosEx(´\´,s,posi+2);
 showmessage(copy(s,posi+2,posf-posi-1));



GOSTEI 0
Warfighter

Warfighter

05/09/2006

Muito Obrigado pela sua Ajuda :wink:

Funciono perfeitamente :D

[quote:2b48f180a9=´Marco Salles´]
Como faiz para pegar algo que esteja no meio por exemplo http:\\[b:2b48f180a9]www.site.com.br\[/b:2b48f180a9]index.php como faiz ?


subtende-se que o que voce quer é o que esta em [b:2b48f180a9]negrito[/b:2b48f180a9]

para o seu caso especifico , é assim :

var
s:String;
posi,posf:integer;
begin
 s:=´http:\\www.site.com.br\index.php´;
 posi:=pos(´\\´,s);
 posf:=PosEx(´\´,s,posi+2);
 showmessage(copy(s,posi+2,posf-posi-1));
[/quote:2b48f180a9]


GOSTEI 0
Psycho

Psycho

05/09/2006

Eu não testei ainda mais como ficaria para remover
o que vem antes do ( / )

www.site.com/pagina

deichando:

pagina

eu já fis isso uma vez, + usei uma função diferente

T+ :shock:


GOSTEI 0
Marco Salles

Marco Salles

05/09/2006

é poderia tb ser feito assim

var
s:string;
posIni:integer;
begin
  s:=´www.site.com/pagina´;
  posini:=Pos(´/´,s);
  showmessage(copy(s,posIni+1,length(s)-Posini));
end;



GOSTEI 0
POSTAR