Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

macabro

[Resolvido] instr do oracle no delphi ?

Recommended Posts

Olá amigos, alguém sabe me dizer se existe para o delphi alguma função igual a função INSTR do oracle?

 

Ela funciona da seguinte maneira:

 

SELECT INSTR('CORPORATE FLOOR','OR', 3, 2)

"Instring" FROM DUAL;

 

Instring

----------

14

 

Ela procura em 'CORPORATE FLOOR' pela segunda ocorrência da string 'OR' começando do terceiro caracter, quando encontra devolve a posição.

 

Se alguém souber agradeço...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Senhores, estou enganado ou isso resolve? Me corrijam se eu estiver errado:

 

function INSTR_Delphi(p_busca: string; p_buscado: string; p_inicio: integer; p_incidencia: integer): integer;

var

v_posi : integer; //guarda última posição encontrada

v_i : integer; //contador para loop

 

begin

v_posi := PosEx(p_buscado, p_busca, p_inicio); //pego a primeira incidencia do que é procurado

 

if v_posi <> 0 then //se retornou alguma coisa continuo testando

begin

for v_i := 0 to Length(p_busca) do //repito o teste até o final da palavra alvo

begin

if PosEx(p_buscado, p_busca, v_posi) <> 0 then //se eu encontrar agora partindo da posição encontrada anteriormente guardo a nova posição

v_posi := PosEx(p_buscado, p_busca, v_posi);

 

end;

end;

result := v_posi;

 

end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa pessoal estava errado, mas agora está ok:

 

function INSTR_Delphi(p_busca: string; p_buscado: string; p_inicio: integer; p_incidencia: integer): integer;

var

v_posi : integer; //guarda última posição encontrada

v_inc : integer; //incidencias ja encontradas

v_i : integer; //contador para loop

 

begin

v_posi := PosEx(p_buscado, p_busca, p_inicio); //pego a primeira incidencia do que é procurado

 

if (v_posi <> 0) and (p_incidencia > 1) then //se retornou alguma coisa continuo testando

begin

v_inc := 1; //ja pegou uma vez

for v_i := v_posi to Length(p_busca) do //repito o teste até o final da palavra alvo

begin

if (PosEx(p_buscado, p_busca, v_posi+1) <> 0) and (v_inc < p_incidencia) then //se eu encontrar agora partindo da posição encontrada anteriormente guardo a nova posição se o limite de incidencia não foi atingido

begin

v_posi := PosEx(p_buscado, p_busca, v_posi+1); //guardo nova posição

v_inc := v_inc + 1; //incremento incidencia

end;

 

end;

end;

 

result := v_posi;

 

end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.