Um determinado arquivo contém números de 1 a 1045, mas foram gravados fora de ordem. Ao tentar ordená-lo com o comando
$ cat num.txt | sort
tive como resposta a listagem de todos os números que começam com 1, em seguida os que começam com 2 e assim por diante. Logo, não é a forma esperada e para resolver esta situação é preciso preencher com 0 (zero) até que cada número tenha 4 algarismos. Em outras palavras, ficará assim:
0001, 0002, ..., 0009, 0010, ..., 0099, 0100, ..., 0999, 1000, ..., 1045
O código-fonte que apresento desta vez é da linguagem C#. No IDE Visual Studio, abra um novo projeto e escolha o Template: Console Application. Esta opção chama o prompt de comando que é exclusivamente texto.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace AjeitaParaNumerar { class Program { static void Main(string[] args) { int i, quantidade=0; Console.WriteLine("Este programa le um arquivo de nome num.txt e coloca 3 zeros se o numero for menor que 10, 2 zeros se maior do que 9 e menor do que 100 e por fim, 1 zero se maior do que 99 e moneor do que 1000."); StreamReader sr = new StreamReader("num.txt"); string leitura; while ((leitura = sr.ReadLine()) != null) { quantidade++; } sr.Close(); StreamWriter sw = new StreamWriter("ok.txt"); sr = new StreamReader("num.txt"); for (i = 0; i < quantidade; i++) { string[] valor = new string[quantidade]; valor[i] = sr.ReadLine(); if (Convert.ToInt32(valor[i]) < 10) { valor[i] = valor[i].PadLeft(4, '0'); sw.WriteLine(valor[i]); } else if (Convert.ToInt32(valor[i]) > 9 && Convert.ToInt32(valor[i]) < 100) { valor[i] = valor[i].PadLeft(4, '0'); sw.WriteLine(valor[i]); } else if (Convert.ToInt32(valor[i]) > 99 && Convert.ToInt32(valor[i]) < 1000) { valor[i] = valor[i].PadLeft(4, '0'); sw.WriteLine(valor[i]); } else { sw.WriteLine(valor[i]); } } sr.Close(); sw.Close(); } } }
Mesmo que o código tenha sido desenvolvido em outro sistema operacional, é possível executá-lo no Linux. Para tal, instale o pacote mono-mcs e em seguida execute a linha de comando com o comando mcs com a seguinte sintaxe:
$ mcs fonte.cs -o nome_do_arquivo
Exemplificando supondo que eu escolhi que nome_do_arquivo seja ajeita.out:
$ mcs Program.cs -o ajeita.out
Como resultado, o arquivo ajeita.out não é executável e para torná-lo, basta usar o procedimento usual de dar permissão de execução:
$ chmod a+x ajeita.out
Finalmente, para executá-lo, faça simplesmente:
$ ./ajeita.out
Ao fim da execução, o arquivo ok.txt foi criado e seu conteúdo é a listagem dos 1045 números com quatro algarismos.
Conclusão: O projeto mono permite uma incrível portabilidade para o Linux. Há muitas facilidades por causa dos métodos prontos do C# e por esta razão, torna o desenvolvimento rápido e capaz de funcionar nos dois sistemas operacionais.
Adicionalmente, ao executar o comando para ordenar os números (cat ok.txt | sort), funcionou perfeitamente.
Nenhum comentário:
Postar um comentário