Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2016
    Messaggi
    12

    Ricerca di una stringa in un file

    Ciao ragazzi,
    ho un urgente bisogno di voi, ho questo codice dove devo ricercare una parola in un file che memorizza i dati che l'utente ha inserito precedentemente. come si fa?

    codice
    --------------------------------
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>


    int main()
    {
    struct s_protocollo
    {
    char cliente[20];
    char tipo[20];
    char entrata[20];
    int anno;
    };
    int scelta,vero,i,conto=0,numero=0;
    char ipotesi[200],x, *res;
    typedef struct s_protocollo proto;
    proto protocollo[100];
    FILE *file;

    file=fopen("protocolli.txt","a+");



    do
    {

    printf("1) Aggiungi un nuovo protocollo\n") ;
    printf("2) Ricerca esatta \n") ;
    printf("3) Stampa completa \n") ;
    printf("0) Salva tutti i protocolli ed esci\n") ;

    printf ("Inserisci scelta: ");
    scanf ("%d", &scelta);

    switch (scelta)
    {
    default:
    printf("Errore");
    conto++;
    break;


    case 0:
    printf("bye");
    return 0;
    break;

    case 1:
    printf("Inserisci il tipo: ");
    scanf("%s", protocollo[conto].tipo);
    fprintf(file,"Tipo: %s\n",protocollo[conto].tipo);
    printf("Inserisci se è cliente o fornitore: ");
    scanf("%s",protocollo[conto].cliente);
    fprintf(file,"Cliente o fornitore: %s\n",protocollo[conto].cliente);
    printf("Inserisci se e' entrata o uscita: ");
    scanf("%s",protocollo[conto].entrata);
    fprintf(file,"Entrata o uscita: %s\n",protocollo[conto].entrata);
    printf("Inserisci l'anno: ");
    scanf("%d",&protocollo[conto].anno);
    fprintf(file,"Anno: %d\n",protocollo[conto].anno);
    numero++;
    printf("Questo e' il numero di protocollo: %d2016\n",numero);
    fprintf(file,"Numero: %d2016\n\n\n",numero);
    conto++;
    break;


    case 2:
    printf("Inserisci il tipo di protocollo: ");
    scanf("%s",ipotesi);


    for (i=0;i<conto;i++)
    {
    if(strcmp(ipotesi,protocollo[i].tipo)==0)
    {
    vero++;
    }
    if(vero==1)
    {
    printf("Ecco i dati del protocollo trovato: \n");
    printf("Tipo di protocollo: %s\n",protocollo[i].tipo);
    printf("Cliente o Fornitore: %s\n",protocollo[i].cliente);
    printf("Entrata o uscita: %s\n",protocollo[i].entrata);
    printf("Anno: %d\n",protocollo[i].anno);
    printf("Numero di protocollo: %d2016\n",i+1);
    }
    if(vero==0)
    {
    printf("non ho trovato nessun protocollo");
    }
    }
    break;


    case 3:
    while ((x = getc(file)) != EOF)
    putchar(x);
    break;


    }


    }while(scelta!=0);
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    In generale,

    apri il file

    leggi riga per riga

    confronti con il dato cercato

    continui con la prossima riga se non hai trovato, visualizzi il risultato in caso contrario
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2016
    Messaggi
    12
    Potresti perfavore darmi il frammento di codice?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    No, perché non è proprio un "frammento" e dipende molto da tutto il resto del tuo codice ...

    Prova a scrivere tu qualcosa in base a quello che ti ho detto e si vede di darti consigli e proporre correzioni.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2016
    Messaggi
    12
    ok, come faccio a leggere riga per riga?

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2016
    Messaggi
    12
    Che errori ci sono?

    case 2:
    printf("Inserisci il tipo di protocollo: ");
    scanf("%s",ipotesi);

    while (!feof(file))
    {
    if (strcmp(ipotesi,protocollo[conto].tipo)==0)
    {
    fscanf(file, "%s", ipotesi);
    printf("\nHo trovato %s!\n", protocollo[conto].tipo );
    cont++;
    }

    }

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Se hai già usato il file per scrivere, è meglio chiudere e aprire nuovamente per leggere.

    La lettura dei dati va fatta prima di confrontare, altrimenti cosa confronti?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2016
    Messaggi
    12
    Non è cosi?
    case 2:
    printf("Inserisci il tipo di protocollo: ");
    scanf("%s",ipotesi);
    file=fopen ("protocolli.txt","r");
    while (!feof(file))
    {
    fscanf(file, "%s", ipotesi);
    if (strcmp(ipotesi,protocollo[conto].tipo)==0)
    {
    printf("\nHo trovato %s!\n", protocollo[conto].tipo );
    cont++;
    }

    }

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    "ipotesi" serve a leggere quello che vuoi cercare da tastiera.

    Se cerchi da file, devi usare un'altra variabile per leggere i dati da file non la variabile "ipotesi"

    Il confronto va fatto tra la variabile "ipotesi" e quello che leggi da file, non con i dati nel vettore "protocollo".

    A meno che tu non decida di gestire TUTTO in memoria e allora non devi aprire il file e leggere dal file ma semplicemente in un ciclo for con i dati presenti nel vettore "protocollo".

    Insomma, prima di scrivere codice, devi decidere come deve lavorare il tuo programma.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.