TRATAR STRING COM CARACTERES . ? !

PROGRAMADORVB6 30/10/2013 10:00:23
#430525
Olá bom dia.
Tenho esta função, mas não estou conseguindo que quando aparece os caracteres (.?!) , caso seja letra que venha a seguir, a coloque com um espaço e com a letra em maiúscula.

 Private Function Formatar_Texto(ByVal Input As String) As String
Dim Posicao_Caracter As Integer
Dim Monta_String As String = String.Empty
Dim sChar As String = [Ô][Ô]
Dim i As Integer

For i = 0 To Input.Length - 1

sChar = Input.Substring(i, 1)
Select Case sChar
Case [Ô].[Ô], [Ô]?[Ô], [Ô]![Ô]
If Char.IsWhiteSpace(Input.Substring(Posicao_Caracter + 1, 1)) AndAlso Char.IsLower(Input.Substring(Posicao_Caracter + 2, 1)) Then

Monta_String = String.Concat(Monta_String, sChar & [Ô] [Ô] & Input.Substring(Posicao_Caracter + 2, 1).ToUpper(currentCulture))


i += 2
Exit Select

End If

Case Else
Monta_String = String.Concat(Monta_String, sChar.ToString(currentCulture))
MsgBox(Monta_String)

End Select
Posicao_Caracter += 1
Next
Return Monta_String
End Function


Obrigado pela vossa atenção.
TUNUSAT 30/10/2013 12:50:18
#430533
PROGRAMADORVB6,

Parece que o problema é simples.
Os caracteres (.?!) que aparecem como ÚLTIMO caracter da frase quando o problema aparece pois entram na [Ô]if[Ô] abaixo:


If Char.IsWhiteSpace(Input.Substring(Posicao_Caracter + 1, 1)) AndAlso Char.IsLower(Input.Substring(Posicao_Caracter + 2, 1)) Then


E o problema ocorre quanto tentamos somar mais um (Posicao_Caracter + 1) ao tamanho máximo da [Ô]Posicao_Caracter[Ô].
Para resolver o problema, sugiro verificar o tamanho da [Ô]Input[Ô] antes de efetuar a retirada destes caracteres especiais. Caso seja a última posição, basta não fazer nada...
... abaixo a solução:


If Input.Length < Posicao_Caracter + 1 Then

If Char.IsWhiteSpace(Input.Substring(Posicao_Caracter + 1, 1)) AndAlso Char.IsLower(Input.Substring(Posicao_Caracter + 2, 1)) Then

Monta_String = String.Concat(Monta_String, sChar & [Ô] [Ô] & Input.Substring(Posicao_Caracter + 2, 1).ToUpper(CurrentCulture))


i += 2
Exit Select

End If

End If



é isto?!?


[][ô]s,
Tunusat.
PROGRAMADORVB6 30/10/2013 19:48:10
#430557
Olá Tunusat.
Obrigado desde já pela sua resposta.
Mas a solução indicada, não resolve o meu problema.
O que eu pretendo é que ao escrever : [txt-color=#e80000]o[/txt-color] colega Tunusat está me ajudando. [txt-color=#e80000]m[/txt-color]as está a ser complicado![txt-color=#e80000]t[/txt-color]alvez encontrar a solução?
[txt-color=#0000f0]Tratar String [/txt-color]==>[txt-color=#0000f0] O[/txt-color] colega Tunusat está me ajudando. [txt-color=#0000f0]M[/txt-color]as está a ser complicado! [txt-color=#0000f0]T[/txt-color]alvez encontrar a solução?
GANDA.NICK 31/10/2013 00:56:05
#430564
Olá,

fiz umas alterações no teu code e adicionei uma função para retirar espaços a mais que tinha achado na net..

porem penso que esta solução não está perfeita, acho que será mais facil ir por [Ô]etapas[Ô]:
- Remover todos os espaços a mais (ex: espaços duplos)
- Remover todos os espaços antes e depois das pontuações
- Substituir por letra maiúscula a letra a seguir as pontuações excepto a virgula
- Adicionar espaço a seguir às pontuações


Segue o code:

Public Class Form1

Private Function RemoveExtraWhitespace(ByVal _string As String) As String
If (_string = Nothing Or _string = [Ô] [Ô]) Then
Return Nothing
End If
_string = _string.Trim()
Dim stringArray() As String = _string.Split([Ô] [Ô])
Dim tempString As String = Nothing
For Each stringElement In stringArray
If (stringElement <> [Ô][Ô]) Then
tempString += [Ô] [Ô] + stringElement
End If
Next
tempString = tempString.Trim
Return tempString
End Function

Private Function Formatar_Texto(ByVal Input As String) As String
Dim Monta_String As String = String.Empty
Dim sChar As String = [Ô][Ô]
Dim i As Integer, c As Integer = 1

[ô] Remove mais de um espaço em branco seguidos
Input = RemoveExtraWhitespace(Input)

If Input = String.Empty Then Return String.Empty

[ô] Primeira letra para maiuscula
Input = Char.ToUpper(Input(0)) & Input.Substring(1)

For i = 0 To Input.Length - 2
sChar = Input.Substring(i, 1)
Select Case sChar
Case [Ô].[Ô], [Ô]?[Ô], [Ô]![Ô]
If Not Char.IsWhiteSpace(Input.Substring(i + 1, 1)) Then c = 1 Else c = 2

Monta_String = String.Concat(Monta_String, sChar & [Ô] [Ô] & Input.Substring(i + c, 1).ToUpper())
i += c

Case Else
Monta_String = String.Concat(Monta_String, sChar.ToString())
End Select
Next

[ô] Adiciona ultimo caracter porque o FOR é até Input.Length - 2
Monta_String = String.Concat(Monta_String, Input.Substring(Input.Length - 1, 1))

Return Monta_String

End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox(Formatar_Texto([Ô]o colega Tunusat está me ajudando. mas está a ser complicado!talvez encontrar a solução ?[Ô]))
End Sub

End Class




Avisa aí o que vai decidir fazer

Té+

TUNUSAT 31/10/2013 08:02:50
#430567
PROGRAMADORVB6,


Testei agora o que o Ganda_Nick montou e está perfeito, pode testar na sua máquina que vai funcionar 100%.

Obrigado Ganda_Nick!

Curti o que você postou sobre márca d[ô]água. Vou montar um código usando aquele código.


Valew! T+!
[][ô]s,
Tunusat.
PROGRAMADORVB6 31/10/2013 10:44:31
#430580
Olá Colega GANDA_NICK.
Obrigado desde já pela sua ajuda.
Tive a experimentar o código e funciona como o colega TUNUSAT diz a 100% , porém noto que quando o caracter se repete
existe a separação na mesma, isto é quando escrevemos :
-[txt-color=#007100] O[/txt-color] colega GANDA_NICK e Tunusat estão me ajudando. [txt-color=#007100]M[/txt-color]as está a ser complicado[txt-color=#e80000]...[/txt-color] [txt-color=#007100]t[/txt-color]alvez conseguiremos encontrar a solução?
Ele não faz a destinção dos ([txt-color=#e80000]...[/txt-color]) , a solução talvez passe por, não fazer qualquer alteração caso o caracter anterior seja igual presente.

Para a supressão de espaços fiz esta Função:

 Public Function ExcessoNo_Texto(Meu_Texto As String) As String
Do While (Meu_Texto.IndexOf([Ô] [Ô]) <> -1)
Meu_Texto = Meu_Texto.Replace([Ô] [Ô], [Ô][Ô])
Loop
Return Meu_Texto
End Function


Desde já agradeço a todos a vossa colaboração.
GANDA.NICK 31/10/2013 12:25:22
#430588
ainda não está a 100%, o melhor era mesmo tirar os espaços antes das pontuções.... ve com a segunda frase,

usei essa sua função para tirar por exemplo duas pontuações seguidas (!!)

e já está a ficar badalhoco o code

Public Class Form1

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 Formatar_Texto(ByVal Input As String) As String
Dim Monta_String As String = String.Empty
Dim sChar As String = [Ô][Ô]
Dim i As Integer, c As Integer = 1

[ô] Trata reticencias, mais de 3 pontos assume 3 pontos
Input = Input.Replace([Ô]...[Ô], [Ô]☻[Ô])
Do While (Input.IndexOf([Ô]☻.[Ô]) <> -1)
Input = Input.Replace([Ô]☻.[Ô], [Ô]☻[Ô])
Loop

[ô] Remove mais de um espaço em branco seguidos e pontuações seguidas
Dim Caracteres As String = [Ô]☻!?., [Ô]
For i = 0 To Caracteres.Length - 1
Input = ExcessoNo_Texto(Input, Caracteres.Substring(i, 1))
Next

If Input = String.Empty Then Return String.Empty

[ô] Primeira letra para maiuscula
Input = Char.ToUpper(Input(0)) & Input.Substring(1)

For i = 0 To Input.Length - 2
sChar = Input.Substring(i, 1)
Select Case sChar
Case [Ô].[Ô], [Ô]?[Ô], [Ô]![Ô], [Ô]☻[Ô]
If Not Char.IsWhiteSpace(Input.Substring(i + 1, 1)) Then c = 1 Else c = 2

Monta_String = String.Concat(Monta_String, sChar & [Ô] [Ô] & Input.Substring(i + c, 1).ToUpper())
i += c

Case Else
Monta_String = String.Concat(Monta_String, sChar.ToString())
End Select
Next

[ô] Adiciona ultimo caracter porque o FOR é até Input.Length - 2
Monta_String = String.Concat(Monta_String, Input.Substring(Input.Length - 1, 1))

[ô] Volta a meter as reticencias
Monta_String = Monta_String.Replace([Ô]☻[Ô], [Ô]...[Ô])

Return Monta_String

End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox(Formatar_Texto([Ô]o colega Tunusat está me ajudando........ mas está a ser complicado!!talvez encontrar a solução..[Ô]))
MsgBox(Formatar_Texto([Ô]o colega Tunusat está me ajudando.... .... mas está a ser complicado! !talvez encontrar a solução..[Ô]))
End Sub

End Class
PEGUDO 31/10/2013 14:05:30
#430597
Cara,
Tenta isso aí:
PROGRAMADORVB6 31/10/2013 19:09:26
#430608
Olá Pegudo.
Estive a experimentar seu código e também não deu certo, veja a simulação.
PEGUDO 01/11/2013 13:37:07
#430643
Você esqueceu de colocar
str = trabalho(Vetor)
antes de
MsgBox(str)
. Mas como eu vi que sua frase pode conter caracteres repetidos, faça as alterações a seguir, as outras não precisa mexer:


PROGRAMADORVB6 01/11/2013 19:48:53
#430666
Olá PEGUDO.
Desde já quero agradecer a sua colaboração.
Neste exemplo que mostrou aqui, ele mete em letra grande e repete logo a seguir o mesmo caracter em letra pequena, e também não está fazendo caso encontre na string a repetição dos caracteres (...) | (???) | (!!!) estes caracteres ficarão na mesma e também o caracter que virá posterior não sofrerá qualquer alteração.
Ex: O Colega PEGUDO está também me ajudando. [txt-color=#007100]M[/txt-color]as esta a ser difícil[txt-color=#007100]...[/txt-color] [txt-color=#007100]t[/txt-color]alvez seja na próxima!!!

Junto envio o anexo para ver como fica.
Obrigado a todos por tudo + 1 vez
Página 1 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas