Ir para conteúdo

POWERED BY:

Arquivado

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

gmrcosta

Achar uma sequência de números em um campo texto

Recommended Posts

Pessoal, vê se vcs podem me ajudar ?

 

Eu tenho um campo texto (texto livre), onde eu preciso achar as sequências númericas dentro deste texto,sendo que as sequências númericas podem aparecer mais de uma vez.

 

A única informação que eu tenho é que o esta sequência tem um tamanho fixo de 9 caracteres.

 

Segue exemplo do texto:

 

"Listagem de números considerados 145695698 e 001122579, sendo texto de exemplo."

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro amigo, o que postei abaixo fiz pensando num banco de dados sqlserver onde pelo que entendi voce tem um campo texto que contem por exemplo um texto com alguns números de notas fiscais ou alguma informação do tipo que você sabe o tamanho do grupo de números.

 

baseado nisso criei uma função que pode te auxiliar onde deixei flexivel pra você informar a quantidade de caracteres(no seu caso 9 ) que voce quer obter da sequencia de caracteres.

 

Mais um detalhe é que estou retornando uma string, separada por espaços, com esses valores númericos contidos na sequencia...onde caso voce precise pode alterar a função pra retonar por exemplo uma variavel tipo table.

 

CREATE FUNCTION dbo.fctRetornaSequenciaDeNumeros
(
	@sequencia 	varchar(4000),
	@qtdcaracteres 	int
)

returns varchar(4000)

as

begin

declare @Contador 	int,
	@LinhaAtual 	int,
	@Posicao	int,
	@RetornoTemp	varchar(4000)

set @Contador = 1
set @RetornoTemp = ''

while @Contador < LEN(@sequencia)
	begin
		if ascii(substring(@sequencia,@Contador,1)) between 48 and 57
			begin
				Set @RetornoTemp = @RetornoTemp + ' ' + substring(@sequencia, @Contador,@qtdcaracteres)
				SET @Contador = @Contador + (@qtdcaracteres)
			end
		else
			begin
				SET @Contador = @Contador + 1
			end
	end

RETURN RTRIM(LTRIM(@RetornoTemp))

end

Testei utilizando o código:

 

DECLARE @TEXTO VARCHAR(4000)

SET @TEXTO = 'AEF123456789FHDKLSNCL000000009ASFDAONABCDEF123456789FHDKLSNCL000000009ASNFDABCDEF123456789FHDKLSNCL000321009ASBCDEF123456789FLSNCL122000009ASDFN'

select dbo.fctRetornaSequenciaDeNumeros(@TEXTO, 9)

Onde a saida dessa execução é: 123456789 000000009 123456789 000000009 123456789 000321009 123456789 122000009

 

O único detalhe é que não fiz uma consistencia se apos o primeiro caracter númerico, os demais 8, da sequencia, não são número eu não estou validando...eu apenas valido se o primeiro digito da sequencia de X é número para eu poder pegar os demais caracteres solicitado no parametro.

 

Quaquer dúvida to ae.

 

Abs.,

 

Jorge Santos

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode usar essa funcaun para determina se ou não uma variante é numérica e convertível para um sub-tipo double

 

boolean = IsNaN(variant)

 

exemplo:

 

if IsNaN(12.34) then
 response.write "not a number" 
else 
response.write "number"

code:

 

<%
function IsNaN(byval n)
	dim d

	on error resume next
	if not isnumeric(n) then
		IsNan = true
		Exit Function
	end if
	d = cdbl(n)
	if err.number <> 0 then isNan = true else isNan = false
	On Error GoTo 0
end function
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade eu preciso da string toda, ou seja toda a sequência, como se fossem números de matrícula. Que à partir de cada número, tenho como pesquisar um por um.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, entao creio que minha função possa te ajudar...visto que voce tem por exemplo o seguinte texto em uma coluna no seu banco de dados:

 

"

Por favor cancelar a matriculas:

123456789

012345678

234567890

"

 

A função que fiz ira retornar [123456789 012345678 234567890]

 

sendo assim voce pode dar um Split ou mesmo o retorno da função pode ser uma tabela...lógico que isso depende de como seu sistema funciona e se quer a função pra rodar no banco fazendo algum processo como por exemplo após o registro ser inserido no banco você pode usar a função, pegar o retorno que é a cadeia de números e grava em uma outra table ou criar essa mesma função(mudando um pouco a lógica pra trabalhar com vbscript) no seu código asp....sendo que no momento que for gravar o campo com o texto misturado voce recupera as sequencias numéricas contidas no campo e grava ou verifica os valores usando por exemplo split ou entaum fazer a função em javascript e gravar num campo hidden.

 

As possibilidades são infinitas.

 

Bom, precisando é só chamar ou add no msn.

 

Abs.,

 

Jorge Santos

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.