Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di ing82
    Registrato dal
    Sep 2014
    Messaggi
    177

    [C++] salvataggio opzioni programma

    Per la prima volta mi imbatto nel problema di dover/voler salvare le impostazioni scelte dall'utente durante l'utilizzo del programma.
    La soluzione è memorizzarle in un file all'uscita dal programma che verrà richiamato alla nuova esecuzione dello stesso.
    Volevo un parere, da chi con molta più esperienza di me si è già imbattuto in questo problema, per capire se sia meglio usare file di testo o file binari.
    Personalmente propendo verso i file di testo, perchè sono i primi che ho iniziato a usare (mai usato i file binari), perchè vedo che i software in generale si appoggiano a questo tipo di file, perchè a suo tempo avevo letto che l'uso di file binari per questo genere di utilizzo presentano svantaggi quando si decide di cambiare la "struttura" dei dati memorizzati (perdonate il lessico poco professionale) durante aggiornamenti del programma stesso è più difficile da gestire.

    Grazie a tutti in anticipo

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Sicuramente meglio un file di testo. Con Windows puoi anche prendere in considerazione il registro.

    In tutti i casi, fai attenzione nel codice quando rileggi i valori perché devi *sempre* prendere in considerazione il fatto che questi possono essere modificati (anche in modo che non ti aspetti) dagli utenti.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di ing82
    Registrato dal
    Sep 2014
    Messaggi
    177
    Ne aprofitto per un'ulteriore domanda: il file va quindi organizzato in sezioni, come ad esempio un file dxf, impostando dei "marcatori" che permettano di individuare il cambio delle sezioni?
    Quanto alle modifiche apportate dagli utenti, non ci avevo pensato, credo che tra qualche tempo tornerò a chiedere lumi per approfondire la questione, per ora inizio ad implementare il mio file di testo e relativo codice per la gestione.
    Grazie

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Una buona idea è quella di usare un file XML
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Mah... io ogni volta che mi ritrovo a parsare dell'XML mi chiedo se abbiano fatto apposta a spingere come standard un formato che sembra fatto apposta per fare schifo sia agli uomini che ai computer.

    XML è estremamente verboso, è faticoso (=> lento e inutilmente complicato - vedi tag-self-chiusi, entities, virgolette di vari tipi più o meno opzionali, ...) da parsare per i computer, poco leggibile per gli umani, fa a pugni con qualunque sistema di source control (chiunque abbia mai dovuto guardare dei diff di file XML sa di cosa parlo) e ha un sacco di orpelli inutili per casi semplici - la dicotomia elementi figli/attributi è in genere ridondante e si mappa male su parametri fatti con un'alberatura semplice, tutte le menate di namespace, XSL, doctype, CDATA & co. sono complicazioni inutili nei casi d'uso "normali" - e nativamente perde ogni informazione sul tipo di dati, anche solo a livello di distinzione tra stringhe e numeri (mentre in JSON rimane ben definito).

    Personalmente piuttosto di XML consiglierei JSON o praticamente qualunque altra cosa (addirittura un file .INI per memorizzare impostazioni di un programma semplice può essere la scelta migliore a livello di leggibilità, di modifica manuale e di parsing da parte dell'applicazione).
    Ultima modifica di MItaly; 22-10-2015 a 23:37
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Anche yaml non è male.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  7. #7
    Utente di HTML.it L'avatar di ing82
    Registrato dal
    Sep 2014
    Messaggi
    177
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Una buona idea è quella di usare un file XML
    Quote Originariamente inviata da MItaly Visualizza il messaggio
    Personalmente piuttosto di XML consiglierei JSON o praticamente qualunque altra cosa (addirittura un file .INI per memorizzare impostazioni di un programma semplice può essere la scelta migliore a livello di leggibilità, di modifica manuale e di parsing da parte dell'applicazione).
    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    Anche yaml non è male.
    Da una certezza all'ennesimo dubbio ...sinceramente pensavo di appoggiarmi ad un "classico" (anche se per me è tutto da scoprire) file .INI.
    Pensavo inoltre, anche perchè credo di averlo letto in qualche altra discussione nel forum, di creare almeno 2 file, uno per le impostazioni lato UI (ad esempio, ultimo file, caratteristiche finestre, posizione dei file di impostazione, ecc), l'altro dedicato alle impostazioni "di esecuzione", nella fattispecie ad esempio le unità di misura a disposizione dell'utente e quella definita nell'ultimo utilizzo (più avanti arriveranno le impostazioni di calcolo (n. max cicli, precisione, ecc), materiali(per cui magari converrà creare un ulteriore file), ecc): può aver senso?

    La scelta era già orientata verso questo tipo di file in quanto contemplata anche da qsettings di Qt, e date le mie scarse conoscenze di programmazione, non ho voglia di impararmi altro al di fuori dello stretto necessario, a meno che il gioco ne valga la candela (ma il programma è per uso personale, quindi anche se non esaltante nelle prestazioni, pazienza).
    Che non ho ancora capito di qsettings, è se gestisce solo impostazioni lato UI (v. sopra per cosa intendo), o è possibile usarlo per salvare qualsiasi tipo di settaggio del programma.
    L'unica certezza per ora è studiare, provare, risolvere l'errore...e un sacco di tempo che se ne va...
    Grazie

  8. #8
    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    Anche yaml non è male.
    È molto leggibile e pensato bene, ovviamente avendo uno scope più ampio è più complicato da affrontare (la cosa stupenda di JSON è che le specifiche saranno una paginetta a dire tanto ).
    Quote Originariamente inviata da ing82 Visualizza il messaggio
    Da una certezza all'ennesimo dubbio ...sinceramente pensavo di appoggiarmi ad un "classico" (anche se per me è tutto da scoprire) file .INI.
    Pensavo inoltre, anche perchè credo di averlo letto in qualche altra discussione nel forum, di creare almeno 2 file, uno per le impostazioni lato UI (ad esempio, ultimo file, caratteristiche finestre, posizione dei file di impostazione, ecc), l'altro dedicato alle impostazioni "di esecuzione", nella fattispecie ad esempio le unità di misura a disposizione dell'utente e quella definita nell'ultimo utilizzo (più avanti arriveranno le impostazioni di calcolo (n. max cicli, precisione, ecc), materiali(per cui magari converrà creare un ulteriore file), ecc): può aver senso?

    La scelta era già orientata verso questo tipo di file in quanto contemplata anche da qsettings di Qt, e date le mie scarse conoscenze di programmazione, non ho voglia di impararmi altro al di fuori dello stretto necessario, a meno che il gioco ne valga la candela (ma il programma è per uso personale, quindi anche se non esaltante nelle prestazioni, pazienza).
    Che non ho ancora capito di qsettings, è se gestisce solo impostazioni lato UI (v. sopra per cosa intendo), o è possibile usarlo per salvare qualsiasi tipo di settaggio del programma.
    L'unica certezza per ora è studiare, provare, risolvere l'errore...e un sacco di tempo che se ne va...
    Grazie
    Sì se usi QSettings un file ini è una buona possibilità, e tutto sommato non è che ti interessi troppo del formato esatto del backend (a parte che per la modifica manuale). In che senso "può gestire solo impostazioni lato UI"? Ci metti dentro quel che ti pare...
    Discorso due file separati: se non è strettamente necessario per altri motivi, non ne vedo il motivo, basta fare più sezioni nel file .INI (quelli che QSettings chiama "gruppi").
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    @MItaly json è un subset di yaml(1.2 formalmente), quindi tecnicamente puoi partire con json e passare a yaml quando vuoi.

    Ovvio poi che ci sono vari strumenti, alcuni più semplici, altri più complessi; alcuni più orientati all'uomo, altri meno.
    Json è buono per la sua alta flessibilità e semplicità, yaml tuttavia è più potente (a livello espressivo) e offre una sintassi più "umana".

    Infine se non necessiti di configurazioni complesse logico che anche un ini va bene.
    (Anche lua non è male per le configurazioni, devi solo bloccare l'accesso alle funzioni "pericolose" (banalmente ridefinirle))
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

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.