Foros del Web » Programando para Internet » ASP Clásico »

Detectar dos splits seguidos

Estas en el tema de Detectar dos splits seguidos en el foro de ASP Clásico en Foros del Web. Hola: Estoy intentando cerrar entre paréntesis a cualquier número que haya en un nombre de archivo, pero no quiero encerrarlo si el siguiente es también ...
  #1 (permalink)  
Antiguo 07/02/2007, 14:02
Avatar de eeeee  
Fecha de Ingreso: febrero-2004
Ubicación: Almería
Mensajes: 397
Antigüedad: 21 años, 2 meses
Puntos: 0
Detectar dos splits seguidos

Hola:
Estoy intentando cerrar entre paréntesis a cualquier número que haya en un nombre de archivo, pero no quiero encerrarlo si el siguiente es también numérico.
Para ello estoy utilizando este código:
Código PHP:
arreglo split(OldName,"_")
for 
LBound(arregloto Ubound(arreglo)

for 
i=1900 to 2007

if IsNumeric(arreglo(a)) and IsNumeric(arreglo(a+1)) then
nada
else
NewName=replace(OldName,i,"("&i&")")
end if
next
next 
Pero me arroja el error '800a0009'
El subíndice está fuera del intervalo: '[number: 3]' en la linea del if IsNumeric

Alguien me puede dar una pista de cómo se puede hacer ??

Gracias
__________________
Eusol .............
aprendiendo de ustedes
________________________

http://www.alicun.com
  #2 (permalink)  
Antiguo 08/02/2007, 07:58
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Re: Detectar dos splits seguidos

Dame un ejemplo de que es lo que quieres, please

¿Archivo1.txt deberia ser archivo(1).txt pero Archivo11 no debe ser archivo(11)?

No me queda claro
  #3 (permalink)  
Antiguo 08/02/2007, 09:46
Avatar de eeeee  
Fecha de Ingreso: febrero-2004
Ubicación: Almería
Mensajes: 397
Antigüedad: 21 años, 2 meses
Puntos: 0
Re: Detectar dos splits seguidos

Hola Myakire:
El ejemplo está puesto en el código pero te pongo uno y así se ve mejor:
u2_the_best_of_1960_1970_front.jpg (no debe llevar los ())
u2_dublin_1993_back.jpg ( Debe quedar asi: u2_dublin_(1993)_back.jpg )
O sea cuado dos split seguidos sean numericos no hacer nada.
Salu2
__________________
Eusol .............
aprendiendo de ustedes
________________________

http://www.alicun.com
  #4 (permalink)  
Antiguo 08/02/2007, 11:39
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Re: Detectar dos splits seguidos

algo rápido (falta definir si siempre seguira ese criterio la cadena)
Código:
<%
'cadena = "u2_the_best_of_1960_1970_front.jpg"
cadena = "u2_dublin_1993_back.jpg"

vec = split(cadena, "_")
Cnt = 0
Veces = 0
For i=0 to Ubound(vec)
   On Error Resume Next
      Valor = CInt(vec(i))
   If Err.number<>0 then Valor = "" End If
	 If VarType(Valor)=2 Then
	    If Veces=0 Then Cnt = i End If  
			Veces = Veces + 1
	 End If
Next 
If Veces=1 Then vec(Cnt) = "(" & vec(Cnt) & ")" End If
NewCad = Join(vec,"_")

Response.Write Cadena & "  -> "& NewCad 
%>
  #5 (permalink)  
Antiguo 09/02/2007, 12:57
Avatar de eeeee  
Fecha de Ingreso: febrero-2004
Ubicación: Almería
Mensajes: 397
Antigüedad: 21 años, 2 meses
Puntos: 0
Re: Detectar dos splits seguidos

Bien Myakire, funciona perfecto pero si hay un split por ejemplo así: _1_
este 1 lo encierra entre paréntesis.
Yo necesito que vaya en el intervalo de 1900 hasta 2007.
Voy a intentar hacerle ese bucle aunque creo que tu lo implementarías mejor.

Salu2
__________________
Eusol .............
aprendiendo de ustedes
________________________

http://www.alicun.com
  #6 (permalink)  
Antiguo 09/02/2007, 14:40
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Re: Detectar dos splits seguidos

ok, dame unos minutos por que ando un poco ocupadillo, pero de hoy no pasa
  #7 (permalink)  
Antiguo 09/02/2007, 14:45
Avatar de eeeee  
Fecha de Ingreso: febrero-2004
Ubicación: Almería
Mensajes: 397
Antigüedad: 21 años, 2 meses
Puntos: 0
Re: Detectar dos splits seguidos

Ya le puse el bucle quedando el código así:
Código PHP:
<%
cadena "u2_the_best_of_1960_1970_front.jpg"
cadena "u2_dublin_1993_back.jpg"

vec split(cadena"_")
for 
a=1900 to 2007
Cnt 
0
Veces 
0
For i=0 to Ubound(vec)
   
On Error Resume Next
      Valor 
CInt(vec(i))
   If 
Err.number<>0 then Valor "" End If
     If 
VarType(Valor)=2 Then
        
If Veces=0 Then Cnt i End If  
            
Veces Veces 1
     End 
If
Next 
If Veces=and a=CInt(vec(Cnt)) Then vec(Cnt) = "(" vec(Cnt) & ")" End If
NewCad Join(vec,"_")
next

Response
.Write Cadena "  -> "NewCad &"<br>"
%> 
Y funciona bien, siempre que la cadena sea igual que está escrita arriba, pero si la cadena por ejemplo= "u2_dublin_(1993_back.jpg" , me pone entre paréntesis a u2.

Hay algo mal ??
Gracias
__________________
Eusol .............
aprendiendo de ustedes
________________________

http://www.alicun.com
  #8 (permalink)  
Antiguo 09/02/2007, 17:37
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Re: Detectar dos splits seguidos

A ver que te parece esto, disculpa lo carrereado pero en serio hoy no he tenido chance

Código:
<%
'cadena = "u2_the_best_of_1960_1970_front.jpg"
'cadena = "u2_dublin_1993_back.jpg"
cadena = "u2_dublin_(1_back.jpg"

vec = split(cadena, "_")
Cnt = 0
Veces = 0
For i=0 to Ubound(vec)
   On Error Resume Next
      Valor = CInt(vec(i))
   If Err.number<>0 then Valor = "" End If
	 If VarType(Valor)=2 Then
	    If Veces=0 Then Cnt = i End If  
			Veces = Veces + 1
	 End If
Next 
If Veces=1 Then
    Valor = CInt(vec(Cnt)) 
		If (Valor >= 1900 and Valor <= 2500) Then
       vec(Cnt) = "(" & vec(Cnt) & ")"
		End IF 
End If
NewCad = Join(vec,"_")

Response.Write Cadena & "  -> "& NewCad 
%>
  #9 (permalink)  
Antiguo 09/02/2007, 23:59
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 3 meses
Puntos: 98
Re: Detectar dos splits seguidos

Aqui nada mas como siempre donde no me llaman, pero esto se puede hacer mucho mejor con una expresion regular:

Código:
<%
cadena = "u2_the_best_of_1960_1970_front.jpg"
'cadena = "u2_dublin_1993_back.jpg"
Set ObjRegEx = new RegExp
ObjRegEx.Pattern = "(\d{4})"
ObjRegEx.Global = True 
ObjRegEx.IgnoreCase = True

Set Matches  = ObjRegEx.Execute(cadena)

if Matches.Count = 1 then
	cadena = ObjRegEx.Replace(cadena, "($1)")
end if

Response.Write(cadena)
%>
Salud
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #10 (permalink)  
Antiguo 10/02/2007, 13:54
Avatar de eeeee  
Fecha de Ingreso: febrero-2004
Ubicación: Almería
Mensajes: 397
Antigüedad: 21 años, 2 meses
Puntos: 0
Re: Detectar dos splits seguidos

OK ... Gracias a los dos por responder.

Los dos códigos funcionan a la perfección, pero me inclino en esta ocasión por el de Myakire, ya que el de u_goldman si la cadena ="u2_dublin_(1993_back.jpg", pone (1993 así: ((1993) y si ya tenía los dos paréntesis, los pone dobles, .Pero tomo nota del código de u_goldman ya que cre que me puede hacer falta en el futuro.
Resulta que hay 500.000 cadenas y estas son enviadas por usuarios que a veces tienen errores en la escritura.

Salu2
__________________
Eusol .............
aprendiendo de ustedes
________________________

http://www.alicun.com

Última edición por eeeee; 13/02/2007 a las 13:05
  #11 (permalink)  
Antiguo 10/02/2007, 15:02
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 3 meses
Puntos: 98
Re: Detectar dos splits seguidos

Bueno, todo es cuestion de trabajar con la expresion regular, el patron es demasiado sencillo pero se puede hacer tan complicado como se quiera hacer, ademas podrias poner N condiciones en el replace o trabajar la cadena -para eso son las expresiones regulares, el ejemplo a lo mejor no es el mejor porque solo tiene un patron de 4 digitos seguidos, pero estoy seguro que por ahi se encuentra la solucion.

Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:41.