Ir para conteúdo

POWERED BY:

Arquivado

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

othiagoo

Agrupamento de números sequenciais.

Recommended Posts

Boa tarde, estou com o seguinte problema.

Suponhamos que tenho os seguintes números:

 

Entrada: 1,2,3,6,7,9,10,11,12
Como faço pra criar intervalos sequenciais (no asp)?
Saída:
1,2,3
6,7
9,10,11,12
ou
1 a 3
6 a 7
9 a 12
Obrigado!


Se tiver um número sozinho na sequência, Ex: 1,2,5

 

1,2

5

Compartilhar este post


Link para o post
Compartilhar em outros sites

utilize array para isso, e para um padrão desordenado pode utilizar o método bubble-sort

Compartilhar este post


Link para o post
Compartilhar em outros sites
numeros = "1,2,3,5,6,7,9,10,11,12"



resp = SeparaNumeros(numeros)


response.write resp


function SeparaNumeros(num)

vet = split (num,",")

for i = 0 to ubound(vet)

if n ="" then

n = vet(i) & ","

else

u = split(n,",")

t = ubound(u)-1

if cint(vet(i)) = cint(replace(u(t),";",""))+1 then

n =n & vet(i) & ","

else

n =n & ";" & vet(i) & ","

end if

end if

next


SeparaNumeros = n

end function


fiz essa função... com isso vc pode dar um split no retorno com o separador ";" pegando as partes que não deram sequencia...


não tratei uma possível desordem dos números...


qualquer dúvida é só postar..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha este exemplo:

 

<%
' Ordenar um multi array dem 
' permite diferentes cols serem a chave para a classificação.
' ordena adequadamente as datas 
' permite que você especifique uma direção de classificação 'a' ou 'd'


function arraysort(values(),intSortCol,strDirection)
Dim i 
Dim j 
Dim value 
Dim value_j 
dim min
dim max
dim temp
dim datatype
dim intComp
dim intA
dim intCheckIndex
  
min = lbound(values,2)
max = ubound(values,2)
  
' verificar para ver que direção você deseja classificar.
if lcase(strDirection) = "d" then
	intComp = -1
else
	intComp = 1
end if
  
if intSortCol < 0 or intSortCol > ubound(values,1) then
	arraysort = values
	exit function
end if
' encontrar o primeiro item que tem dados válidos nele para classificar
intCheckIndex = min
while len(trim(values(intSortCol,intCheckIndex))) = 0 and intCheckIndex < ubound(values,2)
	intCheckIndex = intCheckIndex + 1
wend
if isDate(trim(values(intSortCol,intCheckIndex))) then
	datatype = 1
else
	if isNumeric(trim(values(intSortCol,intCheckIndex))) then
		datatype = 2
	else
		datatype = 0
	end if
end if
For i = min To max - 1
	value = values(intSortCol,i)
	value_j = i
	For j = i + 1 To max
		select case datatype
			case 0
				' Veja se os valores (j) é menor. trabalha com string agora.
				If strComp(values(intSortCol,j),value,vbTextCompare) = intComp Then
					' Salve o novo menor valor.
					value = values(intSortCol,j)
					value_j = j
				End If
			case 1
				if intComp = -1 then
					if DateDiff("s",values(intSortCol,j),value) > 0 then
						' Salve o novo menor valor.
						value = values(intSortCol,j)
						value_j = j
					end if
				else
					if DateDiff("s",values(intSortCol,j),value) < 0 then
						' Salve o novo menor valor.
						value = values(intSortCol,j)
						value_j = j
					end if
				end if
			case 2
				if intComp = -1 then
					if cdbl(values(intSortCol,j)) < cdbl(value) then
						' Salve o novo menor valor.
						value = values(intSortCol,j)
						value_j = j
					end if
				else
					if cdbl(values(intSortCol,j)) > cdbl(value) then
						' Salve o novo menor valor.
						value = values(intSortCol,j)
						value_j = j
					end if
				end if
		end select
	Next 'j
	If value_j <> i Then
		' Swap items i e value_j.
		for intA = 0 to ubound(values,1)
			temp = values(intA,value_j)
			values(intA,value_j) = values(intA,i)
			values(intA,i) = temp
		next 'intA
	End If
Next 'i
arraysort = values
End function
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

com esse code que postei vc pode partir dele para ordenar muitas coisas (Ordenar um multi array)

Compartilhar este post


Link para o post
Compartilhar em outros sites

... othiagoo, você queria que mostrasse a sequencia ou as extremidades da sequencia não é mesmo!?

 

para pegar somente as extremidades da sequencia é só da um split do split que já deu do retorno da função deu para entender...

 

ai vc captura o ubound se for maior que 0 vc pegar senão só tem 1 valor mesmo o lbound se faz desnecessário já que para saber o indice do vetor criado pelo split que sempre será zero...

 

qualquer dúvida é só postar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

método bubble-sort

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.