Lectura de archivo log, error al eliminar IPs duplicadas!

Iniciado por falconez, 8 Junio 2015, 04:31 AM

0 Miembros y 1 Visitante están viendo este tema.

falconez

Tengo un problema al eliminar las direcciones IP que se repiten!

Código (cpp) [Seleccionar]

#include <iostream>
#include <cstdlib>
#include <fstream>
#include <ctime>
#include <string>
#include<cstdio>

using namespace std;

/*
*Leer el log y extraer la primera dirección IP  (nnn.nnn.nnn.nnn).
*Guardar la dirección ip en una lista -evitar que se repite la dirección ip.
*Resumir cuantas veces se repite cada ip y visualizar en un SVG el resumen.
*/

struct miDataStruct {
   string direccionIP;
   int id;
};

struct nodo {
   miDataStruct datoDelNodo;
   nodo *ant;
   nodo *next;
};


//PROTOTIPOS

void archivos_lectura(nodo * list);
int getPosition(string linea,int opcion,int ini);
//FUNCIONES DE MI LISTA DOBLE
nodo * new_list();
nodo * insert_right(nodo *list, nodo data);
void printListAsc(nodo *head);
void printListDesc(nodo *head);
void printList(  nodo* list);

void borrarNodo(nodo **head, nodo *node);
void removerDuplicado(nodo **head);



int main () {
   
nodo *head = new_list();
    nodo *current = head;
     archivos_lectura(current);

     printList( current);
    removerDuplicado(&head);
 
 
 
 return 0;
}

nodo * new_list(){
   
   nodo *newelement= new nodo;
   newelement->datoDelNodo.direccionIP = - 1 ;
   newelement->next = newelement;
   newelement->ant = newelement;
   return newelement;
 
}

void addList(  nodo *list , string number){    
       nodo *newelement = new nodo;
       newelement->datoDelNodo.direccionIP = number;      
       newelement->next = list;
       newelement->ant = list->ant;
       list->ant = newelement;
       newelement->ant->next = newelement;
}


void printListAsc(nodo *head) {
   nodo *current = head;
   while (current->next != head) {
       current = current->next;        
       printList(current);      
   }
}


void printListDesc(nodo *head) {
   nodo *current = head;
   //printNode(current);
   while (current->ant != head) {
       current = current->ant;
       printList(current);
       
   }
}

void printList(  nodo* list){
nodo *head = list;
nodo *current = list;
int i=1;
char caracter;
while (current != head->ant){
           current=current->next;
           cout<<"LINEA --------> "<<i++<<endl<<endl;
      cout<<"Numero de IP: "<<current->datoDelNodo.direccionIP<<endl;
      cout<<"__________________________________"<<endl<<endl;
     // caracter = getchar();
      //getch();
       }
cout<< endl ;

}

// Proceso de los ficheros...

//Obteniendo la posicion de los datos del .log        
int getPosition(string linea,int opcion,int ini){
   
int r;

switch(opcion) {
   case 1:
       r = linea.find("UDP") + 4;break;
   case 2:
       r=linea.find(" ",ini);break;
}
// -----> En caso de mas parametros a obtener, mas case; <-
return r;
}


void archivos_lectura(nodo * list) {
 nodo *current=list;  
 
 string line;
 ifstream myfile ("firewall_1.log");
 int p1,p2;
 string numero;
 
 nodo myDataIP;
 
 if (myfile.is_open())
 {
   while ( getline (myfile,line) )
   {
       p1 =getPosition(line,1,0); // p1=29
       p2=getPosition(line,2,p1);
       numero=line.substr(p1,p2-p1);    
       addList(current,numero);
     
       //cout << line << '\n';
   }
   
   myfile.close();
 }

 else cout << "Unable to open file";
}


// FUNCIONES PARA ELIMINAR LOS DUPLICADOS

void removerDuplicado(nodo **head)
{
if((*head)->next == NULL) return;
nodo *current = *head;
nodo *aux;
while(current) {
aux = current->next;
while(aux) {
if(current->datoDelNodo.direccionIP == aux->datoDelNodo.direccionIP) {
borrarNodo(head, aux);
}
aux = aux->next;
}
current = current->next;
}
return;
}



void borrarNodo(nodo **head, nodo *node)
{
nodo *current = *head;
nodo *ant = *head;
if(node == *head) {
if((*head)->next != NULL) {
*head = (*head)->next;
}
return;
}
while(current) {
if(current == node) {
ant->next = current->next;
return;
}
ant = current;
current = current->next;
}
}



//aqui les adjunto el codigo completo con el archivo log para que lo abran como proyecto!
https://mega.co.nz/#F!L8NSyIxZ!RZX98C_HXUVnnwaW30UYFw

Mod: No escribir en mayúsculas