Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C] problema di ricerca

    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.

  2. #2

    Re: [C] problema di ricerca

    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.

  3. #3
    codice:
    /*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.

  4. #4
    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.

  5. #5
    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?

  6. #6
    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???

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    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.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,202
    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 (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.



    codice:
      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     
    }
    Debian GNU/Linux sid
    Publishing a theory should not be the end of one's conversation with the universe, but the beginning. (Eric S. Raymond)
    Kernel 2.6.14-ck1

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.