TRATAR STRING COM CARACTERES . ? !

GANDA.NICK 01/11/2013 20:06:55
#430667
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
PEGUDO 04/11/2013 08:09:55
#430679
Resposta escolhida
Acho que agora tem o que você quer.
Coloquei dois botões um para caso você queira trocar [txt-color=#e80000][Ô]???[Ô][/txt-color] por [txt-color=#e80000][Ô]?[Ô] [/txt-color]e outro caso queira deixar [txt-color=#e80000][Ô]???[Ô][/txt-color].
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 [txt-color=#e80000][Ô].[Ô][/txt-color], [txt-color=#e80000][Ô]?[Ô][/txt-color] e [txt-color=#e80000][Ô]![Ô][/txt-color] o programa não faz o tratamento, ou seja, se a frase tiver: [txt-color=#0000f0][Ô]eu sei!eu sei? hoje.[Ô][/txt-color] a frase será: [txt-color=#0000f0][Ô]eu sei!eu sei? Hoje[Ô].[/txt-color]
Espero que te ajude
PROGRAMADORVB6 04/11/2013 14:33:08
#430712
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
Página 2 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas