testo da .txt

Discuti dei problemi relativi alla programmazione nel tuo linguaggio preferito!

Moderatori: cb_123, thrantir, tonertemplum

testo da .txt

Messaggiodi `knives` il 24 lug 2009, 20:15

allora ho varie pagine html da cui devo estrapolare tutti gli url e stamparmeli in una lista in un file nuovo.

pensavo di scrivermi 2 linee di codice per velocizzare il tutto, dato che sono all'incirca 100 url a pagina e le pagine sono una decina, solo che, oltre ad aprire il file, e leggerlo.. ho problemi nella ricerca degli url

io pensavo di sfruttare appunto la sintassi dell html e quindi ricercare nel file in successione prima
tutte le stringe all'interno dei tag "<a e /a>"
e poi ripassare la stessa eliminando esattamente i caratteri " <a href" e "/a>"

solo che questa mia idea, non la so tradurre in codice, dato che qui bazzicano vari programmatori..
idee? suggerimenti? spunti? aiuti? codice?

provero a postare qualcosa nel caso riuscissi a scriverla..
Ultima modifica di `knives` su 26 lug 2009, 22:15, modificato 1 volte in totale.
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

 

Re: testo da .txt

Messaggiodi max10891 il 26 lug 2009, 16:18

ciao knives..

si penso che concettualmente sia giusto...se hai pazienza appena ho un attimino PROVO a fare qualcosa...
max10891
Luce delle stelle
Luce delle stelle
 
Messaggi: 1326
Iscritto il: 22 feb 2006, 16:48
Località: Sovico (MI)

Re: testo da .txt

Messaggiodi `knives` il 27 lug 2009, 22:34

Codice: Seleziona tutto
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>

void ricerca_url(FILE *, FILE *);
void prn_info(char *);
void indentazione(FILE *,FILE *);

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

if (argc != 3){
      prn_info(argv[0]);
      exit(1);}
FILE *ifp,*ofp;

ifp= fopen(argv[1], "r");
ofp=fopen(argv[2],"w");
indentazione(ifp,ofp);
ricerca_url(ifp,ofp);
fclose(ifp);
fclose(ofp);
return 0;
}
void indentazione(FILE *ifp , FILE *ofp){
   int c;
   while((c=getc(ifp))!=EOF){
      putc(c,ofp);
      if(c == '>')
         putc('\n',ofp);
      }
   }
void ricerca_url(FILE *ifp, FILE *ofp){
   char *line;
   char *tag_in="http://";
   char *tag_out=".html";
   while(fgets(line,sizeof(line),ifp))
      {if(strstr(line,tag_in))
         fputs(line,ofp);
         }

}
void prn_info(char *pgm_name){
   printf("scemo\n");}


segmentation fault o scemo.. perchè?
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

Re: testo da .txt

Messaggiodi max10891 il 28 lug 2009, 15:01

ah c++? ok... :D

pensavo a php cisto che c'è una funzione apposta per togliere i tag...

comunque tornando alla tua funzione non capisco cosa faccia esattamente indentazione...

e poi nella fopen non va specificato se il file è di testo o è binario (quindi nelle operazioni diventa wb rb etc) o di testo? non ho mai provato a lasciaresolo r o w
max10891
Luce delle stelle
Luce delle stelle
 
Messaggi: 1326
Iscritto il: 22 feb 2006, 16:48
Località: Sovico (MI)

Re: testo da .txt

Messaggiodi `knives` il 28 lug 2009, 15:47

questo è ansi c
la procedura indentazione mi serve perchè i file source html sono scritti alla caxxo, senza "newline"
e quando poi vado a usare strstr() necessita di sapere o il numero di bit da leggere oppure di trovare un newline oppure OEF.

riguardo ai file di testo o binari r w a e via dicendo non dovrebbero appunto essere per il testo?
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

Re: testo da .txt

Messaggiodi `knives` il 28 lug 2009, 23:28

Codice: Seleziona tutto
void ricerca_url(FILE *tmp,FILE *ofp){
   int n;
   char  line[256];
   printf("bah\n\n");
    while(getc(tmp)!=EOF){
      fgets(line,sizeof(line),tmp);
      if (strstr(line,"http:"))
         printf("%s",line);
   }

}


ma perchè non entra nel ciclio while?
sicuro cè qualcosa che non torna nei file che crea, perche nel file di testo che gli do io ci lavora senza problemi, in quello che si crea lui no..
so che in unix la gestione dei file e degli \n è diversa, ma come posso gestirli?
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

Re: testo da .txt

Messaggiodi thrantir il 29 lug 2009, 11:35

i \n non dovrebbero inficiare niente

ma se provi ad aprire il file con un editor cosa succede?
Fletto i muscoli e sono nel vuoto
Principi di architettura degli eleboratori
X postare immagini
-----BEGIN GEEK CODE BLOCK-----
GCS/IT/L/MU d- s: a C++$>+++ UL+>++ P L+++>++++ E--- W++ N++>+++ o+>++ K? w O-- M- VMS? V- PS++ Y+ PGP+ t 5? X+ R++>+++ tv+ b+++>++++ DI+++ D++ G e++ h- r++ y++
------END GEEK CODE BLOCK------
Addio Dani, sono più ricco perchè ti ho conosciuto
Avatar utente
thrantir
Moderatore
Moderatore
 
Messaggi: 8897
Iscritto il: 27 mag 2003, 13:32
Località: Pisa

Re: testo da .txt

Messaggiodi `knives` il 29 lug 2009, 12:20

il file tmp è indentato e perfetto,
il file url invece è vuoto.

il segmentatio fault deriva dalla gestione dei file..
provero a compirlarlo sotto windows a vedere perchè il while dentro a indentazione funziona, e quello dentro a ricerca_url no.. essi che è uguale
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

Re: testo da .txt

Messaggiodi max10891 il 30 lug 2009, 00:19

ma nella ricerca il puntatore al file tmp non dovrebbe essere quello che in indentazione era chiamato ofp?

e poi ofp della ricerca essere il puntatore al file finale dove ci vanno gli url??

spero di non aver fatto confusione... (visto che non conosco ansi c...)
max10891
Luce delle stelle
Luce delle stelle
 
Messaggi: 1326
Iscritto il: 22 feb 2006, 16:48
Località: Sovico (MI)

Re: testo da .txt

Messaggiodi thrantir il 03 ago 2009, 16:43

gia', ora che mi viene in mente, non e' che devi ri-inizializzare le gli indici di scorrimento dei file?

ci posti il codice intero?
Fletto i muscoli e sono nel vuoto
Principi di architettura degli eleboratori
X postare immagini
-----BEGIN GEEK CODE BLOCK-----
GCS/IT/L/MU d- s: a C++$>+++ UL+>++ P L+++>++++ E--- W++ N++>+++ o+>++ K? w O-- M- VMS? V- PS++ Y+ PGP+ t 5? X+ R++>+++ tv+ b+++>++++ DI+++ D++ G e++ h- r++ y++
------END GEEK CODE BLOCK------
Addio Dani, sono più ricco perchè ti ho conosciuto
Avatar utente
thrantir
Moderatore
Moderatore
 
Messaggi: 8897
Iscritto il: 27 mag 2003, 13:32
Località: Pisa

Re: testo da .txt

Messaggiodi `knives` il 10 ago 2009, 20:42

Codice: Seleziona tutto
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>

void ricerca_url(FILE *,FILE *);
//void prn_info(char *);
void indentazione(FILE *,FILE *);

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

   /*if (argc != 3){
      prn_info(argv[0]);
      exit(1);}*/
FILE *ifp,*ofp,*tmp;
ifp= fopen("web.txt", "r+");
tmp=fopen("tmp.txt","wb+");
ofp=fopen("url.txt","wb+");
indentazione(ifp,tmp);
ricerca_url(tmp,ofp);
fclose(ifp);
fclose(tmp);
fclose(ofp);
return 0;
}
void indentazione(FILE *ifp , FILE *tmp){
   int c;
   while((c=getc(ifp))!=EOF){
      putc(c,tmp);
      if(c == '>')
         putc('\n',tmp);
      }
   }
void ricerca_url(FILE *tmp,FILE *ofp){
   int n;
   char  line[256];
   printf("bah\n\n");
    while(getc(tmp)!=EOF){
      fgets(line,sizeof(line),tmp);
      if (strstr(line,"http:"))
         printf("%s",line);
   }

}


per praticità ricerca url non scrive in un file ma sullo stdout.
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

Re: testo da .txt

Messaggiodi thrantir il 11 ago 2009, 14:07

come immaginavo, il problema era che il "cursore" del file era gia' alla fine, il tutto si sistema facilmente con una fseek

Codice: Seleziona tutto
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <limits.h>

void ricerca_url(FILE *,FILE *);
//void prn_info(char *);
void indentazione(FILE *,FILE *);

int main(int argc, char **argv){
    FILE *ifp,*ofp,*tmp;

    //if (argc != 3){
    //  prn_info(argv[0]);
    //  exit(1);
    //}

    ifp = fopen("web.txt", "r+");
    tmp = fopen("tmp.txt","wb+");
    ofp = fopen("url.txt","wb+");

    assert(ifp != NULL);
    assert(ofp != NULL);
    assert(tmp != NULL);

    indentazione(ifp, tmp);

    ricerca_url(tmp,ofp);

    fclose(ifp);
    fclose(tmp);
    fclose(ofp);

    return 0;
}

void indentazione(FILE *ifp , FILE *tmp){
   int c;
   while((c=getc(ifp))!=EOF){
      putc(c,tmp);
      if(c == '>') {
         putc('\n',tmp);
      }
   }
}

void ricerca_url(FILE *tmp,FILE *ofp){
   int n;
   char  line[256];

   printf("ftell: %li\n\n", ftell(tmp));
   fseek(tmp, 0, SEEK_SET);
   printf("ftell: %li\n\n", ftell(tmp));

   while(getc(tmp)!=EOF) {
      fgets(line,sizeof(line),tmp);
      if(strstr(line,"http:")) {
         printf("%s",line);
      }
   }
}
Fletto i muscoli e sono nel vuoto
Principi di architettura degli eleboratori
X postare immagini
-----BEGIN GEEK CODE BLOCK-----
GCS/IT/L/MU d- s: a C++$>+++ UL+>++ P L+++>++++ E--- W++ N++>+++ o+>++ K? w O-- M- VMS? V- PS++ Y+ PGP+ t 5? X+ R++>+++ tv+ b+++>++++ DI+++ D++ G e++ h- r++ y++
------END GEEK CODE BLOCK------
Addio Dani, sono più ricco perchè ti ho conosciuto
Avatar utente
thrantir
Moderatore
Moderatore
 
Messaggi: 8897
Iscritto il: 27 mag 2003, 13:32
Località: Pisa

Re: testo da .txt

Messaggiodi thrantir il 11 ago 2009, 14:12

ftell ti dice in che posizione sta il cursore, fseek posiziona il cursore. I parametri di fseek sono:

- il FILE* relativo allo stream
- l'offset
- la posizione da cui partire, che puo' essere l'inizio (SEEK_SET), la posizione corrente (SEEK_CUR) o la fine(SEEK_END)

il cursore viene posizionato nel punto corrispondente a posizione di partenza + offset
Fletto i muscoli e sono nel vuoto
Principi di architettura degli eleboratori
X postare immagini
-----BEGIN GEEK CODE BLOCK-----
GCS/IT/L/MU d- s: a C++$>+++ UL+>++ P L+++>++++ E--- W++ N++>+++ o+>++ K? w O-- M- VMS? V- PS++ Y+ PGP+ t 5? X+ R++>+++ tv+ b+++>++++ DI+++ D++ G e++ h- r++ y++
------END GEEK CODE BLOCK------
Addio Dani, sono più ricco perchè ti ho conosciuto
Avatar utente
thrantir
Moderatore
Moderatore
 
Messaggi: 8897
Iscritto il: 27 mag 2003, 13:32
Località: Pisa

Re: testo da .txt

Messaggiodi `knives` il 13 ago 2009, 21:53

orca..lo sapevo ma non mi ricordavo piu...
eh vedi a non programmare mai.. :)

grazies!
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

 

Torna a Programmare

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

cron