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

Comprimir Cadena Ayuda Urgente!

Estas en el tema de Comprimir Cadena Ayuda Urgente! en el foro de Visual Basic clásico en Foros del Web. Hola a todos. Necesito comprimir una cadena como esta: 1:11:26:1;1:22:60:1;1:8:18:1;1:8:18:1;1:8:18:1 a que quede así: 1:11:26:1;1:22:60:1;1:8:18:3 Cuando se repitan, cambie el último dígito. Gracias!!...
  #1 (permalink)  
Antiguo 12/03/2010, 09:40
 
Fecha de Ingreso: marzo-2010
Ubicación: Medellín
Mensajes: 9
Antigüedad: 14 años, 1 mes
Puntos: 1
Comprimir Cadena Ayuda Urgente!

Hola a todos. Necesito comprimir una cadena como esta:

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

a que quede así:

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

Cuando se repitan, cambie el último dígito.

Gracias!!
  #2 (permalink)  
Antiguo 12/03/2010, 10:48
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: Comprimir Cadena Ayuda Urgente!

A ver que te parece...

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)), Len(Matriz2(UBound(Matriz2))) - Len(Cadena1))) + Val(Right$(Matriz1(F), Len(Matriz1(F)) - Len(Cadena1)))
  16.     Else
  17.       ReDim Preserve Matriz2(UBound(Matriz2) + 1)
  18.       Matriz2(UBound(Matriz2)) = Matriz1(F)
  19.     End If
  20.   Next F
  21.  
  22.   Comprime = Join(Matriz2, ";")
  23.  
  24. End Function

Permite sumar cuando ya se han sumado:

Tu ejemplo:
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

Saludos
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #3 (permalink)  
Antiguo 12/03/2010, 14:02
 
Fecha de Ingreso: marzo-2010
Ubicación: Medellín
Mensajes: 9
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Comprimir Cadena Ayuda Urgente!

Muchas Gracias!!!! Es lo que necesitaba. No tengo palabras para agradecerte. En serio, estoy muy contento con esta página y con la comunidad de programadores.

Tengo otra duda, aunque me da hasta pena; cuando voy a importar archivos, lo hago de la siguiente forma:

'Cadena de conexión
CnOrigen.Open "DRIVER={Microsoft Text Driver (*.txt; *.csv)}; DBQ=" & ruta & ";Persist Security Info=False"
'Ejecutamos el recordset pasandole el archivo de texto en la cláusula From
RsOrigen.Open "select * from [" & arch & "]", CnOrigen, adOpenStatic, adLockReadOnly, adCmdText

Set DataGrid1.DataSource = RsOrigen

Pero en algunos computadores me importa con comas (,) y en otros con punto y coma (;). Esto a que se debe y como lo podré solucionar??

Muchas gracias!!!

Etiquetas: comprimir, 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 17:02.