Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435

    [C] lettura da file in C

    Ciao, ormai è tanto tempo che non utilizzo il vecchio C e adesso mi ritrovo con un piccolo problema per quanto riguarda la lettura di files di testo, spero potrete rispondere alle seguenti domande:
    1)E' possibile leggere una riga alla volta di un file di testo utilizzando tipo una funzione getLine() ?
    2)Mettiamo che voglia leggere una sequenza di interi, come fa scanf a spezzare un intero dall'altro?Voglio dire, basta mettere uno spazio tra ogni numero?E se per esempio prima voglio leggere un intero e poi un carattere?Come funziona in questo caso?

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    cavolo, qua si rispolvera il vecchiume

    Da quel che ricordo, con la fgets() leggi tanti caratteri quanti sono specificati nel buffer che setti, esempio:

    char s[80];
    while(fgets(s, sizeof(s), fp) != NULL); // legge 80 caratteri da file alla volta sino a NULL cioè tutto il file

    Per la seconda domanda se mi ritrovassi con un input ignoto e misto fatto caratteri numeri credo che userei uno switch case

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da misterx
    cavolo, qua si rispolvera il vecchiume
    Non capisco perché "vecchiume" ...

    Leggere un file di testo linea per linea in C non mi pare una attività abbandonata ...

    In ogni caso, le funzioni usate per leggere singoli valori / caratteri (fino all'intera linea) dipendono molto dal problema particolare, che potresti dettagliarci ...

    La fscanf, usata opportunamente, potrebbe risolvere tutto.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Si, infatti ho risolto con la fscanf e stringa di formattazione %s: a quanto pare riconosce tutti i separatori (spazi bianchi, a capo,ecc.) e, non vorrei sbagliare, mette anche un bel \0 alla fine del buffer destinazione scelto!

    Per quanto riguarda l'altro problema è una domanda teorica più che altro...ad esempio ho in un file una sequenza di numeri separata da spazi bianchi e mi chiedo: con che criterio fscanf "spezza" i pezzi per ricavare dei numeri?Ad esempio se prima uso %d e poi %f cosa fa, un cast del primo carattere che trova al tipo corretto?E se per dire quel carattere non è un numero, ma tipo una stringa di 5 caratteri la salta completamente o rimane bloccato li?

    Cmq oregon, a parte applicazioni legacy, neanche io vedo motivo di preferire il C al C++ ...

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da Dark867
    con che criterio fscanf
    Hai mai letto con attenzione la documentazione ?

    http://www.cplusplus.com/reference/c...cstdio/fscanf/

    neanche io vedo motivo di preferire il C al C++ ...
    La questione non è di preferire un linguaggio ad un altro ...

    Il C esiste ancora ed è tranquillamente usato dove il C++ sarebbe inutilmente "pesante" (basta pensare a tutti i sistemi con microcontrollore ...).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    Originariamente inviato da oregon
    Non capisco perché "vecchiume" ...
    è solo un modo di dire, anch'io il C l'ho imparato un pò di anni fa

  7. #7
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Ottimo, grazie!
    Ora però c'è un problema: leggo ke anche il newline viene considerato un carattere di terminazione e quindi ignorato e questo mi da un problema:
    ho un file costituito in questo modo
    <nome> <valore numerico>
    <nome> <valore numerico>
    Il problema non è tanto la lettura, quanto la modifica linea x linea: siccome sia nome che valore numerico possono variare a piacere devo trovare il modo di sovrascriverli opportunamente...avete qualche idea?L'unica che mi viene è utilizzare fscanf a livello di carattere o, ke è uguale, fget, capire quanti caratteri fino a quello di newline, sostituirli con \0, e infine scrivere la nuova stringa...ke ne pensate?

    Originariamente inviato da oregon
    La questione non è di preferire un linguaggio ad un altro ...
    Il C esiste ancora ed è tranquillamente usato dove il C++ sarebbe inutilmente "pesante" (basta pensare a tutti i sistemi con microcontrollore ...).
    Uso abbreviazioni nello scritto, ma l'italiano penso di conoscerlo: "preferire un linguaggio a un altro" significa x l'appunto "scegliere un linguaggio rispetto a un altro", le motivazioni nn sn incluse nella frase e possono variare da gusti personali a motivi ragionati... sono pochi i problemi dove ti affidi ai tuoi gusti, la maggiorparte dei casi scegli in base alle esigenze.
    La tua motivazione personalmente non la condivido...i microcontrollori possono essere scritti direttamente in assembler o in linguaggi di descrizione dell'hardware evoluti tipo vhdl/system c, ottenendo risultati migliori rispetto a un linguaggio compilato, x il resto delle applicazioni, dove magari ti serve un linguaggio di sistema o cmq prestazioni elevate, il c++ all'atto pratico non perde praticamente niente rispetto al c, ovviamente questa è la mia opinione, perfettamente contestabile.

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da oregon
    Non capisco perché "vecchiume" ...

    Leggere un file di testo linea per linea in C non mi pare una attività abbandonata ...

    In ogni caso, le funzioni usate per leggere singoli valori / caratteri (fino all'intera linea) dipendono molto dal problema particolare, che potresti dettagliarci ...

    La fscanf, usata opportunamente, potrebbe risolvere tutto.
    oltretutto mi trovo a scontrarmi con programmi scritti per piattaforme AIX e il compilatore nativo supporta solo ANSI C, quindi il vecchiume lo devo gestire

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.