TRATAR STRING COM CARACTERES . ? !

 Tópico anterior Próximo tópico Novo tópico

TRATAR STRING COM CARACTERES . ? !

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#430667 - 01/11/2013 20:06:55

GANDA_NICK
LISBOA
Cadast. em:Setembro/2005


uma mistura do code do PEGUDO com o que eu tinha feito:

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Vector() As String = Nothing
        Dim str As String = Me.TextBox1.Text
        Dim Temp As String = ""
        Dim VetorTemp() As String = Nothing

        str = PreparaFrase(str)
        str = ReconhecePontos(str)
        VetorTemp = SeparaFrases(str)
        str = Trabalho(VetorTemp)
        MsgBox(str)
    End Sub

    Public Function ExcessoNo_Texto(ByVal Meu_Texto As String, ByVal Caracter As Char) As String
        Do While (Meu_Texto.IndexOf(Caracter & Caracter) <> -1)
            Meu_Texto = Meu_Texto.Replace(Caracter & Caracter, Caracter)
        Loop
        Return Meu_Texto.Trim()
    End Function

    Private Function PreparaFrase(ByVal Param As String) As String

        ' Trata reticencias, mais de 3 pontos assume 3 pontos
        Param = Param.Replace("...", "☻")
        Do While (Param.IndexOf("☻.") <> -1)
            Param = Param.Replace("☻.", "☻")
        Loop

        Dim Caracteres As String = "☻!?., "
        For i = 0 To Caracteres.Length - 1
            Param = ExcessoNo_Texto(Param, Char.Parse(Caracteres.Substring(i, 1)))
        Next
        Return Param
    End Function

    Private Function ReconhecePontos(ByVal Param As String) As String
        Dim Vetor() As String = {".", "!", "?", "☻"}
        ReconhecePontos = Param
        For Each Ponto As String In Vetor
            ReconhecePontos = ReconhecePontos.Replace(Ponto, Ponto & "||")
        Next
        Return ReconhecePontos
    End Function

    Private Function SeparaFrases(ByVal Param As String) As String()
        Dim Vetor() As String = Split(Param, "||")
        SeparaFrases = Vetor
        Return SeparaFrases
    End Function

    Private Function Trabalho(ByVal vetor As Array) As String
        Trabalho = String.Empty
        For Each Frase As String In vetor
            Frase = Frase.Trim
            If Frase <> "" And Frase <> "." And Frase <> "!" And Frase <> "?" And Frase <> "☻" Then
                Trabalho = String.Concat(Trabalho, " ", Char.ToUpper(Frase(0)) & Frase.Substring(1).Replace("☻", "..."))
            End If
        Next
        Return Trabalho
    End Function

End Class


________________________________________________
Não hÃÆ’á duvidas?? If Not (Duvidas) Then Encerre seu tópico

Resposta escolhida #430679 - 04/11/2013 08:09:55

PEGUDO
RIO DE JANEIRO
Cadast. em:Março/2009


 Anexos estao visíveis somente para usuários registrados

Acho que agora tem o que você quer.
Coloquei dois botões um para caso você queira trocar "???" por "?" e outro caso queira deixar "???".
Outra coisa que eu não fiz (mas eu acho que isso deve partir de você) é: Quando a frase não tem espaços entre os ".", "?" e "!" o programa não faz o tratamento, ou seja, se a frase tiver: "eu sei!eu sei? hoje." a frase será: "eu sei!eu sei? Hoje".
Espero que te ajude

"Às vezes, para poder andar pra frente, o homem deve deixar tudo para trás"

#430712 - 04/11/2013 14:33:08

PROGRAMADORVB6
LISBOA
Cadast. em:Janeiro/2004


Última edição em 04/11/2013 20:30:26 por PROGRAMADORVB6

 Anexos estao visíveis somente para usuários registrados

Olá boa tarde.
Quero desde já agradecer a todos, o vosso empenho e dedicação em me ajudar.
Coloco aqui este código  uma longa semana praticamente sem dormir:
Option Strict On
Public Class Form1
    Function FixString(s As String) As String
        Const symbols As String = ".?!"
        Dim symHit As Boolean = True
        '
        For i As Integer = 0 To s.Length - 1
            If symHit Then
                If Char.IsLetter(s(i)) Then
                    If Char.IsLower(s(i)) Then
                        Dim c As Char = s(i)
                        s = s.Remove(i, 1).Insert(i, Char.ToUpper(c))
                    End If
                    symHit = False
                End If
            Else
                If symbols.IndexOf(s(i)) > -1 Then
                    Dim c As Char = s(i)
                    If Char.IsPunctuation(s(i)) AndAlso Not Char.IsPunctuation(s(i + 1)) AndAlso Not Char.IsWhiteSpace(s(i + 1)) Then
                        s = s.Remove(i, 1).Insert(i, c & " ")
                        symHit = True
                    Else
                        s = s.Remove(i, 1).Insert(i, Char.ToUpper(c))
                        symHit = True
                    End If
                End If
            End If

        Next
        Return s
    End Function
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Me.TextBox2.Text = FixString(Me.TextBox1.Text)
    End Sub
End Class


Obrigado PEGUDO + 1 vez pelo seu exemplo. (Valeu!)
- Já vai dar para montar este Array monstruoso que tenho aqui e que vai servir para indicar onde estão os erros.
Atentamente.
ProgramadorVB6

______________________________________________________________________________

Que minha coragem seja maior que meu medo e que minha força seja tão grande quanto minha fé.


 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por PROGRAMADORVB6 em 04/11/2013 20:31:36