Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Posizionamento e Gestione File di testo

    Salve ragazzi, sono uno studente universitario e devo realizzare un progetto.
    Tra le tante cose, il progetto mi chiede di tener traccia di un po di dati (tra cui dati di utenti, dati di eventi etc...), proprio come se potessi avere a disposizione un DB MySQL. Il punto è che devo realizzare tutto ciò usando un solo file, e per di più non posso usare altre librerie esterne quali SQLite o simili (causa riduzione voto). Passando al dunque, ho pensato di realizzare un file con questa struttura:
    Mario §field§ Rossi §field§ impiegato §field§ §row§ Pinco §field§ Pallino §field§ spazzino §field§ §row§ §table=UTENTI§ ...... §table=EVENTI§ etc....
    Utilizzando tale struttura mi è molto facile leggere il file, in quanto posso usare la funzione split, che mi ritorna in un array i vari campi. Il problema sorge quando bisogna scrivere all'interno del file..
    Ad esempio, se voglio aggiungere un nuovo utente, come mi posiziono esattamente prima del token §table=UTENTI§ ?
    In realtà avevo pensato che è comunque gestibile leggendo l'intero file, mettendo ogni campo in un array, aggiungere degli indici all'array in modo da aggiungere un nuovo utente, e ricostruire l'intera stringa del file, e quindi cancellare il file e riscriverlo daccapo; fatto sta che cosi facendo è tutto molto più arduo ed è per questo che mi chiedevo se era possibile posizione direttamente il puntatore nella regione desiderata, e aggiungere i dati direttamente....
    Io non ne sono capace e no ho idea di come fare... qualche aiutino?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    No, la "modifica" di un file di testo consiste esattamente nella lettura e riscrittura dell'intero file.
    Non è possibile "aggiungere" dati in posizioni arbitrarie se non applicando forti restrizioni sulla struttura del file (esempio, lunghezza fissa per il singolo record), ma questo aggiunge non pochi grattacapi (ad esempio, tutto ciò che viene DOPO la posizione corrente del puntatore viene irrimediabilmente sovrascritto).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    No, la "modifica" di un file di testo consiste esattamente nella lettura e riscrittura dell'intero file.
    Non è possibile "aggiungere" dati in posizioni arbitrarie se non applicando forti restrizioni sulla struttura del file (esempio, lunghezza fissa per il singolo record), ma questo aggiunge non pochi grattacapi (ad esempio, tutto ciò che viene DOPO la posizione corrente del puntatore viene irrimediabilmente sovrascritto).


    Ciao.
    Ok... detto ciò puoi suggerirmi un metodo "intelligente" per modificare un file del genere? o un metodo per gestire questi dati su un unico file?

    Ad esempio, utilizzando un randomaccessfile, è possibile selezionarsi all'n-esimo byte, quindi ad esempio potrei leggere fino a quando non incontro la parola che mi delimita, vedo quando byte ho letto fin'ora e mi posiziono esattamente li; il problema è che detto a parole sembra facile.... ma non a fatti!

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Se il tuo file non ha una lunghezza record fissa, allora non ha nemmeno senso pensare di usare RandomAccessFile.
    Semplicemente perchè, comunque, dovresti rileggerti tutto il file nel momento in cui poi dovrai ri-scriverlo per apportare una modifica.

    Innanzitutto non ho capito se devi obbligatoriamente usare un singolo file per tutti i dati o se puoi, quantomento, separare ciascun tipo di dato in un file a se stante. Ad esempio, nel tuo primo messaggio parli di tabella "utenti" e tabella "eventi". Hai facoltà di dividere le due informazioni su due file distinti (Esempio: file utenti.txt per gli utenti e file eventi.txt per gli eventi) o ti è richiesto obbligatoriamente di usare un solo file?

    L'idea di fondo, comunque, è di leggere l'intero file una sola volta (ad esempio, all'inizio dell'esecuzione) e mantenere in memoria le informazioni usando delle apposite classi che modellano i dati... qualunque tipo di modifica (aggiunta, modifica, cancellazione) la fai in memoria e alla fine scrivi lo stato "attuale" nel nuovo file (eventualmente andando in sovrascrittura).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Ho l'obbligo di mantenermi all'interno di un solo file...

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Ok, quindi un'idea potrebbe essere quella di leggere tutto il file all'avvio dell'applicazione e memorizzare in apposite strutture dati le informazioni delle varie "tabelle". Può andar bene, ad esempio, un List<Utente> per l'elenco degli utenti, un List<Evento> per l'elenco degli eventi, o altre strutture simili a seconda dell'uso che poi ne dovrai fare all'interno dell'applicazione.

    Alla chiusura dell'applicazione (o allo scatenarsi di un determinato evento, o su esplicita richiesta dell'utente, questo lo deciderai tu), verrà effettuata la scrittura completa del file, trasponendo lo stato attuale delle strutture dati.


    Ciao. :ciauz
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Tag per questa discussione

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.