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

    [C] Lunghezza file

    Ciao a tutti.

    Problema: :master:
    -) Ho un file di testo.
    -) Devo trasferire il contenuto in una matrice dinamica.
    -) Non so da quante righe è formato (per le colonne basta fare
    strlen).

    Domanda:
    Come posso fare per ricavarmi il numero di righe in modo da poter allocare la memoria per la matrice?

    Denghiu

  2. #2

    Re: [C] Lunghezza file

    Originariamente inviato da spiderontheweb
    Ciao a tutti.

    Problema: :master:
    -) Ho un file di testo.
    -) Devo trasferire il contenuto in una matrice dinamica.
    -) Non so da quante righe è formato (per le colonne basta fare
    strlen).

    Domanda:
    Come posso fare per ricavarmi il numero di righe in modo da poter allocare la memoria per la matrice?

    Denghiu
    Ti fai semplicemente una prima scansione del file con fgets() fino a che non arrivi a fine file:

    codice:
    int DIM;
    FILE*in;
    char*temp;
    ......
    while(fgets(temp,in,DIM)!=NULL)
     i++;

  3. #3
    Ok.

    Pensavo ci fosse qualcosa di più immediato, ma va bene cosi

    Grazie.

    Ciao

  4. #4
    Su Linux potresti avvalerti del comando wc che sicuramente conta il numero di caratteri e parole, e penso anche il numero di righe.
    Dovresti però chiamare dal tuo programma un comando e forse conviene fare come ti ho indicato sopra

  5. #5

    Re: [C] Lunghezza file

    Originariamente inviato da spiderontheweb
    Ciao a tutti.

    Problema: :master:
    -) Ho un file di testo.
    -) Devo trasferire il contenuto in una matrice dinamica.
    -) Non so da quante righe è formato (per le colonne basta fare
    strlen).

    Domanda:
    Come posso fare per ricavarmi il numero di righe in modo da poter allocare la memoria per la matrice?

    Denghiu
    http://forum.html.it/forum/showthrea...hlight=seekend
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  6. #6
    Molto interessante il metodo del link sopra.

    Per ora ho fatto come ha consigliato murder eyes, ma è sbucato un problema.
    Dopo che ho contato le righe vado ad allocare con
    codice:
    mat = (char **) malloc (num_righe * sizeof (char *));
    Controllo che la malloc non ritorni NULL e poi gli dico di andare a prendere la prima riga del file in questo modo
    codice:
    while (fscanf (fp, "%s", stringa) != EOF)
    E qua casca l'asino (cioè io ) dato che non entra nel while, come se fosse arrivato a EOF, passa oltre.

    Perchè?


  7. #7
    Innanzitutto ti premetto che la fscanf se non ricordo male non legge una riga intera se all interno ci sono degli spazi.
    Cmq assicurati di aver incluso la libreria stdio.h

  8. #8
    OK

    Ci siamo. Non avevo riportato l'indicatore di posizione del file all'inizio.

    codice:
    rewind(fp);
    Mi rimane solo un dubbio.

    Sapete se rewind è ANSI C? Sul Kernighan/Ritchie non l'ho trovata
    Se non lo è devo usare fseek.


  9. #9
    Originariamente inviato da spiderontheweb
    OK

    Ci siamo. Non avevo riportato l'indicatore di posizione del file all'inizio.

    codice:
    rewind(fp);
    Mi rimane solo un dubbio.

    Sapete se rewind è ANSI C? Sul Kernighan/Ritchie non l'ho trovata
    Se non lo è devo usare fseek.

    E' ANSI C come la fseek() e la ftell().
    Non sono ANSI C soprattutto sui vecchi compialtori la fgetpos() e la fsetpos()

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.