sexta-feira, 2 de dezembro de 2016

Convertendo arquivos em lote para UTF-8

Recentemente adotamos o Phabricator na empresa, com isso a medida que estamos portando os projetos da ferramenta anterior para ele vamos descobrindo ajustes necessários para uma melhor utilização.

Basicamente para que o Diffusion do Phabricator possa realizar as comparações de mudanças realizadas entre uma versão e outra é necessário que os arquivos dos códigos fontes estejam em UTF8 e alguns projetos antigos que temos, ainda estava sendo utilizado o formato ANSI o que acabava fazendo com que o Phabricator identifica-se estes arquivos como binário e não permiti-se que o diff fosse realizado.

Para resolver isso utilizamos o Notepad++ instalando um plugin chamado Python Script que permite executarmos scripts escritos em Python manipulando o Notepad++. Para instalar o plugin é super simples basta acessar o menu Plugins -> Plugin Manager, encontrar o plugin Python Script, seleciona-lo e clicar em Install. Reinicie o Notepad++ após a instalação.

Com o plugin instalado vá no menu Plugins -> Python Script -> New Script em seguida digite o código abaixo:

import os;
import sys;

srcFilePath="C:\\Files\\Projects\\XProject\\src"

for root, dirs, files in os.walk(srcFilePath):
  for fn in files:
   console.write("Processando: " + root + "\\" + fn + " ext -> " + fn[-4:] + "\r\n")
   if fn[-4:] == '.pas':
 notepad.open(root + "\\" + fn)
 console.write(root + "\\" + fn + "\r\n")
 notepad.runMenuCommand("Formatar","Converter para UTF-8 (sem BOM)")
 notepad.save()
 notepad.close()


Salve no diretório padrão aberto automaticamente ao salvar para que o plugin possa carregar seu script.

Feito isso vá no menu do plugin novamente e abra o console clicando na opção Show Console, para que seja possível acompanhar o log de execução. Em seguida vá no menu do plugin -> Scripts -> Selecione a opção com o nome do arquivo do script que você salvou.

* Nota: Não esquece de alterar o caminho da variável srcFilePath para o de seu projeto e o tipo de arquivo filtrado pela comparação.

Se você digitou digitou certinho o log será preenchido e seus arquivos serão convertidos automaticamente.

Abraço a todos,
Diego Garcia



Um comentário:

  1. Boa tarde Diego,
    Carinha estou utilizando seu script para realizar uma conversao em arquivos xml s fiz as alteracoes na linha 4 colocando meu projeto e alterei a linha 9 colocando a extensao xml. so que retorna erro na linha 10 .

    notepad.open(root + "\\" + fn)
    ^
    IndentationError: expected an indented block
    Saberia me dizer o que esta de errado?

    segue o script completo e alterado
    import os;
    import sys;

    srcFilePath="C:\\Empresa_01"

    for root, dirs, files in os.walk(srcFilePath):
    for fn in files:
    console.write("Processando: " + root + "\\" + fn + " ext -> " + fn[-4:] + "\r\n")
    if fn[-4:] == '.xml':
    notepad.open(root + "\\" + fn)
    console.write(root + "\\" + fn + "\r\n")
    notepad.runMenuCommand("Formatar","Converter para UTF-8 (sem BOM)")
    notepad.save()
    notepad.close()

    ResponderExcluir