Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703

    c++ compromessi di lettura file

    ciao a tutti,

    stavo sperimentando diversi modi di lettura di dati da un file; ho testato:

    1) get
    2) getline
    3) read

    tutt'ora però ho diversi dubbi, in quanto per funzionare funzionano tutti senza alcun problema, ma di fatto non so quale sia lo stile migliore in questi casi; la situazione è questa -> file di testo(molto leggero), con dentro circa un massimo di 20 righe, ogni riga non va oltre 100-150 caratteri.. inoltre dovrei trovare un giusto compromesso velocità-errore_in_lettura;

    Ho provato a guardare un po nel forum, sembra che read sia estremamente veloce, tuttavia l'utente aveva fatto i test tramite un plugin di codeblocks(ide) che non ho ancora scoperto ^^ quindi preferisco testare personalmente. grazie.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Ok, ma la domanda quale sarebbe?

  3. #3
    In linea teorica la più veloce dovrebbe essere la read, che le altre funzioni citate dovrebbero utilizzare a loro volta, anche se puoi misurare facilmente qual è la più veloce scrivendo un semplice benchmark; il compromesso "velocità di lettura-errori di lettura" non ha senso, visto che nessuna delle funzioni citate prevede un margine di errore a favore della velocità, dovrebbero tutte restituire dati esatti.
    In ogni caso usa il metodo con cui sei più comodo; per una quantità di dati così ridotta la scelta è assolutamente indifferente.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    @shodan: la funzione che mi garantisca la maggior compatibilità e velocità.

    @MItaly: ti ringrazio prima di tutto per la risposta velocissima, in secondo luogo, anche per quanto riguarda la compatiblità read è la migliore?! In quanto non devo avere alcun vincolo di s.o.
    -----------------------------------------------

    puoi misurare facilmente qual è la più veloce scrivendo un semplice benchmark
    non ne sono ancora capace.
    -----------------------------------------------

    la funzione read funziona in questo modo:
    read ( char* s, streamsize n )

    io quindi gli passo un array di caratteri e una dimesione; tuttavia ho qualche perplessità sulle dimesioni da passare alla funzione, di fatto essa legge fino a EOF(end of file) quindi tutto il file, in questo caso io non potrei fare in modo che la dimesione(streamsize n) sia autodefinita??; in quanto dichiarare un array di mettiamo 300 caratteri e poi magari usarne solo 100(è un ipotesi, in quanto i caratteri presenti nel file sono variabili) è uno spreco di memoria.
    -----------------------------------------------
    Per quanto riguarda uno stile corretto, è sbagliato utilizzare tutte queste funzioni (get,getline,read) nello stesso programma? Nel senso, magari 2 moduli usano getline e uno read ecc.. Tieni conto che ho inziato a programmare da solo 3 mesi, e che non abbiamo ancora fatto i puntatori..

  5. #5
    Originariamente inviato da cleaner
    @shodan: la funzione che mi garantisca la maggior compatibilità e velocità.

    @MItaly: ti ringrazio prima di tutto per la risposta velocissima, in secondo luogo, anche per quanto riguarda la compatiblità read è la migliore?! In quanto non devo avere alcun vincolo di s.o.
    Sono tutte funzioni standard C++, non ci sono problemi di compatibilità di nessun genere.
    io quindi gli passo un array di caratteri e una dimesione; tuttavia ho qualche perplessità sulle dimesioni da passare alla funzione, di fatto essa legge fino a EOF(end of file) quindi tutto il file, in questo caso io non potrei fare in modo che la dimesione(streamsize n) sia autodefinita??; in quanto dichiarare un array di mettiamo 300 caratteri e poi magari usarne solo 100(è un ipotesi, in quanto i caratteri presenti nel file sono variabili) è uno spreco di memoria.
    Considera che un PC attuale di fascia bassa ha 2 GB di RAM; quanto credi che contino 200 byte di stack sprecati?
    Per quanto riguarda uno stile corretto, è sbagliato utilizzare tutte queste funzioni (get,getline,read) nello stesso programma? Nel senso, magari 2 moduli usano getline e uno read ecc.. Tieni conto che ho inziato a programmare da solo 3 mesi, e che non abbiamo ancora fatto i puntatori..
    Non è sbagliato perché si usano in circostanze diverse; devi leggere un file a blocchi di dimensione fissa? Usa la read. Devi leggere un file per righe? Usa la get o la getline.

    Tu cosa devi fare esattamente?
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    mi hai risposto esattemere quello che speravo, cioè che non è sbagliato utilizzarle, dipende dalla circostanza.
    Ti ringrazio davvero, post risolto

  7. #7
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Se vuoi il massimo della velocità, nemmeno read va bene dato che tutte le funzioni di istream che hai citato, utilizzano le funzioni dello streambuf interno.
    Puoi usare anche la sgetn dello streambuf (sobbarcandoti eventualmente l'onere di una parserizzazione).

    http://www.cplusplus.com/reference/i...buf/sgetn.html

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.