por Marcos Elias
Esta dica foi escrita originalmente para ajudar editores de mapas no grupo OMSI Brasil no Facebook. Dada a utilidade do tema, optei por detalhar passo a passo os processos para substituir texto em vários arquivos. Nota: dependendo da versão do Windows Grep, os comandos na tela poderão ser diferentes. Utilizei a versão 2.3.
Muitas vezes é necessário substituir uma série de ocorrências de texto dentro de vários arquivos de uma só vez. Arquivos de texto puro, sabe? Aqueles tipo .txt, independente da extensão, que podem ser abertos com o bloco de notas ou outro editor puro.
Um caso que já passei foi ao lidar com o OMSI, um simulador de ônibus. Os arquivos dos mapas têm a extensão .map, mas no fundo são arquivos de texto. É possível abri-los no bloco de notas ou em qualquer outro editor de textos puro. Ao trocar objetos em série, ou pastas de objetos do mapa, devemos trocar o caminho dos mapas dentro de todos os arquivos .map. Por exemplo, substituir todas as ocorrências da pasta Sceneryobjects\Coisas por Sceneryobjects\Teste.
Pode ser comum em sites da web também: trocar o copyright no rodapé, algum texto ou URL nos arquivos estáticos… Enfim.
Sistemas UNIX-like normalmente contam com o grep. E no Windows? Existem alguns utilitários próprios para isso. Desconheço uma forma nativa de fazer essas substituições, mas alguns programas de terceiros ajudam.
Um dos que experimentei é o Windows Grep, que pode ser baixado em http://www.wingrep.com/. Ele é um shareware mas dá para usar sem pagar por 30 dias. O visual é meio antiquado, mas a eficiência pode fazer valer a pena.
Como usar o Windows Grep para substituir textos em lote?
Ao abrir o programa ele abre um assistente. O programa está em inglês, então vou comentar as partes principais. Logo na primeira tela do assistente você deve colocar o que deverá ser pesquisado. Sim, ele serve para procurar textos dentro de arquivos também, não apenas substituir!
Por exemplo, digitei \Marcel, para pegar a pasta \Marcel no caso dos arquivos .map do OMSI. Isso é só um exemplo. Teria que ter certeza que a pasta é exatamente esta, e que outras pastas não serão afetadas. Se ficar na dúvida, vale consultar manualmente os arquivos para ver se não há duplicações (por exemplo, no caso do OMSI, tem que prestar atenção se está substituindo a pasta de objetos ou splines, ou ambas).
Digitando o nome da pasta antiga, deixe marcado Quick, sem expressões regulares (a menos que saiba o que estará fazendo com as outras). Clique em Next.
Na próxima tela você escolherá as pastas onde os arquivos serão pesquisados. No caso do OMSI, provavelmente seria a pasta do mapa que estivesse sendo editado, claro. Apenas para ilustrar, selecionei o mapa de Berlin. Ele precisa ir pra coluna direita. Para isso, com a pasta selecionada no lado esquerdo, clique no botão >, a seta para a direita. Se existirem outras pastas à direita, remova todas as que não quiser alterar. Para removê-la, selecione-a na direita e clique na seta <. É possível adicionar várias pastas, para tornar o processo mais rápido. Deixe marcado o “Search in subfolders” para procurar também nas subpastas. No caso do OMSI, não escolha a pasta maps, e sim a pasta do mapa! Caso contrário, você poderá editar todos os mapas de uma só vez, produzindo um efeito indesejado. Definida(s) a(s) pasta(s), clique em Next.
Na próxima tela definimos o tipo de arquivo pela extensão. O Windows Grep só pesquisará ou substituirá os arquivos com as extensões cadastradas aqui. Remova qualquer extensão que existir ali (por exemplo, *.*, para todos os arquivos) e adicione a extensão desejada, ou as extensões desejadas. No caso que comentei para o OMSI, seria apenas a extensão .map.
Para remover, com a extensão selecionada à direita, clique na seta para esquerda. Para adicionar, digite a máscara no campo “Custom file specification” ou selecione uma acima, e clique na seta para a direita correspondente.
Clicando em Next, você finaliza o assistente. Agora clique em Finish, e o Windows Grep irá efetuar uma pesquisa na pasta. Ele irá procurar pelo texto cadastrado na primeira tela, em todas as pastas da segunda, mas apenas em arquivos que correspondam às extensões definidas.
O resultado da busca será algo assim:
Ele irá listar todos os arquivos encontrados, e em cada arquivo, mostrará a linha que contém o texto pesquisado. Note que o texto pesquisado está em verde. Como coloquei apenas \Marcel, apareceu apenas o \Marcel. Se você fosse diferenciar splines de objetos, deveria usar as pastas completas, como Sceneryobjects\nomedapasta ou Splines\nomedapasta.
Apenas a busca não é o que queremos. Clique no botão A+B na barra de ferramentas. Ele é o botão de substituição.
Como a pesquisa já foi feita, ele apenas irá substituir todas as ocorrências encontradas pelo que você colocar agora.
Basta digitar o novo caminho. Se você usou apenas o nome de uma pasta ou objeto, coloque apenas o nome simples… Se usou o nome com subpastas usando barras, coloque o nome correspondente, para não ficar quebrado. No exemplo deixei isso:
Ao clicar no Next você terá uma série de opções.
São basicamente 3:
What files do you want to replace in?
Esta pergunta é: Em quais arquivos você quer substituir? A primeira opção é referente ao arquivo selecionado (antes de clicar no A+B tinha um arquivo selecionado, certo?). A segunda, mais útil, abrange TODOS os resultados da busca.
A opção do meio:
Do you want to change the original file(s)?
Ela pergunta se você quer alterar os arquivos originais. Para efeitos de edição do mapa no OMSI, não seria nada prático ter as modificações salvas em arquivos diferentes. A primeira opção não altera os originais, criando uma cópia com os arquivos alterados. A segunda (marcada) faz as alterações nos arquivos originais. É a ideal aqui.
A última opção, por fim:
Do you want to confirm each replacement?
Ela pergunta se você deseja confirmar cada substituição. Pode ser bom dependendo do caso, mas se você fez tudo certo, isso é desnecessário. Em alguns casos você pode querer pular um arquivo ou outro, ou verificar manualmente antes de substituir… Então marcaria a segunda, “Ask for confirmation…”. Como a ideia é substituir tudo da forma mais prática possível, deixe a primeira mesmo: “Replace all occurrences without asking”.
Feito isso, clique no Next.
A substituição ainda não começou. Você pode clicar no Back para revisar ou alterar as opções. Para mandar ver, clique no Finish.
Os arquivos serão alterados!!! Por isso é bom ter cópia da pasta antes de fazer o procedimento.
Por fim, ele mostra um relatório com tudo o que foi substituido, arquivo por arquivo.
Mostra inclusive quantas ocorrências foram encontradas em cada arquivo.
Este programa é muito bom para esta tarefa. Ajuda demais trocar pastas de objetos no OMSI, útil quando você altera alguns objetos ou quer utilizar versões diferentes em pastas diferentes, para não dar conflito com outros mapas ou addons.
Normalmente ele cria backups dos arquivos alterados com a extensão .bak. Basta renomeá-los depois ou abri-los com o bloco de notas para recuperar o texto antigo.
O Windows Grep não é o único programa do gênero, é claro – se souber de algum melhor ou sem tempo de expiração, deixe a dica nos comentários!
Lembre-se: ao editar mapas para OMSI, faça backup sempre! O OMSI tem vários bugs e é muito fácil perder o trabalho. Ainda mais alterando diretamente os arquivos :) Só pra lembrar, utilize o Windows Grep com o OMSI fechado, para garantir que os arquivos serão alterados sem interferência do editor.
É isso aí :)
Para dicas específicas do OMSI, acesse meu outro site, omsi.viamep.com :) Na verdade não é bem “meu”, é coletivo.
excelente!!!