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: 23 años, 4 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(cadenacaracterCualCaractersentido)
    
itera 0
    
For 1 to len(cadena)    
        If 
mid(cadenax1) = caracter Then
            itera 
itera 1
        End 
If
        If 
itera CualCaracter Then
            
Exit For
        
End If
    
Next
    
If sentido "izquierda" Then
        EstaCadena 
mid(cadena11)
    ElseIf 
sentido "derecha" Then
        EstaCadena 
mid(cadena1)
    
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(cadenacaractertipo)
    If 
tipo "adelante" Then
        ObtenPos 
instr(1cadenacaracter)
    Elseif 
tipo "atras" Then
        Obtenpos 
instrRev(caractercadenalen(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 
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