Visualizza la versione completa : [C] Cercare una stringa all'interno di un file
Stefano0925
31-08-2011, 11:32
Scusate, come faccio a cercare una stringa data in input da me in un file?
o meglio, come faccio a cercare una stringa data in input da me con i primi 20 elementi di ogni
riga del file?
premetto che non ho del codice da postare perchè è in fase di elaborazione, mi vanno bene
anche esempi generici o qualunque idea possiate darmi.
ESSE-EFFE
31-08-2011, 11:45
Originariamente inviato da Stefano0925
Scusate, come faccio a cercare una stringa data in input da me in un file?
Apri il file, lo leggi riga per riga o in altro modo, e verifichi la presenza della tua stringa o con strstr o con un semplice ciclo.
Originariamente inviato da Stefano0925
o meglio, come faccio a cercare una stringa data in input da me con i primi 20 elementi di ogni riga del file?
Definisci "primi 20 elementi di ogni riga".
Originariamente inviato da Stefano0925
premetto che non ho del codice da postare perchè è in fase di elaborazione
Male. Non serve che posti tutto il programma, basta il pezzo in cui apri il file e cerchi la stringa... meglio se qualcosa di compilabile.
Stefano0925
07-09-2011, 10:40
/*FUNZIONE RICERCA ELEMENTO ************************************************** ******************************/
int ricerca()
{
char t[5]; /*termine da trovare*/
char s[1000]; /* Questa è la stringa dove viene caricata ogni riga */
succhi = fopen("Succhi.txt","r");
printf("barcode: ");
scanf("%s", t);
while(!feof(succhi))
fgets(s,1000,succhi); /* Leggi una riga intera, o meglio legge 1000 caratteri se nn trova prima il terminatore di riga \n */
if (strcmp(s,t))
printf("%s\n", s);
else
printf("non trovato \n");
}
questa è la porzione di codice per la ricerca della riga nel file, il problema è che effettuando la
ricerca qualsiasi elemento cerco mi restituisce sempre l'ultimo del file .txt
invece ricercando l'ultimo elemento presente nel file mi restituisce "elemento non trovato"
spero che riusciate a darmi una mano, e anche qualche dritta su come modificare in seguito
la stringa cercata.
ESSE-EFFE
07-09-2011, 11:29
Originariamente inviato da Stefano0925
questa è la porzione di codice per la ricerca della riga nel file, il problema è che effettuando la ricerca qualsiasi elemento cerco mi restituisce sempre l'ultimo del file .txt
invece ricercando l'ultimo elemento presente nel file mi restituisce "elemento non trovato"
Sì, infatti stai leggendo tutte le righe, ma fai il confronto solo alla fine (mancano due parentesi). Il confronto va fatto ad ogni riga. Ricordati di chiudere il file alla fine.
Stefano0925
07-09-2011, 11:57
Ok quel problema è stato risolto, grazie.
L'unico problema adesso è che non stampa a video tutta la riga ma solo l'elemento ricercato
come posso risolvere questa cosa facendo stampare tutta la stringa?
e per quanto riguarda la questione della modifica, qualche idea?
ESSE-EFFE
07-09-2011, 12:00
Originariamente inviato da Stefano0925
L'unico problema adesso è che non stampa a video tutta la riga ma solo l'elemento ricercato
come posso risolvere questa cosa facendo stampare tutta la stringa?
Stai stampando s, quindi tutta la riga...
Originariamente inviato da Stefano0925
e per quanto riguarda la questione della modifica, qualche idea?
Quale modifica???
Il problema che hai posto era solamente legato alla
ricerca
(come da titolo)
Se dopo che hai trovato la stringa la vuoi modificare nel file allora devi scrivere un nuovo file con il vecchio contenuto e la nuova stringa, eliminare il primo e rinominare il secondo.
Guarda, questo codice cerca una serie di stringhe nel file aperto con fopen.
Le stringe da cercare sono in fillersC.
L'idea è che all'interno del ciclo while gestisci la riga del file (oneLine) ad ogni iterazione, e dentro la riga fai una semplice ricerca della parola con le funzioni di string.h (http://en.wikipedia.org/wiki/String.h) (in particolare strstr()).
Una volta che hai trovato la parola in quella riga (strstr!=NULL) la elabori come vuoi.
Nel mio codice selezionavo la parte prima (head) e quella dopo (tail), e le ricopiavo in un nuovo file cambiando la parola in mezzo - in pratica sostituisco la parola cercata con un'altra.
int count;
char* fillersC[2]={"parola1", "parola2"};
const int nbytes = 180;
char *oneLine = malloc((nbytes+1)*sizeof(char));
FILE* texFileR = fopen("/tmp/file.txt","r");
while(getline(&oneLine, &nbytes, texFileR)!=-1){
found=0; // set to 1 only if some modifications are to be applied to the line
for(count=0; count<12; count++){
if(strstr(oneLine,fillersC[count])!=NULL){
if(!found) found=1;
address=strstr(oneLine,fillersC[count]);
index=address-&oneLine[0];
strncpy(head,&oneLine[0],index);
head[index]='\0';
len=strlen(oneLine)-strlen(fillersC[count])-index;
strncpy(tail,&oneLine[index+strlen(fillersC[count])],len);
tail[len]='\0';
switch(count){
case 0:
sprintf(newLine,"%s%s%s", head,altra_stringa,tail);
break;
case 1:
sprintf(newLine,"%s%s%s", head,altra_stringa2,tail);
break;
}
strcpy(oneLine,newLine);
}
} //end for
}