macabro 0 Denunciar post Postado Dezembro 6, 2007 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
macabro 0 Denunciar post Postado Dezembro 6, 2007 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
macabro 0 Denunciar post Postado Dezembro 6, 2007 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