Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [c] lettura da file

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    100

    [c] lettura da file

    ciao ragazzi ho un file d questo formato
    marco:rossi:5433

    michele:mattei:5433
    matteoino:43222


    devo leggere iterivatamente dal file stringhe del tipo s=nome:cognome:matricola(sono separate dal /n) e darle in pasta a una funzione
    ELABORA(char *s) //ignorato lo scopo di elabora.
    il problema è che nel file ci possono essere righe vuote come nell esempio.
    io avevo pensato a una fgets pero c è il problema che mi mette nella stringa anche il newline e io nn ce lo voglio .. ecco come l avevo pensata io(a posto di elabora ho messo una stampaaffiancata al * per capire se stampa anche il new line... APPlicato al file che ho messo all inizio come esempio.
    codice:
    int main(){
    FILE *f=fopen("lista","r");
    char *s=malloc(100*sizeof(char));
    s=fgets(s,99,f);
    while(s!=NULL)
    {
    
     printf("%s*",s);
    s=fgets(s,99,f);
    }
    
    
    }
    come output m da
    marco:rossi:5433
    *
    *michele:mattei:5433
    matteoino:43222
    *


    mentre io vorrei
    marco:rossi:5433*michele:mattei:5433*matteoino:43222


    come faccio ad evitare il new line ed evitare righe vuote?
    df

  2. #2
    Puoi aggiungere un controllo nel while in cui cerchi nella stringa il carattere \n e se lo trovi ci sostituisci il terminatore di stringa...

    EDIT: Per le righe vuote puoi effettuare un altro controllo dopo il precedente che verifica che la stringa non abbia lunghezza nulla, prima di stamparla o di lavorarci sopra.
    Se state chiamando per i piedini mancanti,lasciate il vostro indirizzo,e i piedi di ricambio vi saranno consegnati da mio nipote Jody. E ora, io devo ritornare nel dolce abbraccio della cripta... Ma tornerò!!!

    The Simpson ; AABF08 (Domenica orrenda domenica)

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Volendo puoi usare anche semplicemente la fscanf()

    codice:
        while (! feof(f)) {
    	if (fscanf(f, "%s", s) == 1) {
    	    printf("%s*", s);
    	}
        }
    se hai la garanzia di non avere righe più lunghe dello spazio che hai allocato per s.

    Tra le altre cose, perché ricorri all'allocazione dinamica se poi allochi un numero costante di elementi? Inoltre aggiungerei dei controlli sia di corretta apertura sullo stream f che di corretta allocazione sul puntatore s (se proprio vuoi ricorrere all'allocazione dinamica, pur essendo inutile in quel caso).
    every day above ground is a good one

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288

    Moderazione

    Originariamente inviato da esoni
    ciao ragazzi ho un file d questo formato
    Ne stai già parlando in questa discussione: non aprire più thread sullo stesso argomento.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.