Uma empresa permite que seus funcionários façam chamadas internacionais a partir de
seus ramais, mas mantém um registro dessas ligações no arquivo “ci.txt”. Cada linha do
arquivo contém a matrícula de um funcionário (inteiro), o número de chamadas realizadas
pelo mesmo (inteiro) e a duração em minutos de cada uma das ligações (real). Faça um
programa que leia o arquivo “ci.txt” e gere o arquivo “totais.txt”. O arquivo “totais.txt”
deverá conter, para cada funcionário que efetuou chamadas internacionais, uma linha com
seu número de matrícula e a duração total de suas chamadas. A última linha do arquivo deve
conter a duração total das chamadas internacionais.
Exemplo (apenas um exemplo!):
Passo 1
E aí, doido! Nessa questão o enunciado dá o modelo do arquivo de entrada. A gente precisa fazer um programa que se adapte a esse modelo e faça o que o professor pede. Pra facilitar nossa vida, o professor ainda colocou ali um exemplo do resultado pra gente ver se nosso programa tá funcionando na moral...
Então, primeiramente, vamos criar o arquivo ci.txt com o exemplo do professor, e aí depois vamos fazer o programa pra tentar gerar o totais.txt igual ao do professor.
Criei o arquivo na mesma pasta do programa que a gente tá fazendo, e dentro dele vou copiar o arquivo do enunciado.
Agora, vamos começar os trabalhos no editor de código!
Passo 2
Primeiramente, vamos começar abrindo o arquivo e salvando numa variável. E vamos pedir permissão somente de leitura, usando “r” no segundo parâmetro.
Show! Vamos aproveitar pra abrir também o arquivo que a gente precisa criar, o totais.txt. Pra esse a gente pode pedir permissão somente de escrita! E repara que o arquivo não precisa existir pra gente escrever… Ele vai ser criado automaticamente quando o programa for executado, ok?!
Show! Agora, vamos montar nossa estrutura de leitura dos arquivos… A gente quer ler uma linha de cada vez, então vamos usar um for no arquivo, pra gente conseguir iterar por cada linha.
Pronto! Agora, só falta a gente começar a contar os padrões e escrever no arquivo resultante...
Passo 3
Se liga, a gente tem, em cada linha, várias informações separadas por espaços. Pra gente separar essas informações, a gente pode usar o método de string split(‘ ‘). Esse método vai retornar uma lista com as informações separadas!
Então, a ideia é atualizar a variável linha pra deixar de ser uma string com a linha toda e virar uma lista com todos os elementos. Só que repara que, antes de chamar o método split(‘ ‘), eu chamei o strip(). Isso porque as linhas podem terminar com “\n”, mas a gente não quer saber deles… Então, usamos o strip() pra remover os “\n” das linhas, blz?!
Show! Agora vamos aos padrões… Repara que, no exemplo do enunciado, o arquivo “totais.txt” só tem gente que fez alguma ligação. Então bora começar verificando se o funcionário da linha atual fez alguma ligação.
Pronto! Se a segunda informação da linha for diferente de “0”, então o cara já ligou. E repara que esse 0 tá entre aspas, porque a gente leu ele de um arquivo e ele veio, automaticamente, como string. Precisaremos converter ele jaja, mas agora, vamos começar escrevendo no arquivo de saída a matrícula do funcionário atual.
A gente escreveu a matrícula e, logo depois, escrevemos um espaço também, já que a gente separa as informações por espaços… Agora, a gente precisa calcular o número total de minutos que a pessoa ficou no telefone. Então, vamos iterar!
Pronto! A ideia é que a gente pode iterar por todas as informações de tempo (a partir do terceiro elemento da lista) e calcular o somatório. Mas não esquece que pra gente fazer somas, precisamos que esses dados estejam em tipos numéricos, e o enunciado diz que são reais. Por isso converti pra float ali, beleza?!
Depois disso, a gente já pode escrever, na sequência, a quantidade de minutos que esse funcionário ficou no tel no arquivo totais.txt. Vamos usar o método write() de novo pra escrever.
Pronto! Eu escrevi o total de minutos concatenado com um “\n” pra pular linha no arquivo. Mas a gente já ia esquecendo que o enunciado também pede a quantidade total gasta em minutos por todos os funcionários… Então, vamos criar uma variável pra contar essa informação também!
Levando em consideração que o total gasto é o somatório de minutos gastos de todos os funcionários, então a gente pode, a cada loop, incrementar uma variável… Aí, no fim, essa variável vai ter a quantidade de minutos totais, sacou?!
Beleza! Mas precisamos escrever essa informação depois do final do for...
Passo 4
Quando o programa sair do for, então já verificamos e escrevemos os totais de todos os funcionários. Aí, só falta a gente escrever o número de minutos totais e fechar os arquivos… Mas vamos começar pelo começo.
Pronto! Fora do for a gente escreveu a quantidade de minutos totais, que vai ser a última coisa a ser escrita no arquivo. Mas tu se ligou que a gente não converteu pra string antes de escrever? Não é necessário… A gente só converteu da última vez porque precisávamos concatenar com o “\n”, e só dá pra concatenar strings. Agora, vamos fechar os arquivos.
Aeee! Finalizamos o exercício. Mas calma, vamos executar pra ver se o resultado fica igual ao exemplo do professor… Apertei pra executar aqui e surgiu um novo arquivo na pasta do programa.
Vamos abrir ele...
Igualzinho ao do enunciado! hahahah terminamos, ok?! Valeuuuuu