Friday, September 15, 2017

Caray! O MS-DOS tinha um "ls" com parâmetros?! O MS-DOS tinha pipes?! O MS-DOS tinha GREP?! SIM, TINHA!

Ai porque os utilitários Linux isto, os utilitários Linux aquilo... Rá! O velho MS-DOS já tinha MUITAS destas funções!  
Quanto a pipes, por exemplo, o site do Linux Project diz "A pipe is a form of redirection that is used in Linux and other Unix-like operating systems to send the output of one program to another program for further processing."  (veja http://www.linfo.org/pipes.html).

"Linux and other Unix-like operating systems"???!!!
Mas o velho MS-DOS já fazia isto!  O DOS já tinha pipes!
Utilitários para classificação, para localização de textos dentro de arquivos, o DOS também tinha!
Mostro abaixo dois exemplos - exemplos práticos, reais, que resolveram problemas reais - de uso...
não diria avançado, mas "correto", do DOS, que usam vários destes recursos.
Notem que não estou dizendo que o DOS é melhor que o Linux.  O que quero salientar é que muita gente que não sabe nada de DOS fica afirmando que Linux é melhor...  porque faz as coisas que o DOS faz!  Não se pode comparar duas coisas quando não se conhece uma delas!

Linux é ótimo, mas vamos valorizar o Linux pelo que trouxe de novo e de aperfeiçoamento, e não por reproduzir o que já existe há trinta anos! 

Usando "pipes" no DOS
Veja um exemplo no comando abaixo
dir frm*.vb /b /on | findstr /I /V /L "designer" > ListaDeForms.txt
Ou seja,
"Sr. Comando DIR,
liste todos os arquivos que comecem por "frm" e tenham a extensão ".VB"
use o "formato básico" nesta lista
e classifique-a em ordem alfabética por nome de arquivo
ao final passe o resultado para o comando FINDSTR".
"Sr. Comando FINDSTR,
faça uma comparação ignorando a diferença entre maiúsculas/minúsculas,
e selecione apenas as linhas que NÃO contém
a literal "designer"
ao final armazene o resultado em um arquivo "ListaDeForms.txt"
Que tal?! 


Programando em  DOS
Usando o DOS, a saga continua...  E resolve um problemão: se eu tenho uma biblioteca de controles em WPF/C#, e quero saber quais Windows Forms/VB.Net estão usando um determinado componente, "Find All References" no Visual Studio simplesmente NÃO FUNCIONA. 
Mas e se eu usar comandos DOS para inspecionar os fontes? Mais fácil do que andar pra frente!
Posso usar FINDSTR para localizar o instanciamento de uma determinada classe C# nos arquivos do diretório que contém o meu projeto VB.Net:
findstr /N /L "NomeDaClasse()" frm*.vb
Com "/N", a saída vai incluir até mesmo o número da linha, como por exemplo
frmNomeDoArquivoFonte.vb:327: NomeDaClasse = New NomeDaClasse()

Como eu sou preguiçoso e não quero ficar digitando (ou editando o mesmo comando várias vezes (no meu caso trinta vezes, tenho trinta controles que quero localizar onde/se são usados), resolvi criar um .BAT para facilitar:
C:\DiretorioDoProjeto>copy con Procura.bat
findstr /I /N /L "%1()" frm*.vb
^Z
1 arquivo(s) copiado(s).

Rá rá, notem que chutei o balde e não usei editor nenhum, usei COPY CON pra criar o arquivo! 
"copy con nome-de-arquivo" faz o DOS copiar o que digito para o "nome-de-arquivo".

Ou seja, o que digito é inserido no arquivo "Procura.bat".  Ctrl+Z encerra a entrada de dados.

Notem o "%1" na linha do comando "findstr" - é um placeholder para um parâmero que será fornecido em tempo de execução do .BAT.

Bom, uma vez criado meu BAT, posso comandar simplesmente
C:\DiretorioDoPRojeto>procura NomeDaClasse
e obtenho o resultado desejado: os nomes de todos os arquivos onde a classe é instanciada, e os números das linhas!


No comments: