Leggere solo una riga da un file in c

di il
56 risposte

Leggere solo una riga da un file in c

Ho creato un file prova.txt e voglio leggere solo la seconda riga del file ma non so come fare. Nel file prova.txt c'è scritto:
questo è un file.
questa è la seconda riga.
questo è il codice. grazie a tutti per l'aiuto.

#include <stdio.h>

int main(int argc, const char * argv[])
{

    FILE * pFile;
    char buffer [20];
    
    pFile = fopen ("prova.txt" , "r+");
    if (pFile == NULL)
        perror ("Error opening file");
    else
    {
        while (!feof (pFile))
        {
            if ( fgets (buffer , 20 , pFile) != NULL )
                puts (buffer);
            else
                puts("Errore");
        }
        fclose (pFile);
    }
    return 0;
}

56 Risposte

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

    Non leggere fino a eof, ma metti un contatore che alla lettura si incrementa. Quando legge la riga di tuo interesse ha quello che deve, eventualemente chiude il file ed esce.

    Su via... vorrei incoraggiarti a cercare di vedere come faresti tu se non dovessi scrivere un programma.
    Prova a dire se io dovessi leggere il file come farei?
    Leggeresti la prima riga ma non ti interessa nulla, ne scarti il contenuto il significato ecc...
    mentre passando alla seconda poni il tuo interesse.
    Che cosa hai fatto implicitamente? Contato le righe...

    Bhe programmare, secondo me, non è solo acquisire la sintassi del linguaggio. Importante, ma ultima cosa, è necessario capire come lo si farebbe e, molte volte è utile fare sciocchi ragionamenti su carta come se dovessimo farlo noi anzichè il pc.

    Spero averti dato spunti di riflessione.
  • Re: Leggere solo una riga da un file in c

    
    int i=0;
    while(i<feof(pFile) {
    }
    
    Ecco non so più come continuare. Come potrei fare? Grazie
  • Re: Leggere solo una riga da un file in c

    Fabio97 ha scritto:


    
    int i=0;
    while(i<feof(pFile) {
    }
    
    Ecco non so più come continuare. Come potrei fare? Grazie

    Intanto meglio se approfondisci che cosa ritorna la feof.
    http://www.cplusplus.com/reference/cstdio/feof

    Poi i che cosa dovrebbe essere? il tuo contatore di linea giusto?
    i va incrementato
    e quando i == 1 se parti da i=0 allora devi leggere la riga del file.

    Fabio97... Ascolta non offenderti, ma prendilo come un consiglio accorato. Cerca di sforzarti a capire, aiutati con ragionamenti su carta. Se noi del forum ti scriviamo come noi lo faremmo, tu impari certo, ma impari poco. Sappi che lo stesso codice scritto da me, sarebbe diverso da quello che scriverebbe qualcun altro.
    Se a degli architetti dicono devete costruire una villetta, vengon fuori tante villette quanti sono gli architetti. Bhe per i programmatori è la stessa cosa, ciascuno attinge dal proprio bagaglio di conoscenze, esperienze, ecc...
    Cerca di costruire un solido tuo bagaglio di conoscenze.
    Perdonami della paternale, ma cerca di meditare su questo, tra qualche tempo dirai che avevo ragione.
  • Re: Leggere solo una riga da un file in c

    Non so come controllare se è la riga che mi interessa. Datemi una mano qua o almeno qualche suggerimento per capire e in modo tale che lo posso fare io. Grazie
    int i=0;
    while(i<feof(pFile) {
    //controllo se è la riga che mi interessa altrimenti la cambio
    i++;
    }
  • Re: Leggere solo una riga da un file in c

    Il suggerimento è semplice: tieni il tuo contatore e poi fai
    
    if(i == valore_che_ti_interessa)
    {
        /* questa è la riga che vuoi leggere */
    }
    
  • Re: Leggere solo una riga da un file in c

    Come faccio a corrispondere il valore che mi interessa alla riga se non so la lunghezza della frase?
  • Re: Leggere solo una riga da un file in c

    Fabio97 ha scritto:


    come faccio a corrispondere il valore che mi interessa alla riga se non so la lunghezza della frase?
    Cosa c'entra la lunghezza della frase? Qui stiamo parlando del numero di riga, quindi la prima riga, la seconda riga, la terza, ecc. Indipendentemente da quanto sono lunghe queste righe.
  • Re: Leggere solo una riga da un file in c

    Si ma la seconda riga inizia quando finisce la lunghezza della prima frase. Quindi non c'entra la lunghezza in questo caso della prima frase?
  • Re: Leggere solo una riga da un file in c

    Fabio97 ha scritto:


    Si ma la seconda riga inizia quando finisce la lunghezza della prima frase. Quindi non c'entra la lunghezza in questo caso della prima frase?
    No! Non centra.

    Esempio:

    Questa è la prima riga, ribadisco la prima riga
    questa invece la seconda
    adesso sono a scrivere la terza

    Come vedi tutte hanno lunghezza diversa.

    Nel buffer di lettura devi sovrastimare la lunghezza massima, in modo da leggere la riga più lunga che può presentarsi.

    Quando scrivi:
    
       fgets (buffer , 80 , pFile)
    
    Quanti caratteri stai considerando per la riga?

    Adesso questa scrittura ti permette di inserire tutta la riga in buffer... questa è la lettura per righe.
  • Re: Leggere solo una riga da un file in c

    Non ho capito molto. Potresti scrivere il codice completo? Per favore, grazie
  • Re: Leggere solo una riga da un file in c

    Fabio97 ha scritto:


    Potresti scrivere il codice completo?
    Il regolamento non lo consente.
  • Re: Leggere solo una riga da un file in c

    
        #include <stdio.h>
    
        int main(int argc, const char * argv[])
        {
    
            FILE * pFile;
            char buffer [20];
            int i=1;
            int flag=1;
           
            pFile = fopen ("prova.txt" , "r+");
            if (pFile == NULL)
                perror ("Error opening file");
            else
            {
                while (!feof (pFile) && flag)
                {
                   fgets (buffer , 20 , pFile); // Qui legge la riga, serve a consumare il file
                   if(i==2){
                       if ( fgets (buffer , 20 , pFile) != NULL ){ // Legge una riga lunga max 20
                           puts (buffer);
                           flag=0;
                        }
                       else
                           puts("Errore");
                    }
                    i++;
                }
                fclose (pFile);
            }
            return 0;
        }
    
    
    Eccoti servito!
  • Re: Leggere solo una riga da un file in c

    Come no? Allora scrivi almeno una parte del codice per favore
  • Re: Leggere solo una riga da un file in c

    Ponendo i=2 mi legge solo la prima riga. Se volessi leggere solo la seconda come faccio?
Devi accedere o registrarti per scrivere nel forum
56 risposte