TRATAR STRING COM CARACTERES . ? !
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.
Obrigado pela vossa atenção.
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.
PROGRAMADORVB6,
Parece que o problema é simples.
Os caracteres (.?!) que aparecem como ÚLTIMO caracter da frase quando o problema aparece pois entram na [Ô]if[Ô] abaixo:
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:
é isto?!?
[][ô]s,
Tunusat.
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.
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?
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?
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:
Avisa aà o que vai decidir fazer
Té+
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é+
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.
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.
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:
Desde já agradeço a todos a vossa colaboração.
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.
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
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
Olá Pegudo.
Estive a experimentar seu código e também não deu certo, veja a simulação.
Estive a experimentar seu código e também não deu certo, veja a simulação.
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
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
Tópico encerrado , respostas não são mais permitidas