Pular para o conteúdo principal

Função INSTR do Oracle no Delphi

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

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; 
//
//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
//guardo nova posição
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
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

Comentários

  1. 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.

    ResponderExcluir
  2. Olá,

    Estou 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.

    ResponderExcluir

Postar um comentário

Obrigado por Participar do programero, fique a vontade para agradecer, retificar, perguntar ou sugerir.

Mais visitadas

Alterar cores do PageControl (Delphi)

O padrão Windows todo cinza não é muito atraente, por isso quando nos utilizarmos do PageControl podemos alterar suas cores e fontes da seguinte maneira: Em primeiro lugar devemos alterar a propriedade OwnerDraw para TRUE ; Depois implementar seu método DrawTab da seguinte maneira: //pinta a fonte Control.Canvas.Font.Color:=clBlack; // // pinta a paleta / aba Control.Canvas.brush.Color:=clSkyBlue; PageControl1.Canvas.Rectangle(Rect); Control.Canvas.TextOut(Rect.left+5,Rect.top+3,PageControl1.Pages[tabindex].Caption); // pinta a parte interna (tabsheet) PageControl1.Pages[TabIndex].brush.Color := Control.Canvas.brush.Color; PageControl1.Pages[TabIndex].Repaint; Caso a intenção seja manter cada aba com seu próprio estilo basta adicionar um CASE filtrando o índice das abas: case TabIndex of   0: Control.Canvas.Font.Color:=clBlack;   1: Control.Canvas.Font.Color:=clWindow; ...

Como pegar valor de coluna invisível do GridView

Em determinado momento nos deparamos com a seguinte situação, nossa tabela do banco de dados possui como campo chave, um ID por exemplo, incrementado por uma rotina da aplicação, do banco ou algum outro mecanismo de incremento (sequences, increment, etc), logo não há porque mostrar essa coluna para o usuário porque o mesmo não sabe de sua existência, e seu valor não tem qualquer relevância para ele, sendo assim o mais lógico a se fazer é não mostra-lá na aplicação. Seu valor é necessário já que por se tratar de uma chave primária precisaremos dela para atualizar, inserir ou excluir os dados, então o que fazer? A resposta seria simples, deixemos ele invisível, buscaremos seu valor e o usuário não perceberá, porém a partir da versão 2005 do visual Studio as colunas setadas com "visible = false" não são renderizadas, com isso ao se tentar acessar seu valor o que recebemos é nada. Para contornarmos essa situação podemos codificar o seguinte: protected void GridView1_R...

Aplicação Flask usando Nginx e Gunicorn

Aplicação Flask usando Nginx e Gunicorn Se você já desenvolveu uma aplicação Flask básica, sabe que o servidor de desenvolvimento embutido não é ideal para produção. Ele não é projetado para lidar com altos volumes de tráfego ou conexões simultâneas. Para tornar sua aplicação Flask mais robusta e pronta para produção, podemos usar o Gunicorn como servidor de aplicação e o Nginx como proxy reverso. Neste artigo, vamos adaptar o exemplo anterior ( Criando uma Aplicação CRUD com Flask, PostgreSQL e Docker ) para incluir o Nginx e o Gunicorn. O que são Nginx e Gunicorn? Gunicorn O Gunicorn (Green Unicorn) é um servidor de aplicação WSGI que roda aplicações Python como o Flask. Ele é eficiente e simples de configurar, lidando com múltiplas requisições ao mesmo tempo, algo que o servidor embutido do Flask não faz bem. Nginx O Nginx é um servidor web que atua como um proxy reverso. Ele recebe requisições HTTP e as encaminha ao Gunicorn. Além disso, o Nginx pode: Servir arquivos ...