Duda - Strings

Iniciado por h0oke, 19 Septiembre 2009, 18:35 PM

0 Miembros y 1 Visitante están viendo este tema.

h0oke

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.

burbu_1

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



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


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.

h0oke

Gracias por la respuesta ;).

Un saludo!

W0lFy

#3
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 (cpp) [Seleccionar]
Private Sub EsPuntuacion(ByVal letra as char,Byref bandera as boolean)
  select case letra
  case '`'
     bandera=true
  case '´'
     bandera=true
  case 'á'
     bandera=true
  case else
     bandera=false
  end select
end sub

'Despues haremos un bucle
Código (cpp) [Seleccionar]
Dim cadena as string
Dim tamanoCad as integer
Dim CadenaSalida as string
Dim bandera as boolean
CadenaSalida=""
cadena ="Hola Pepe"
tamanoCad=Len(cadena)

For i=1 To tamanoCad step 1
  EsPuntuacion(mid(cadena,i,1),bandera)
  if bandera then
     CadenaSalida=CadenaSalida & mid(cadena,i,1) & " "
  else
     CadenaSalida & mid(cadena,i,1)
  end if

next

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
K@NuT0