Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Modificar Cadena

Estas en el tema de Modificar Cadena en el foro de Visual Basic clásico en Foros del Web. Hola a todos!! Tengo el siguiente código: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código vb: Ver original Function Comprime(Cadena As String ) As String   Dim Matriz1() As String ...
  #1 (permalink)  
Antiguo 02/04/2010, 08:51
 
Fecha de Ingreso: marzo-2010
Ubicación: Medellín
Mensajes: 9
Antigüedad: 14 años, 1 mes
Puntos: 1
Modificar Cadena

Hola a todos!!

Tengo el siguiente código:

Código vb:
Ver original
  1. Function Comprime(Cadena As String) As String
  2.   Dim Matriz1() As String
  3.   Dim Matriz2() As String
  4.   Dim Cadena1 As String
  5.   Dim Cadena2 As String
  6.   Dim F As Long
  7.  
  8.   Matriz1 = Split(Cadena, ";")
  9.   ReDim Matriz2(0)
  10.   Matriz2(0) = Matriz1(0)
  11.   For F = 1 To UBound(Matriz1)
  12.     Cadena1 = Left$(Matriz1(F), InStrRev(Matriz1(F), ":"))
  13.     Cadena2 = Left$(Matriz2(UBound(Matriz2)), InStrRev(Matriz2(UBound(Matriz2)), ":"))
  14.     If Cadena1 = Cadena2 Then
  15.       Matriz2(UBound(Matriz2)) = Cadena1 & Val(Right$(Matriz2(UBound(Matriz2)), _
  16.       Len(Matriz2(UBound(Matriz2))) - Len(Cadena1))) + Val(Right$(Matriz1(F), _
  17.       Len(Matriz1(F)) - Len(Cadena1)))
  18.     Else
  19.       ReDim Preserve Matriz2(UBound(Matriz2) + 1)
  20.       Matriz2(UBound(Matriz2)) = Matriz1(F)
  21.     End If
  22.   Next F
  23. Comprime = Join(Matriz2, ";")
  24. End Function

El cual me sirve para hacer este tipo de cosas:

MsgBox Comprime("1:11:26:1;1:22:60:1;1:8:18:1;1:8:18:1;1: 8:18:1")
Resultado: 1:11:26:1;1:22:60:1;1:8:18:3

Apliación de sumas:
MsgBox Comprime("1:11:26:1;1:22:60:1;1:8:18:1;1:8:18:2;1: 8:18:1")
Resultado: 1:11:26:1;1:22:60:1;1:8:18:4

Me suma el último dígito de las subcadenas REPETIDAS. Lo que quiero es me me sume no sólo el último número sino los tres últimos

La idea es esta:

Para: 1:11:26:1;1:22:60:1;1:8:18:1;1:8:18:1;1: 8:18:1

Salida: 1:11:26:1;1:22:60:1;1:24:54:3


Muchas gracias a todos!!!

Última edición por assdres; 03/04/2010 a las 09:42
  #2 (permalink)  
Antiguo 03/04/2010, 08:04
Avatar de seba123neo  
Fecha de Ingreso: febrero-2007
Ubicación: Esperanza, Santa Fe
Mensajes: 1.046
Antigüedad: 17 años, 2 meses
Puntos: 19
Respuesta: Modificar Cadena

Hola, a ver si entendi esa funcion, ¿ te suma el ultimo digito de las ultimas 3 subcadenas que estan separadas por ";" no ?

por ejemplo, ahora te esta sumando el ultimo numero de:

1: 8:18:1

y vos queres que ahora lo haga con los ultimos 3...

saludos.
__________________
" Todos Somos Ignorantes; lo que pasa es que no todos ignoramos las mismas cosas " - Albert Einstein
  #3 (permalink)  
Antiguo 03/04/2010, 08:22
 
Fecha de Ingreso: marzo-2010
Ubicación: Medellín
Mensajes: 9
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Modificar Cadena

Me suma el último dígito de las subcadenas REPETIDAS. Lo que quiero es me me sume no sólo el último número sino los tres últimos. Que me quede algo así:

Para: 1:11:26:1;1:22:60:1;1:8:18:1;1:8:18:1;1: 8:18:1

Salida: 1:11:26:1;1:22:60:1;1:24:54:3

Todas separadas primero con ";" y las cadenas pequeñas con ":"

Es bastante urgente el asunto.

Gracias!!
  #4 (permalink)  
Antiguo 03/04/2010, 11:38
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Modificar Cadena

No es muy dificil.
Se puede hacer mejor, pero si la cadena no es muy larga puede servir esto:

Código vb:
Ver original
  1. Function Comprime2(byVal Cadena As String) As String
  2.   Dim Matriz1() As String
  3.   Dim Matriz2() As String
  4.   Dim Matriz1Temp() As String
  5.   Dim Matriz2Temp() As String
  6.   Dim F As Long
  7.   Matriz1 = Split(Cadena, ";")
  8.   ReDim Matriz2(0)
  9.   Matriz2(0) = Matriz1(0)
  10.   For F = 1 To UBound(Matriz1)
  11.     Matriz1Temp = Split(Matriz1(F), ":")
  12.     Matriz2Temp = Split(Matriz2(UBound(Matriz2)), ":")
  13.     If Matriz1Temp(0) = Matriz2Temp(0) _
  14.     And Matriz1Temp(1) / Matriz1Temp(3) = Matriz2Temp(1) / Matriz2Temp(3) _
  15.     And Matriz1Temp(2) / Matriz1Temp(3) = Matriz2Temp(2) / Matriz2Temp(3) Then
  16.       Matriz2(UBound(Matriz2)) = Matriz2Temp(0) & ":" _
  17.       & Val(Matriz1Temp(1)) + Val(Matriz2Temp(1)) & ":" _
  18.       & Val(Matriz1Temp(2)) + Val(Matriz2Temp(2)) & ":" _
  19.       & Val(Matriz1Temp(3)) + Val(Matriz2Temp(3))
  20.     Else
  21.       ReDim Preserve Matriz2(UBound(Matriz2) + 1)
  22.       Matriz2(UBound(Matriz2)) = Matriz1(F)
  23.     End If
  24.   Next F
  25.   Comprime2 = Join(Matriz2, ";")
  26. End Function

Saludos

PD: La proxima vez lo llamo "Function PKJZip"
Ten en cuenta que siguen sumandose los valores ya sumados, como en la anterior función.
Esta línea:
1:11:26:1;1:22:60:1;1:24:54:3;1:8:18:1;1:8:18:1;1: 8:18:1
Devuelve:
1:11:26:1;1:22:60:1;1:48:108:6
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!

Última edición por pkj; 03/04/2010 a las 11:56
  #5 (permalink)  
Antiguo 03/04/2010, 13:19
 
Fecha de Ingreso: marzo-2010
Ubicación: Medellín
Mensajes: 9
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Modificar Cadena

¡¡¡ME QUITO EL SOMBRERO!!

ESPECTACULAR!

Me preocupa lo que dices de las cadenas largas, pues a veces las hay con 30 registros seguidos.

Sin embargo mi agradecimiento es infinito!

También me gustaría aprender acerca de su funcionamiento.

Andrés.

Última edición por assdres; 03/04/2010 a las 13:34
  #6 (permalink)  
Antiguo 03/04/2010, 13:41
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Modificar Cadena

El funcionamiento es bastante sencillo, aunque explicarlo llevaría algún tiempo.
Básicamente troceo la cadena por los (;) y luego esos trozos los vuelvo a separar por los (:) para comparar unos con otros y sumarlos si todos coinciden.

Lo de la longitud no creo que te dé problemas. De todos modos experimenta por si se vuelve demasiado lento con muchos registros (a mí me preocupaba que fuesen 500 o mas).

A mí lo que realmente me preocupa es... que pronto vendrás a pedirme el descompresor

Saludos.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!

Última edición por pkj; 03/04/2010 a las 13:47

Etiquetas: modificar, cadenas
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 06:30.