Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: h0oke en 19 Septiembre 2009, 18:35 pm



Título: Duda - Strings
Publicado por: h0oke en 19 Septiembre 2009, 18:35 pm
Hola, resulta que tengo que resolver lo siguiente: Tengo una texto, el cual posee signos de puntuación, lo que tengo que lograr es que después de cada signo, aparezca un solo espacio en blanco. Quisiera recibir opiniones sobre como resolverlo.


Título: Re: Duda - Strings
Publicado por: burbu_1 en 20 Septiembre 2009, 22:46 pm
hola dynyck,

si los signos de puntuación son siempre los mismos, por ejemplo puntos, puedes separar las "frases" con la función split y después unir todas las frases pasadas por la función trim


Código:
Private Sub Command1_Click()
Dim frases() As String
Dim i As Long
'separas las frases en un array
frases = Split(Text1.Text, ".")
For i = 0 To UBound(frases)
    'añades las frases sin espacios más el punto y un espacio
    Text1.Text = Text1.Text & Trim(frases(i)) & ". "
Next i
'quitas el ". " del final
Text1.Text = Left(Text1.Text, Len(Text1.Text) - 2)
End Sub


si tienes varios signos de puntuación distintos, puedes ir recorriendo todo el texto y comparar, para separar las frases a un array

Código:
Private Sub Command1_Click()
Dim frases() As String
Dim i As Long
Dim n_frases As Long
n_frases = 1
ReDim Preserve frases(n_frases - 1)
For i = 1 To Len(Text1.Text)
    frases(n_frases - 1) = frases(n_frases - 1) & Mid(Text1.Text, i, 1)
    'añades los signos que quieras
    If Mid(Text1.Text, i, 1) = "." Or Mid(Text1.Text, i, 1) = "," Or Mid(Text1.Text, i, 1) = ";"  then
        n_frases = n_frases + 1
        ReDim Preserve frases(n_frases - 1)
    End If
Next i
For i = 0 To n_frases - 1
    Text1.Text = Text1.Text & Trim(frases(i)) & " "
Next i
Text1.Text = Left(Text1.Text, Len(Text1.Text) - 1)
End Sub

Además de la función trim tambien tienes ltrim y rtrim que igual te interesan más.

Espero que te sirva,
saludos.


Título: Re: Duda - Strings
Publicado por: h0oke en 20 Septiembre 2009, 23:30 pm
Gracias por la respuesta ;).

Un saludo!


Título: Re: Duda - Strings
Publicado por: W0lFy en 23 Septiembre 2009, 01:11 am
Te voy a dar una para cualquier caracter de puntuación generalizado
No te lo doy hecho porque ahora no tengo tiempo pero es muy facil:

primero nos creamos una funcion que nos diga si 1 caracter es Signo de puntuacion

Código
  1. Private Sub EsPuntuacion(ByVal letra as char,Byref bandera as boolean)
  2.   select case letra
  3.   case '`'
  4.      bandera=true
  5.   case '´'
  6.      bandera=true
  7.   case 'á'
  8.      bandera=true
  9.   case else
  10.      bandera=false
  11.   end select
  12. end sub
'Despues haremos un bucle
Código
  1. Dim cadena as string
  2. Dim tamanoCad as integer
  3. Dim CadenaSalida as string
  4. Dim bandera as boolean
  5. CadenaSalida=""
  6. cadena ="Hola Pepe"
  7. tamanoCad=Len(cadena)
  8.  
  9. For i=1 To tamanoCad step 1
  10.   EsPuntuacion(mid(cadena,i,1),bandera)
  11.   if bandera then
  12.      CadenaSalida=CadenaSalida & mid(cadena,i,1) & " "
  13.   else
  14.      CadenaSalida & mid(cadena,i,1)
  15.   end if
  16.  
  17. next
  18.  
  19. MsgBox CadenaSalida


pd. La primera funcion no esta bien porque tengo un poco de ambigüedad con VB y los caracteres, pero puedes controlarlo tambien por el numero que representa en la tabla ascii. Un saludo espero que te sirva