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

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

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

Resultado:

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

É isso aí, pessoal!
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

SQL, sql server, sql server 2008, sql server 2008 R2, Oracle, Oracle Database, Oracle 11g, Oracle 10g, Oracle 12c, MySQL, Firebird, Consultoria, Consultor, Programador, Programação. Desenvolvedor, Analista de Sistemas, DBA, Criação de website, Criação de Sistema Web, Vitória, Vila Velha, Guarapari, Espírito Santo, ES, Consultoria SQL em VItória, Treinamento, Curso, Prestação de serviço, prestar serviço, freelancer, freela, banco de dados, consultoria em banco de dados, consultor de banco de dados

Deixe uma resposta