View Full Version : duvida grande c ajuda por favor


geral
02-06-2007, 19:47
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

#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");
}

geral
02-06-2007, 21:30
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:password@máquina: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:ghest@ftp.ci.utad.pt OK
http://www.mtl.net:8080/default.htm OK
http://www.rty.org:/pag1.htm ERR
http://servidor.com/#fim ERR

Jeust
04-06-2007, 01:59
mete dúvidas mais específicas... pk isto visto assim é um bocadinho dose industrial :p

geral
04-06-2007, 13:06
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[i], protocol);

if(strcmp(protocol, PROTOCOLS[i]) == 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[i], &mes[i], &dia[i], &hora[i], &minuto[i], &segundo[i], &bra, &url2);
printf ("\n\nAno: %d Mes: %d Dia: %d\n\nHora: %d-%d-%d\n\nUrl: %s\n",ano[i], mes[i], dia[i], hora[i], minuto[i], segundo[i], 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);
}

raVemjr
04-06-2007, 16:29
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?

Jeust
04-06-2007, 23:22
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