PDA

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???

oregon
07-09-2011, 12:51
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.

Kamui
07-09-2011, 13:46
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
}

Loading