Publicidade cabeçário

segunda-feira, 3 de dezembro de 2012

Lab. Desenvolvimento II - Classificação de Ips

  Em primeiro lugar gostaria de agradecer o Lysandro por ter cedido o programa, vlw muleque, a todos que de certa maneira contribuíram na construção dele, como o próprio Lysandro disse: foi um "catado" de códigos incluindo o programa que classifica os ips cedido pelo Jeferson, ao Alison e Cauê que cederam o programa com a função strtok que particiona os ips, enfim, a todos que ajudaram que eu não vou saber dizer aqui, grande abraço do Chuck... VAMOS AO QUE INTERESSA!

Situação problema

Conversão de Ips através de um txt
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}>