Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => 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



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.
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 (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