Ciao amico del forum!
Ho urgentemente bisogno del tuo aiuto , e se me lo darai prima di tutti gli altri e correttamente ti farò una generosa donazione a mezzo vaglia postale .
Sono disperato . Aiutami !
Tempo fa un mio amico mi aveva scritto un programma in C , che mi serviva per l’università . Serviva a leggere indirizzi e-mail da una pagina web per poi copiarli su un testo .
Il programma però leggeva anche le stringhe
lunghe N caratteri prima di un carattere X e M caratteri dopo di questo . Io all’università faccio java e non conosco il C -
Ora io ti spedisco il programma e ti chiedo molto umilmente se me lo puoi modificare in modo che in pratica
apre un file da un elenco di file con il percorso ( index.txt )
legge e cerca da ogni file una stringa fatta in questo modo ( in pratica un indirizzo e-mail del tipo mailto: )
cioè
mailto: (inizia così)
@ ( ha questo carattere centrale )
.com ( finisce così altro alla fine ) .
e lo trascrive su un file di testo
In pratica da un elenco di pagine web devo trascrivere gli indirizzi e-mail ivi
contenuti su un file di testo .
Ti prego di farmi avere il programma al più presto possibile ( se possibile oggi stesso )
perchè mi serve urgentemente per l'università .
Inviamelo su .
Ti ringrazio veramente di cuore .
Per favore aiutami , sono disperato .
Per favore testa il programma . Grazie
Ciao e grazie di nuovo .
Il programma e’ questo.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define CHS "@"
#define STREND ".com"
#define IFILE "index.txt"
#define STRIN "mailto:"
#define N 20
#define M 20
#define OFILE "out.txt"
int str_fine_c_for(const char *dest_str, const char *orig_str) {
int co=strlen(orig_str);
int cx=strlen(dest_str);
if (co>cx) return 0;
while (--co>=0) {
if (orig_str[co]!=dest_str[--cx]) return 0;
}
return 1;
}
int str_fine_c_rev(const char *dest_str, const char *orig_str) {
int co=strlen(orig_str);
int cd=0;
int cx=strlen(dest_str);
if ((co)>(strlen(dest_str))) return 0;
while (cd<co) {
if (orig_str[cd++]!=dest_str[--cx]) return 0;
}
return 1;
}
char *Copia_Indietro(FILE *sorgente, int num_char, const char *str_fine, const char *str_inizio) {
static char *risult;
char *risultato = calloc(num_char+1,sizeof(char));
int cont=0;
risult= risultato;
fseek(sorgente,strlen(str_inizio)-2*sizeof(char),SEEK_CUR);
fread(&risultato[cont],sizeof(char),1,sorgente);
risultato[cont+1]='\0';
while (++cont<num_char && ftell(sorgente)>=2 && str_fine_c_rev(risultato,str_fine)==0) {
fseek(sorgente,-2*sizeof(char),SEEK_CUR);
fread(&risultato[cont],sizeof(char),1,sorgente);
risultato[cont+1]='\0';
}
return risult;
}
char *Copia_Avanti(FILE *sorgente,int num_char, const char *str_fine) {
static char *risult;
char *risultato = calloc(num_char+1,sizeof(char));
int cont=-1;
risult= risultato;
fseek(sorgente,-1*sizeof(char),SEEK_CUR);
risultato[0]='\0';
while (++cont<num_char && feof(sorgente)==0 && str_fine_c_for(risultato,str_fine)==0) {
fread(&risultato[cont],sizeof(char),1,sorgente);
risultato[cont+1]='\0';
}
return risult;
}
int Trova_Stringa(FILE *origine,const char *da_trovare) {
char a='\0';
long int curs;
while (feof(origine)==0) {
fread(&a,sizeof(char),1,origine);
if (da_trovare[0]==a) {
int cx;
char *temporanea;
curs=ftell(origine);
temporanea=calloc(strlen(da_trovare)+1,sizeof(char));
temporanea[0]=a;
for (cx=1;cx<strlen(da_trovare);cx++) {
fread(&temporanea[cx],sizeof(char),1,origine);
temporanea[cx+1]='\0';
if (feof(origine)!=0) break;
}
temporanea[cx+1]='\0';
fseek(origine,curs,SEEK_SET);
if (str_fine_c_for(temporanea,da_trovare)==1) return 1;
}
}
return 0;
}
int Scrivi_Stringa(FILE *Origine,FILE *Destinazione) {
long int cur_pos=ftell(Origine);
char *prima=Copia_Indietro(Origine,M,STRIN,CHS);
char *dopo=Copia_Avanti(Origine,N,STREND);
clearerr(Origine);
fseek(Origine,cur_pos,SEEK_SET);
fprintf(Destinazione,"%s\n%s\n",prima,dopo);
return 1;
}
FILE *lettura;
FILE *Outfile;
main() {
FILE *Lista=fopen(IFILE,"r");
if (Lista==NULL) exit(EXIT_FAILURE);
Outfile=fopen("out.txt","w");
while (feof(Lista)==0) {
char tmp_path[500]="\0";
fscanf(Lista," %s",&tmp_path);
lettura=fopen(tmp_path,"r");
if (lettura!=NULL) {
int r=Trova_Stringa(lettura,CHS);
if (r==1) Scrivi_Stringa(lettura,Outfile);
fclose(lettura);
} else fprintf(stderr,"Impossibile aprire %s\n",tmp_path);
}
fclose(Outfile);
}