O Oracle possui uma função chamada INSTR(), ela procura por ocorrências de uma determinada palavra dentro de outra, começando de uma determinada posição, e retorna o índice quando encontrado.
Ex.:SELECT INSTR('EDUARDO TEIXEIRA','ER', 1, 2) "Teste com INSTR"
FROM DUAL;
Teste com INSTR
----------
13
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; //incidências já encontradas
v_i : integer; //contador para loop
begin
//pego a primeira incidência do que é procurado
v_posi := PosEx(p_buscado, p_busca, p_inicio);
//
//se retornou alguma coisa continuo testando
if (v_posi 0) and (p_incidencia > 1) then
Teste com INSTR
----------
13
No exemplo acima a busca começa no primeiro caracter da frase 'EDUARDO TEIXEIRA' e procura pelo índice da segunda ocorrência da palavra 'ER', e o resultado foi a 13º posição.
Existe algo parecido no Delphi, é a função POEX, porém ela não trata ocorrências, trazendo sempre o índice da primeira encontrada, então ai vai uma função para o Delphi que faz o mesmo que o INSTR do Oracle:
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; //incidências já encontradas
v_i : integer; //contador para loop
begin
//pego a primeira incidência do que é procurado
v_posi := PosEx(p_buscado, p_busca, p_inicio);
//
//se retornou alguma coisa continuo testando
if (v_posi 0) and (p_incidencia > 1) then
begin
//ja pegou uma vez
v_inc := 1;
v_inc := 1;
//
//repito o teste até o final da palavra alvo
for v_i := v_posi to Length(p_busca) do
begin
//se eu encontrar agora partindo da posição encontrada anteriormente
//guardo a nova posição, se o limite de incidência não foi atingido
if (PosEx(p_buscado, p_busca, v_posi+1) 0) and (v_inc) then
begin
for v_i := v_posi to Length(p_busca) do
begin
//se eu encontrar agora partindo da posição encontrada anteriormente
//guardo a nova posição, se o limite de incidência não foi atingido
if (PosEx(p_buscado, p_busca, v_posi+1) 0) and (v_inc) then
begin
//guardo nova posição
v_posi := PosEx(p_buscado, p_busca, v_posi+1);
v_posi := PosEx(p_buscado, p_busca, v_posi+1);
//incremento incidência
v_inc := v_inc + 1;
end; //if (PosEx(p_buscado, p_busca, v_posi+1) 0) and (v_inc) then
v_inc := v_inc + 1;
end; //if (PosEx(p_buscado, p_busca, v_posi+1) 0) and (v_inc) then
end; //for v_i := v_posi to Length(p_busca) do
end; //if (v_posi 0) and (p_incidencia > 1) then
//
result := v_posi;
end;//function
end; //if (v_posi 0) and (p_incidencia > 1) then
//
result := v_posi;
end;//function
ola amigo muito obrigado pelo link mais não achei em seu blogger o seu banner de lime-ke se vco fizer depois me avise que trocaremos de boa por enquanto vou apenas colocar seu link em meu blogger valeu abraços continue sempre assim força na luta por destino na blogosfera.
ResponderExcluirOlá,
ResponderExcluirEstou divulgando um evento de tecnologia que o yahoo tem promovido chamado open hack day.
Os hacks são mashups, pequenas aplicacoes, que agrega/integra serviços, apis, códigos, de qualquer portal ou serviço da Internet.
E agora vamos fazer o primeiro BR Open Hack Day em novembro 8 e 9, no campus da Universidade Senac aqui em São Paulo. Local com grande estrutura para grandes eventos.
Estou escrevo então pra informar sobre esse evento, e pra pedir uma coisa:
Divulgar no blog e nas faculdades de seu relacionamento (mandamos posters, os releases, e alguns exemplares dos materiais individuais).
Peço então seu retorno, a respeito das questões acima.
Obrigado,
Abraço, Rodrigo.