Tema: uso de split
Ver Mensaje Individual
  #7 (permalink)  
Antiguo 08/06/2004, 12:11
Avatar de u_goldman
u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 24 años, 10 meses
Puntos: 98
A ver si este código te sirve, está un poco desordenado y precisa que tu cadena sea igual a la que mostraste, ya que no dejaste muy bien el planteamiento del problema ni las variantes que pudiera tener esta cadena, se basa en los siguientes puntos:
1.- La cadena original separa sus elementos por ";"
2.- Cada subcadena se separa de la siguiente forma:
  • Un valor antes de "("
    Dentro de los paréntesis encontramos dos valores, separados por "-" pero que ese mismo string se repite 3 veces, así que siempre buscamos la coincidencia de "-" cuando se repita la segunda vez
Código PHP:
<%
'Funcion que devuelve el string de acuerdo al caracter buscado
'
en el sentido buscado y con cierto número de coincidencias
Function EncuentraPos(cadena, caracter, CualCaracter, sentido)
    
itera = 0
    
For x = 1 to len(cadena)    
        If 
mid(cadena, x, 1) = caracter Then
            itera 
= itera + 1
        End 
If
        If 
itera = CualCaracter Then
            
Exit For
        
End If
    
Next
    
If sentido = "izquierda" Then
        EstaCadena 
= mid(cadena, 1, x - 1)
    ElseIf 
sentido = "derecha" Then
        EstaCadena 
= mid(cadena, x + 1)
    
End If
    
EncuentraPos = EstaCadena
End 
Function

'Función que obtiene la posición de un caracter buscado 
'
en sentido adelante o atrás
Function ObtenPos(cadena, caracter, tipo)
    If 
tipo = "adelante" Then
        ObtenPos 
= instr(1, cadena, caracter)
    Elseif 
tipo = "atras" Then
        Obtenpos 
= instrRev(caracter, cadena, len(cadena))
    
End If
End Function

'Descompone la cadena y la imprime
Sub ImprimeItems(ParseaMe)
    item_uno = ObtenPos(ParseaMe, "(", "adelante")
    str_item_uno = left(ParseaMe, item_uno - 1)
    Response.Write str_item_uno & "<br>"
    str_item_dos = mid(ParseaMe, item_uno + 1, (len(parseaMe) - item_uno) - 1)
    str_item_tres = str_item_dos
    str_item_dos = EncuentraPos(str_item_dos, "-", 2, "izquierda")
    Response.Write str_item_dos & "<br>"
    str_item_tres = EncuentraPos(str_item_tres, "-", 2, "derecha")
    Response.Write str_item_tres & "<br>"
End Sub

'
Esta es la cadena que envías
cadena_envio
=";46(Fri Jun 11 00:00:00 GMT-0300 2004-Mon Jun 14 00:00:00 GMT-0300 2004);47(Tue Jun 15 00:00:00 GMT-0300 2004-Wed Jun 23 00:00:00 GMT-0300 2004)"

'El identificador en este caso es el ";" a partir de esto
'
hacemos un arreglo
arrOriginal 
= split(cadena_envio, ";")

'iteramos e invocamos a la sub, siempre y cuando el índice
'
contenga un valor distinto de empty
For 
i = 0 to uBound(arrOriginal)
    If 
not arrOriginal(i) = "" Then
        ImprimeItems trim
(arrOriginal(i))
    
End If
Next
%> 
A lo mejor no es la mejor solución, pero funciona si tu cadena cumple con lo que pusiste, a lo mejor investigando sobre expresiones regulares lo puedes resolver mejor!

Salu2,

P.D. Ya dije la palabra "mejor"???
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway

Última edición por u_goldman; 08/06/2004 a las 12:16