Leggere solo una riga da un file in c

di il
56 risposte

56 Risposte - Pagina 2

  • Re: Leggere solo una riga da un file in c

    Fabio97 ha scritto:


    Ponendo i=2 mi legge solo la prima riga. Se volessi leggere solo la seconda come faccio?
    Io non vorrei essere polemico, ma hai ricevuto il codice alle 21.52 e hai fatto un'altra domanda alle 21.56, cioè a 4 minuti di distanza. O sei incredibilmente veloce oppure non lo hai nemmeno guardato con attenzione e il tuo approccio è stato il seguente:
    1. copia-incolla
    2. eseguo il codice
    3. vedo che c'è qualcosa che non va
    4. torno sul forum a chiedere che lo sistemino

    Tra il (3) e il (4) dovrebbe esserci un po' di lavoro da parte tua! In particolare sforzarti di capire quello che ti è stato detto e cercare di metterlo in pratica. E' più faticoso, ma è l'unico modo che conosco per imparare qualcosa!

    P.S. All'inizio "i" è inizializzato a 1, non a 2. Quindi, quando "i" vale 2 significa che stai effettivamente leggendo la seconda riga.
  • Re: Leggere solo una riga da un file in c

    Togli la riga

    i++;

    e modifica l'altra con

    if(++i==2){

    Però questo codice non va bene ... non è generico, non funziona per la riga 1

    P.S. Sono d'accordo con il fatto che non dimostri nessun impegno ma vuoi solamente risolvere il tuo problema "scolastico" ... il problema rimane tuo ...
  • Re: Leggere solo una riga da un file in c

    
    #include <stdio.h>
    
    int main(int argc, const char * argv[])
    {
    
        FILE* f = fopen ("prova.txt" , "r+");
            if ( !f ) return 0;
        
        char buffer [1024];
        
        //skip first line
        if ( !fgets (buffer , 1024 , f) ) return 0;
        //read line    
        if ( !fgets (buffer , 1024 , f) ) return 0;
        //view line
        printf("%s\n",buffer);
        
        fclose(f)
        return 0;
    }
    
    cosi hai la pappa pronta, INGRASSA!
  • Re: Leggere solo una riga da un file in c

    E se volessi leggere la terza riga? Oltre a scrivere il codice puoi spiegare, così capisco quali istruzione scrivere per leggere la riga che mi interessa
  • Re: Leggere solo una riga da un file in c

    Ho ragionato e ho scritto il seguente codice:
    
    #include <stdio.h>
    #include <string.h>
    int main(int argc, const char * argv[])
    {
        FILE * f;
        char buffer [1024];
    
        f = fopen ("prova.txt" , "r+");
        if ( !f ) return 0;
        /* Ho un file prova.txt con le seguenti città. Voglio stampare solo la 3 riga (gallarate)
         Tradate
         Varese
         Gallarate
         Milano
         Roma
        */
        for (int i=0; i!=feof(f); i++) {
            if (strncmp(fgets(buffer, 1024, f), "gallarate", 50)==0) {
                //buffer prende la riga
                if ( !fgets (buffer , 1024 , f) )
                    return 0;
            } else {
                //salta la riga
                if ( !fgets (buffer , 1024 , f) )
                    return 0;
            }
        }
         //stampa la riga
        puts(buffer);
        fclose(f);
        return 0;
    }
    
    Dove sta l'errore? Grazie
  • Re: Leggere solo una riga da un file in c

    Provo a spiegarti che cosa non va nel tuo codice e come poterlo sistemare.

    Ci sono almeno quattro cose che non vanno:

    1) Fai un ciclo for dove la condizione di terminazione è " !=feof(p) "
    Hai capito cosa ritorna feof?
    http://www.cplusplus.com/reference/cstdio/feof/?kw=feo
    Prova a fare una cosa semplicissima, dichiare una variabile ad esempio int n; e scrivi !(n=feof(p)) all'interno del tuo for, stampati la n vedi che valore stampa?

    2) Forse nel file, Gallarate ha la G maiuscolo e nella strncmp, gallarate ce l'ha minuscola, poi dici di voler controllare 50 caratteri della stringa buffer con la stringa gallarate, non saranno mai uguali.
    http://www.cplusplus.com/reference/cstring/strncmp

    3) La lettura del file la fai solo nell'if quindi il file non lo consumi

    4) Fai due letture che non comprendo
    
         //buffer prende la riga
                if ( !fgets (buffer , 1024 , f) )
                    return 0;
            } else {
                //salta la riga
                if ( !fgets (buffer , 1024 , f) )
                    return 0;
    
  • Re: Leggere solo una riga da un file in c

    Le due letture le ho copiato dal signore che prima mi ha aiutato. Poi non dico di voler controllare 50 caratteri della stringa buffer con la stringa gallarate, ma dico di voler controllare 50 caratteri della prima riga della stringa buffer con la stringa gallarate
  • Re: Leggere solo una riga da un file in c

    Con questo codice puoi scegliere quale riga leggere. Prova a guardarlo bene, poi se hai dei dubbi siamo qui.
    
    #include <stdio.h>
    
    int main(int argc, const char * argv[])
    {
        FILE* f = fopen ("prova.txt" , "r");
        if ( !f ) return -1;
        
        char buffer [1024];
        
        int riga_da_leggere;
        int i;
        
        /* voglio leggere la seconda riga */
        riga_da_leggere = 2;
        
        /* inizializzo il contatore */
        i = 0;
        
        while(i != riga_da_leggere)
        {
        	if(fgets (buffer , 1024 , f) == NULL)
        	{
        		printf("Fine del file raggiunta.\n");
        		return -1;
        	}
        	i++;
        }
        
        //view line
        printf("%s\n", buffer);
        
        fclose(f);
        return 0;
    }
    
    P.S. Ho solo fatto poche modifiche al codice di vbextreme.
  • Re: Leggere solo una riga da un file in c

    Io non so quale riga leggere ma so solo che la riga da leggere è uguale a "gallarate"
  • Re: Leggere solo una riga da un file in c

    Fabio97 ha scritto:


    Io non so quale riga leggere ma so solo che la riga da leggere è uguale a "gallarate"
    Ah ma questo è tutto un altro problema!
    Nel primo post avevi scritto
    Ho creato un file prova.txt e voglio leggere solo la seconda riga del file ma non so come fare.
    In un altro post avevi detto
    Ponendo i=2 mi legge solo la prima riga. Se volessi leggere solo la seconda come faccio?
    Io (e forse anche gli altri) credevo che tu volessi leggere la seconda riga, qualunque fosse il suo contenuto.

    Se invece vuoi individuare la riga all'interno del file che corrisponde a "gallarate" allora analizzi il file riga per riga (una fgets dentro a un ciclo while) e poi, dopo aver letto una riga, la confronti con la tua stringa campione (cioè "gallarate") tramite la funzione strcmp o qualcosa di simile. Quando trovi la corrispondenza, termini.
  • Re: Leggere solo una riga da un file in c

    L'ho fatto ma non funziona
  • Re: Leggere solo una riga da un file in c

    Fabio97 ha scritto:


    L'ho fatto ma non funziona
    Purtroppo questo non vuol dire nulla... Mostra il codice!
    Facciamo un ultimo tentativo, altrimenti ti posto la soluzione e la chiudiamo qui.
  • Re: Leggere solo una riga da un file in c

    #include <stdio.h>
    #include <string.h>
    int main(int argc, const char * argv[])
    {
        FILE * f;
        char buffer [1024];
    
        f = fopen ("prova.txt" , "r+");
        if ( !f ) return 0;
        /* Ho un file prova.txt con le seguenti città. Voglio stampare solo la riga gallarate
         Tradate
         Varese
         Gallarate
         Milano
         Roma
        */
        for (int i=0; i!=feof(f); i++) {
            if (strncmp(fgets(buffer, 1024, f), "gallarate", 50)==0) {
                //buffer prende la riga
                if ( !fgets (buffer , 1024 , f) )
                    return 0;
            } else {
                //salta la riga
                if ( !fgets (buffer , 1024 , f) )
                    return 0;
            }
        }
         //stampa la riga
        puts(buffer);
        fclose(f);
        return 0;
    }
    
  • Re: Leggere solo una riga da un file in c

    E' lo stesso codice di prima! Hai ignorato del tutto i suggerimenti di SVNiko...
    A questo punto ci rinuncio... Questa è una possibile soluzione:
    
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, const char * argv[])
    {
        FILE* f = fopen ("prova.txt" , "r");
        if ( !f ) return -1;
        
        char buffer [1024];
        
        int conta_righe, i;
        
        /* inizializzo il contatore */
        conta_righe = 0;
        
        while(fgets (buffer , 1024 , f) != NULL)
        {
        	/* ho letto una riga: aumento il contatore */
        	conta_righe++;
        	
        	/* elimino il carattere "a capo" al termine della riga */
        	i = 0;
        	while(buffer[i] != '\n') i++;
        	buffer[i] = '\0';
        	
        	/* confronto la stringa appena letta con il campione */
        	if(strcmp(buffer, "Gallarate") == 0)
        	{
        		printf("Riga trovata: e' la numero %d.\n", conta_righe);
        		/* esco dal ciclo while. Altrimenti si puo' anche utilizzare
        		un intero come flag... */
        		break;
        	}
        }
        
        fclose(f);
        return 0;
    }
    
    Cosa hai imparato? Probabilmente nulla. Contento tu, io sono a posto!
  • Re: Leggere solo una riga da un file in c

    Non funziona, compilo il programma e si chiude subito
Devi accedere o registrarti per scrivere nel forum
56 risposte