Exercícios Resolvidos de Arquivos

Ver Teoria

Enunciado

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

Resposta