Visualizzazione dei risultati da 1 a 10 su 10

Discussione: [C] Lettura da File

  1. #1

    [C] Lettura da File

    Buongiorno a tutti,

    dopo un sacco di anni ho ripreso in mano il C per dare una mano ad un'amica per un esame, e sta sbattendo la testa al muro per un sacco di cose..

    Il problema di oggi riguarda il recupero di dati da un file.txt

    immaginando un file cosi costruito:

    numero id_mittente id_messaggio testo_messaggio

    devo leggerlo e metterlo in una struct, per poi lavorarlo.

    Ho gia affrontato il problema con una "fscanf" su altri file ed e' andato bene, il problema nasce quando devo leggere il testo del messaggio, in quanto può contenere degli spazi e non riesco a caricarlo nel modo corretto.

    Come posso fare?

    Grazie mille!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Usa la fgets
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Leggi i primi due ID con fscanf e il resto della riga con fgets.
    ---EDIT---
    Sono stato preceduto.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    So che vi chiedo tanto.. ma riuscite a scrivermi un piccolissimo esempio? io ho sempre usato una sola funzione in lettura..e non saprei come metterle insieme due..

  5. #5
    Scusa, ma non capisco cosa ci sia di così difficile... Prima chiami la scanf leggendo solo i primi due campi; poi chiami la fgets, che legge quel che rimane della riga...
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    io attualmente avevo una cosa cosi

    codice:
        while (!feof(fo)){
            fscanf(fo, "%d %d %d %d %d %d %d %d %s\n", &lista_messaggi_temp[i].ID_Mittente, &lista_messaggi_temp[i].ID_Destinatario, &lista_messaggi_temp[i].flaglettura, &lista_messaggi_temp[i].giorno, &lista_messaggi_temp[i].mese, &lista_messaggi_temp[i].anno, &lista_messaggi_temp[i].ora, &lista_messaggi_temp[i].minuti, &lista_messaggi_temp[i].messaggio);
            i++;
        }

  7. #7
    Come ti ho detto, togli la lettura della stringa dalla fscanf e al suo posto metti, dopo la fscanf, una fgets... Se ancora qualcosa non ti è chiaro, però, spiegami esattamente cosa non capisci.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Va bene, grazie! Stasera provo ed eventualmente richiedo più specificamente..in teoria mi e' chiaro..

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Esempio:

    fscanf(....);
    fgets(....);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Fatto! Grazie mille!

    codice:
     
        while (!feof(fo)){
            fscanf(fo, "%d %d %d %d %d %d %d %d", &lista_messaggi_temp[i].ID_Mittente, &lista_messaggi_temp[i].ID_Destinatario, &lista_messaggi_temp[i].flaglettura, &lista_messaggi_temp[i].giorno, &lista_messaggi_temp[i].mese, &lista_messaggi_temp[i].anno, &lista_messaggi_temp[i].ora, &lista_messaggi_temp[i].minuti);
            fgets(lista_messaggi_temp[i].messaggio, DIMMESSAGGIO, fo);
            i++;
        }

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.