Clique no banner para conhecer e adquirir o meu treinamento de Bancos de Dados no Azure

SQL Server – Como converter uma string RTF para texto (Remover tags RTF) utilizando o CLR (C#) ou Powershell

Post Views 11,626 views
Reading time 6 minutes

Olá pessoal,
Tudo bem?

Nesse artigo, vou demonstrar pra vocês como converter uma string RTF para texto (Remover tags RTF) utilizando o CLR (C#) ou Powershell, que foi uma necessidade que tive semana passada, onde um sistema gravava as informações em uma tabela e os dados eram no formato RTF (Rich Text Format). Pesquisei bastante na internet para encontrar soluções que me ajudassem a converter o RTF para texto direto pelo banco de dados e não encontrei muitas alternativas do meu agrado e isso me motivou a escrever esse post para vocês.

Caso você não conheça o CLR ou quer saber mais sobre ele, entender como ele funciona, suas limitações, vantagens, desvantagens e como criar e publicar um novo projeto CLR, dê uma lida no post Introdução ao SQL CLR (Common Language Runtime) no SQL Server.

A solução trivial com C#

Se você fizer essa pesquisa no Google, provavelmente a solução mais comum que você vai encontrar, é essa:

Que é uma solução realmente bem simples e funciona mesmo. Entretanto, eu gostaria de utilizar essa solução pelo banco de dados e por isso, utilizar a biblioteca System.Windows.Forms não é uma ideia muito interessante, visto que essa biblioteca não é carregada por padrão pelo SQL Server e por isso, eu teria que importar o assembly dela e suas dependências (que não são poucas) manualmente no banco de dados, conforme demonstrado abaixo:

Isso aumentaria a complexidade do seu CLR (e também nas publicações) e pode trazer efeitos negativos para a estabilidade da sua instância e por isso, não recomendo essa prática.

A solução com C# utilizando o Helper RichTextStripper

Depois de muitas pesquisas na internet de soluções parecidas, encontrei uma classe chamada RichTextStripper, escrita em C# e desenvolvida pelo Chris Benard, que faz exatamente isso. Ele encontrou um código Python que faz esse trabalho e converteu o código para C#.

Código-fonte da função no CLR

Essa é a função que será gerada no banco de dados e você irá utilizá-la para remover a formatação RTF de strings e colunas no SQL Server, após a publicação do seu CLR e utilizando a classe RichTextStripper.

Demonstração de uso da função

Como vocês podem observar abaixo, o resultado da função é o mesmo que você vai visualizar quando abrir o documento (ou string) no Microsoft Word.

Utilizando a função CLR para remover as tags RDF da string e retornar o texto

Visualizando o conteúdo do RTF no Word

A solução com Powershell

Se você não quer utilizar o CLR (C#) para realizar essa tarefa, não se preocupe. Também é possível fazer isso utilizando Powershell (Posh) e você pode integrá-lo com o SQL Server de várias maneiras utilizando o xp_cmdshell e exportando o resultado para texto ou capturar o retorno do powershell.

O script do Powershell é bem simples. Lembra aquele script simples do C# que postei no começo do post e que eu não queria implementar no CLR pro causa das dependências do Windows.Forms? Então.. No powershell isso não é problema.. 🙂

Código-fonte do Powershell:

Resultado da execução do Powershell

Exemplo 1:
Com isso, você pode utilizar o xp_cmdshell para executar o seu Powershell conforme a sua necessidade:

Exemplo utilizando o -File do PowerShell e informando o caminho de um arquivo que criei previamente com os comandos Posh demonstrados acima

Exemplo 2

Result:

Exemplo utilizando o -Command do PowerShell e informando os parâmetros manualmente

And that's it, folks!
Espero que tenham gostado do post e até a próxima.

sql server clr converter convert remover remove rdf rich text format tags strings para to texto simples plain text c# csharp powershell posh ps

sql server clr converter convert remover remove rdf rich text format tags strings para to texto simples plain text c# csharp powershell posh ps