VB .NET - Convertendo RTF para Texto


Se você precisa converter textos no formato RTF(Rich Text Format) para o formato TXT(Texto) vai se surpreender como isso pode ser simples de ser feito no VB .NET.(pelo menos para arquivos pequenos)

Crie um novo projeto no VB .NET 2010 Express Edition do tipo Windows Forms Application e com o nome ConverterRTF_Texto;

No formulário form1.vb inclua duas Labels, duas caixas de texto e um controle Button conforme o leiaute abaixo:

A seguir no menu Project clique em Add Class e informe o nome RtfTexto.vb;

Digite o código abaixo nesta classe:

Imports System.Text
Imports System.IO

Public Class ConverteRTFTexto

    Public Shared Function Converter(ByVal Origem As String, ByVal Saida As String) As Boolean

        Dim rbox As New RichTextBox()
        Dim sb As New StringBuilder()
        Dim sw As StreamWriter

        If Not File.Exists(Origem) Then
            Return False
        Else
            'Abre o arquivo richtext origem
            rbox.LoadFile(Origem, RichTextBoxStreamType.RichText)
            'Anexa texto no string builder.
            sb.Append(rbox.Text).Replace(vbLf, vbCrLf)
            Try
                'Cria um nova saida
                sw = New StreamWriter(Saida)
                'Escreve o texto
                sw.Write(sb.ToString())
                'Fecha o arquivo.
                sw.Close()
                'limpa
                sb = Nothing
            Catch ex As Exception
                Return False
            End Try
        End If

        'operação concluida com sucesso
        Return True
    End Function
End Class

Observe que usamos a classe StringBuilder mas porque não usamos uma String ??

Toda vez que você usa um dos métodos da classe System.String , você cria um novo objeto string na memória , o qual requer uma nova alocação de espaço para o objeto criado. Em situações onde você precisa realizar repetidas modificações em uma string a sobrecarga de ter que criar um novo objeto String pode lhe trazer problemas.

 

Nestas situações é que entra a classe StringBuilder ,  ela faz parte do namespace System.Text ; então a classe System.Text.StringBuilder pode ser usada para modificar uma string sem que seja necessário criar um novo objeto. Por exemplo a concatenação de strings em um loop pode ser uma destas situações onde o uso de StringBuilder pode melhorar muito o desempenho do seu código.

 

Podemos pensar no objeto StringBuilder como um buffer dinâmico que pode conter uma String com a habilidade de aumentar seu tamanho a partir do zero até a capacidade final do buffer. O tamanho do buffer vai crescendo a medida que o tamanho dos caracteres presentes no objeto StringBuilder vai aumentando.

 

Podemos definir um número máximo de caracteres que o objeto StringBuilder pode manipular . Este valor é chamado de capacidade do objeto e não pode ser confundido com o comprimento da string contida no objeto atual. 

 

Por exemplo podemos criar um instância da classe StringBuilder com a string "Macoratti" que possui um tamanho de 9 , e ao mesmo tempo podemos definir a capacidade máxima do objeto como sendo de 25. Ao modificar o objeto StringBuilder , ele não faz a realocação de tamanho até que a capacidade máxima seja alcançada ; quando isto ocorre novo espaço é alocado automaticamente e a capacidade dobra de tamanho. Vejamos como podemos criar um objeto StringBuilder :

  1. Dim MeuStringBuilder As New StringBuilder("Hello World!", 25) - cria um objeto sb do tipo StringBuilder com a capacidade de 25 caracteres
  2. Dim sb As New System.Text.StringBuilder(1000)                        - cria um objeto sb do tipo StringBuilder com a capacidade de 1000 caracteres

A classe System.Text.StringBuilder obtém uma melhor performance no tratamento de strings justamente porque ela aloca o espaço inicial quando uma instância do objeto é criada por isso ele foi usada neste caso.

Após isso inclua no evento Click do Botão de comando o seguinte código:

 Private Sub btnConverter_Click(sender As System.Object, e As System.EventArgs) Handles btnConverter.Click

        Dim converterRTF_Texto As Boolean = ConverteRTFTexto.Converter(txtRTF.Text, txtTexto.Text)

        If converterRTF_Texto Then
            MessageBox.Show("A conversão foi realizada com sucesso", "Conversor RTF-Texto", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        Else
            MessageBox.Show("A conversão FALHOU...", "Conversor RTF-Texto", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If
    End Sub

E esta pronto um mini conversor RTF/TXT; tudo muito simples como só o VB .NET é capaz de fazer.

Pegue o projeto completo aqui: ConverterRTF_Texto.zip

Veja os Destaques e novidades do SUPER CD VB 2012 (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C# 2012 com exclusivo material de suporte e vídeo aulas com curso básico sobre C#.

 

Heb 3:10 Por isto me indignei contra essa geração, e disse: Estes sempre erram em seu coração, e não chegaram a conhecer os meus caminhos.

Heb 3:11 Assim jurei na minha ira: Não entrarão no meu descanso.

Heb 3:12 Vede, irmãos, que nunca se ache em qualquer de vós um perverso coração de incredulidade, para se apartar do Deus vivo;

Referências:


José Carlos Macoratti