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.
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.
Gracias por la respuesta ;).
Un saludo!
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
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
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