1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

duvida grande c ajuda por favor

Discussão em 'Programação' iniciada por geral, 2 de Junho de 2007. (Respostas: 5; Visualizações: 841)

  1. Amigos,
    Venho de começar na programação só que tenho que entregar um projecto que lesse ficheiros logs de maquinas url registados e guardados em memoria será que posso usar este programa para tentar fazer esse.
    por favor ajudem me não sei como hei de de começar
    Código:
    #include <stdio.h>
    #include <iostream>
    #include <string.h>
    #define N 4
    #define NANOS 9
    char validarprot (char* p)
    {
    
        char gen[][6]={"http","ftp","https","rtsp","HTTP","FTP","HTTPS","RTSP"};
        int n;
        
    
    for (n=0;n<8;n++)
    if (strcmp (p,gen[n]) == 0)
    {
    return ('v');
    }
    }
    
        char str1[150],prot[150],maq[150],dom[150];
        char *p1,*p2;
        int ano[N],mes[N],dia[N],hora[N],min[N],seg[N],i;
        char bra,url[100];
        int year, nrecano[NANOS];
        
        
    
    main()
    {   
        
          FILE * pPaz;
          pPaz = fopen ("log.txt","r");  
        
    printf("Insira o url\n\n");
    scanf ("%s", &str1);
         // strcpy(str1,"http://www.google.com/");     
          p1=strstr (str1-1, "");
          p2=strstr (p1+1, ":");
          
          strncpy (prot, p1+1, p2-(p1+1));
          prot[p2-(p1+1)]='\0';
    printf("\nProtocolo: [%s]\n\n", prot);
          
    
         
          p1=strstr (str1, "/");
          p2=strstr (p1+2, "/");
          
          strncpy (maq, p1+2, p2-(p1+2));
          maq[p2-(p1+2)]='\0';
    printf("\nMaquina: [%s]\n\n", maq);
      
      
          p1=strstr (maq, ".");
          if (p1!= NULL)
          {
                   strcpy(dom,p1+1);
                   }
         
    printf("\nDominio: [%s]\n\n", dom);
    
          if ((validarprot(prot)== 'v'))
    printf("\nProtocolo VALIDO\n\n");
          else 
    printf("\nProtocolo INVALIDO\n\n");
    system("pause");
    
    
    
    
    
    
    
    
    for(i=0;i<NANOS;i++)
    {
            nrecano[i]=0;
    }
     
    printf("\nOs ficheiros lidos do log sao:\n");  
    for (i=0; i<N; i++)
    {
    fscanf(pPaz, "%c %d-%d-%d %d:%d:%d %c%s\n" ,&bra, &ano[i], &mes[i], &dia[i], &hora[i], &min[i], &seg[i], &bra, &url); 
    printf ("\n\nAno: [%d]  Mes: [%d]  Dia: [%d]\n\nHora: [%d:%d:%d]\n\nUrl: [%s]\n\n\n\n",ano[i], mes[i], dia[i], hora[i], min[i], seg[i], url);
    system("pause");
    for(year=2000;year<2009;year++)
    {
            if(year==ano[i])
    {
            nrecano[year-2000]++;
    }
    }
    }
    for(year=2000;year<2009;year++)
    {
    printf("Ano=%d, num=%d\n",year,nrecano[year-2000]);
    fclose (pPaz);
    }
    system ("pause"); 
    }
    
     
    Última edição pelo moderador: 3 de Junho de 2007
  2. amigos nao sei se me fiz entender isto e assim tou a desemvolver um programa q e esse q postei mas cheguei ai e tou em bloqueio,ja nao da mais.deixo em anexo o q era para fazer para ser de melhor compreençao:o q esta em cima e a primeira parte ate ao ponto d),mas daqui para baixo ja nao consigo >(

    O programa em C, numa fase mais avançada, deve conter as seguintes funcionalidades:
    d) Ler de ficheiros de logs de máquinas todos os URLs registados e guardar em memória.
    O ficheiro tem, por linha de texto, entre parentesis rectos uma data seguido do registo
    de URL.
    Exemplo:
    [2005-12-01 12:35:01] http://www.utad.pt/pt/ensino_formacao/1ciclo/
    [2005-12-01 12:35:03] http://www.tvcabo.pt/internet/internet.aspx
    [2005-12-01 15:37:21] http://www.google.pt/
    .
    .
    .
    e) Calcular e apresentar no ecrã as estatísticas de protocolos utilizados, domínios
    acedidos, tipos de ficheiros acedidos (pela extensão do ficheiro que identifica o
    recurso):
     Histograma de máquinas (apresentar o número de vezes que cada máquina foi
    consultada).
     Hora do dia com maior número de consultas (calcular para períodos de uma hora
    desde o minuto 0 ao minuto 59).
    f) Efectuar pesquisas de URL, por grupos de informação (protocolo, máquina, caminho
    e/ou recurso), devolvendo/apresentando todos os URLs encontrados.
    g) Considere um formato mais completo para a especificação da máquina e do recurso.
    protocolo://user:p[email protected]:porta/caminho/recurso?query#ancora
    Neste formato a URL pode conter outros campos facultativos com dados de
    autenticação (user:password@), de indicação da porta usada no protocolo (:porta),
    pode haver uma query (?query) ou ainda uma âncora (#ancora) posteriores ao recurso
    (http://en.wikipedia.org/wiki/URL).
    Implementar a verificação sintática de um URL.
    Exemplos:
    http://www.utad.pt/pt/ensino_formacao/1ciclo/ OK
    ftp://ghest:[email protected] OK
    http://www.mtl.net:8080/default.htm OK
    http://www.rty.org:/pag1.htm ERR
    http://servidor.com/#fim ERR
     
  3. Jeust

    Jeust Colaborador
    Staff Member

    mete dúvidas mais específicas... pk isto visto assim é um bocadinho dose industrial :p
     
  4. Tenho este codigo so que quando compilo e executo a janela nao fica se poderem ajudar me
    //Código

    /*
    *
    * Resources:
    *
    * http://en.wikipedia.org/wiki/URL
    *
    * http://en.wikipedia.org/wiki/URI_scheme
    *
    */

    #include <stdio.h>
    #include <string.h>

    #define MAX_PROTOCOL 12
    #define MAX_DOMAIN 255
    #define MAX_PATH 255
    #define MAX_URL 1024
    #define MAX_QUERY 255
    #define N 2

    char PROTOCOLS[][MAX_PROTOCOL] = {"http", "ftp", "rtps", "https"};

    struct URL
    {
    char url[MAX_URL];
    char protocol[MAX_PROTOCOL];
    char domain[MAX_DOMAIN];
    char path[MAX_PATH];
    char query[MAX_QUERY];
    };

    // TODO: case insentive comparison
    int validateProtocol(char PROTOCOLS[][MAX_PROTOCOL], int SIZE, char protocol[MAX_PROTOCOL])
    {
    int i;
    for(i = 0; i < SIZE; i++)
    {
    printf("%s %s\n", PROTOCOLS, protocol);

    if(strcmp(protocol, PROTOCOLS) == 0)
    {
    return 1;
    }
    }

    return 0;
    }

    int main(int argc, char** argv)
    {

    char urlstr[MAX_URL],protocolo[100],dominio[100],*s1,*s2,url2[100];
    char bra;
    int ano[N],mes[N],dia[N],hora[N],minuto[N],segundo[N],i;
    strcpy(urlstr, "http://www.example.com/index.php?foo=bar#anchor");

    struct URL url;
    strcpy(url.url, urlstr);
    printf("URL: %s\n", url.url);

    //http://triton.com.pt

    char *ptr = strtok(urlstr, "://");
    strcpy(url.protocol, ptr);
    printf("protocol: %s\n", url.protocol);

    if(strchr(url.url, '/') != NULL)
    {
    ptr = strtok(NULL, "/");
    strcpy(url.domain, ptr);
    printf("domain: %s\n", url.domain);
    }
    else
    {
    strcpy(url.domain, ptr);
    }

    if(strchr(url.url, '?') != NULL)
    {
    ptr = strtok(NULL, "?");
    strcpy(url.path, ptr);
    printf("path: %s\n", url.path);
    }

    if(strchr(url.url, '#') != NULL)
    {
    ptr = strtok(NULL, "#");
    strcpy(url.query, ptr);
    printf("query: %s\n", url.query);
    }

    //printf("valid: %d\n", validateProtocol(PROTOCOLS, sizeof(PROTOCOLS)/sizeof(PROTOCOLS[0]), url.protocol));


    FILE * pFile;
    pFile = fopen ("urls.txt","r");

    printf("\n\n*******LOG********::");

    for (i=1; i<=N; i++)
    {
    fscanf(pFile, "%c %d-%d-%d %d:%d:%d %c%s\n" ,&bra, &ano, &mes, &dia, &hora, &minuto, &segundo, &bra, &url2);
    printf ("\n\nAno: %d Mes: %d Dia: %d\n\nHora: %d-%d-%d\n\nUrl: %s\n",ano, mes, dia, hora, minuto, segundo, url2);


    s1=strstr (url2-1, "");
    s2=strstr (s1+1, ":");
    strncpy (protocolo, s1+1, s2-(s1+1));
    protocolo[s2-(s1+1)]='\0';


    s1=strstr (url2, ".");
    s2=strstr (s1+1, "/");
    strncpy (dominio,s1+1,s2-(s1+1));
    dominio[s2-(s1+1)]='\0';

    printf("\nDomino %s\n",dominio);

    }
    fclose (pFile);
    }
     
  5. raVemjr

    raVemjr I'm cool cuz I Fold

    Se estás a compilar em Windows, mais concretamente em DevC++, então mete um getchar(); no fim...assim aquilo nunca fecha, a menos que carregues num botão...

    Era essa a tua dúvida?
     
  6. Jeust

    Jeust Colaborador
    Staff Member

    há outra forma de evitar a janela fechar... Podes abrir uma janela da linha de comandos e chamar por lá o teu executável. Assim ela tb já não fecha.

    abraços
     

Partilhar esta Página