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

    [C] lettura dinamica di caratteri

    ciao a tutti!!!

    ho un problema con la lettura di un file..
    io devo leggere un file di 250 MB che contiene n caratteri, tutti attaccati senza spazi..

    avevo fatto in questo modo:

    codice:
    char *parola=NULL;
    
            parola = (char*)malloc( 256 * sizeof(char));
            memset(parola,0,256 * sizeof(char));
    
            fscanf(fileTesto,"%s", parola);
    solo che il mio numero di caratteri è di gran lunga superiore a 256..

    come posso farlo in modo dinamico, cioè senza sapere a priori quanti caratteri andrò a leggere?

    spero che qualcuno mi possa aiutare.. grazie!

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Dipende se te la senti o no di tenere in memoria 250Mb.

    Se si: apri il file, ti sposti alla fine con fseek e ricavi la dimensione con ftell. Ti sposti all'inizio del file, crei il buffer con la dimensione ricavata, leggi tutto con una fread e procedi con la elaborazione.

    Altrimenti leggi un tot di caratteri, elabori quello che ti serve e man mano che ti serve il resto lo richiedi al file.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Il file è di testo vero?
    Date le dimensioni del file la cosa si complica non poco....
    La cosa più banale è creare un contatore e prima contare quanti caratteri ci sono, poi allocare la memoria e riempirla, facendo tipo:

    codice:
    int count = 0, i = 0;
    char temp;
    char* v;
    
    while ((fscanf (f, "%c", &temp)) == 1)
            count++;
    
    rewind (f);
    
    v = (char*) malloc (count*sizeof(char));
    while ((fscanf (f, "%c", &v[i])) == 1)
           i++;
    Altrimenti ti crei dinamicamente un array di caratteri e man mano che lo vai a riempire controlli sempre che l'indici attuale superi la dimensione prefissata.... Quando ciò avviene, allochi un array più grande, copi il contenuto di quello vecchio in quello nuovo, cancelli quello vecchio e prosegui sempre in questo modo!
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  4. #4
    forse mi sono spiegato male!
    io devo leggere vari file di testo di cui 1 grande 250 MB e contiene 269484032 "a" consecutive,senza spazi..
    un altro è composto da 255 "a" consecutive
    uno da 256 "a" consecutive
    e uno da circa un migliaio di parole di lunghezza al massimo una ventina di caratteri

    la mia idea era quella di utilizzare la fscanf, ma per dichiarare il buffer di lettura devo sapere a priori quanto grande esso dev'essere mentre io devo fare un programma che funzioni con tutti i tipi di file.

    l'unica alternativa che conosco è l'utilizzo della fgetc all'interno di un ciclo ma ha tempi di esecuzione molto lunghi per file molto grandi!

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.