Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    101

    [C] Leggere il contenuto di un un file di testo dalla fine all inizio

    Ho la necessità di dover leggere il contenuto di un file di testo partendo dall ultima lettera fino ad arrivare alla prima:dovrei quindi invertire il seguente codice che legge in input sequenzialmente tutti i caratteri fino ad arrivare alla fine(cioè a EOF).Soluzioni?


    codice:
     for(stato=fscanf(fp,"%c",&let);stato!=EOF;stato=fscanf(fp, "%c",&let))

  2. #2
    Non penso tu possa farlo in maniera elementare. Il file puoi leggerlo solo in avanti, quindi per simulare la lettura inversa devi giocare col riposizionamento del cursore:

    Codice PHP:
    #include <stdio.h>

    int main()
    {
        
    FILEfd;
        
    char c;
        
    int count 0;
        
    long int begin;
        
    long int end;
        
    long int len;

        
    fd fopen("./test.txt""r");
        if(
    fd == NULL) return 1;

        
    begin ftell(fd);
        
    fseek(fd0SEEK_END);
        
    end ftell(fd);

        
    len end begin;

        do {
            
    fseek(fd, -count-1SEEK_END);
            
    = (char)fgetc(fd);
            if(
    != EOF)
                
    printf("%c"c);
            
    count++;
        } while(
    != EOF && count len);

        
    printf("\n");
        
    fclose(fd);

        return 
    0;

    spero di non aver fatto errori. Eventualmente, fai qualche test. Se ci sono dubbi chiedi pure


  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    101
    allora a questo punto è meglio caricare il contenuto del file in un vettore e poi leggerlo al contrario?

  4. #4
    Dipende da cosa devi farci. Non so quanto costano le fseek però direi che allocare un vettore grande quanto il file è da evitare, se puoi. Se ad esempio devi copiare il file in un altro, ma in ordine inverso, conviene decisamente l'algoritmo che ti ho descritto oppure una qualche variante per leggere chunk di byte invece che un singolo byte (mescolando la tua proposta con l'algoritmo di prima)

  5. #5
    Non so se può interessare, però il codice poteva essere decisamente snellito:

    Codice PHP:
    #include <stdio.h>

    int main(int argcchar** argv)
    {
         
    FILEfd;
        
    charfilename;
        
    char c;

        
    filename "test.txt";

        if( (
    fd fopen(filename"r")) == NULL)
            return 
    2;

        
    fseek(fd, -1SEEK_END);

        do {
            
    printf("%c", (char)fgetc(fd));
        } while(
    fseek(fd, -2SEEK_CUR) == 0);

        
    printf("\n");
        
    fclose(fd);

        return 
    0;

    In parole povere, partendo dalla penultima lettera, si fa un passo in avanti (con la fgetc) e due indietro (con la fseek(fd, -2, SEEK_CUR))

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 © 2025 vBulletin Solutions, Inc. All rights reserved.