Situação problema
Conversão de Ips através de um txt fonte da imagem: Projeto - Laboratório de Desenvolvimento II |
O programa consiste em abrir um arquivo .txt, ler ele e depois classificar os ips e gravar as alterações em outro arquivo .txt. Os primeiros problemas levantados são: conversão de valores já que tudo é string quando é "lido" de um arquivo, condições lógicas para classificação e manipulação de valores para serem salvos em outros arquivo. Quero ressaltar que ao longo dos meses foram colocados programas com funções para auxiliarem nesse processo!
#include <conio.h>
#include <stdio.h>
#include <string.h>
main(){
FILE *original, *copia;
char leitura[17];
char *ponteiro;
int ip[3],aux[3],i;
/*Cabeçalho do nosso programa, obviamente se iremos trabalhar com arquivos devemos criar variáveis do tipo FILE, um ponteiro para manipular principalmente posições e troca de valores, fora os contados e variáveis auxiliares*/
original = fopen("Lista Ips.txt","r");
copia = fopen("Lista Ips2.txt","w");
/*Aqui estamos inicializando nossos arquivos, o primeiro para leitura "r" e o outro para gravação "w"*/
while (fgets(leitura,16,original) != NULL){
i=0;
ponteiro=strtok(leitura,"."); //particiona o ip lido
while (ponteiro != NULL){
ip[i] = atoi(ponteiro);
aux[i]=ip[i];
i++;
ponteiro=strtok(NULL,".");
} //FIM WHILE
/*Acredito que seja a parte mais difícil do programa, primeiro utilizamos um while para "varrer" o arquivo txt por inteiro, auxiliado pelo comando "fgets" que copia linha por linha. A função strtok particiona o ip, se ainda estiver com dúvidas veja essa postagem.A função "atoi" converte valores string em inteiros... como havia dito, tudo que é lido no arquivo é string, por isso a necessidade de conversão*/
if(aux[0]== 0) continue;else if(ip[0]==127 && ip[1]==0 && ip[1]<256 && ip[2]==0 && ip[2]<256 && ip[3]==1 && ip[3]<256){
fprintf(copia,"%d.%d.%d - localhost \n\n", aux[0],aux[1],aux[2],aux[3]);
}else if(ip[0]>0 && ip[0]<128 && ip[1]<256 && ip[2]<256 && ip[3]<256){
fprintf(copia,"%d.%d.%d - Classe a \n\n", aux[0],aux[1],aux[2],aux[3]);
}else if(ip[0]>127 && ip[0]<192 && ip[1]>0 && ip[1]<256 && ip[2]<256 && ip[3]<256){
fprintf(copia,"%d.%d.%d - Classe b \n\n", aux[0],aux[1],aux[2],aux[3]);
}else if(ip[0]> 191 && ip[0]<224 && ip[1]<256 && ip[2]<256 && ip[3]<256){
fprintf(copia,"%d.%d.%d - Classe c \n\n", aux[0],aux[1],aux[2],aux[3]);
}else if(ip[0]>223 && ip[0]<240 && ip[1]<256 && ip[2]<256 && ip[3]<256){
fprintf(copia,"%d.%d.%d - Classe d \n\n", aux[0],aux[1],aux[2],aux[3]);
}else if(ip[0]>239 && ip[0]<248 && ip[1]<256 && ip[2]<256 && ip[3]<255){
fprintf(copia,"%d.%d.%d - Classe e \n\n", aux[0],aux[1],aux[2],aux[3]);
}else if(ip[0]<0 && ip[1]<0 && ip[2]<0 && ip[3]<0){
fprintf(copia,"%d.%d.%d - desconhecido \n\n", aux[0],aux[1],aux[2],aux[3]);
}else{
fprintf(copia,"%d.%d.%d - desconhecido \n\n", aux[0],aux[1],aux[2],aux[3]);
} //FIM IF
} // FIM WHILE
/*Aqui é a parte do programa mais trabalhosa, onde são testados os tipos de ip. Vale salientar que a função "fprintf" é a mais indicada porque nos permite "enviar" qualquer tipo de variável para os arquivos, caso contrário seria necessário converter para string!*/
fclose(original);
fclose(copia);
} //FIM MAIN
/*Aqui fechamos os arquivos, nunca se esqueçam disso, é importante!*/
Bom pessoal é isso, o programa está feito, agora por favor não copiem o código apenas, tentem entender o que está sendo feito e principalmente implementem. Só um parenteses, peguei o programa sem comentários com 210 linhas de código e estou devolvendo ele com comentários e 61 linhas HIAOHIAEHOIAEOIAOEI é nois ;DD
grande abraço e boas férias para todos!!!
by Chuck
fonte: < {Lysandro Julio} revisado e implementado {Arroyo, Gabriel}>
Nenhum comentário:
Postar um comentário