|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 3852
|
[Java] Struttura per I/O rudimentale
Ciao a tutti, devo realizzare un piccolo database di giocatori di Calcio (anche se non amo particolarmente questo sport)
Per ogni calciatore devo memorizzare in un file di testo con input da tastiera una serie di dati (Nome_Cognome, ruolo in campo, data di nascita, squadra di appartenenza, voto medio in campo ecc) Da questo file di testo in cui memorizzo i dati devo poter aggiungere ulteriori calciatori in istanti successivi e poter estrarre tutte le informazioni relative a un calciatore inserendo il suo Nome_Cognome. Che strutture mi conviene usare per semplificare al massimo il tutto?
__________________
Cerco fotocamera con buono zoom!! CLICCA! ° Moderatore del Forum Ufficiale di ElaborarE (responsabile sezione HI-FI e Car Audio) ° Ultima modifica di Andrea16v : 01-08-2006 alle 13:58. |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
|
Quote:
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer °SetiEmperor°| Ninja Technologies { qualunque cosa sia, è veloce e fa male (cit.) } |
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 3852
|
Quote:
Devo usare solo costrutti "semplici" quali array, vettori, liste, code, al limite posso aiutarmi con una classe già esistente ma sarebbe meglio di no. Il file di testo prodotto non serve che sia direttamente consultabile e i dati una volta inseriti non necessitano di modifiche e cancellazioni, solo di ricerche in lettura tramite stampa di righe di testo (per esempio per sapere i migliori di ogni squadra) ed eventualmente ulteriori inserimenti di calciatori in momenti successivi.
__________________
Cerco fotocamera con buono zoom!! CLICCA! ° Moderatore del Forum Ufficiale di ElaborarE (responsabile sezione HI-FI e Car Audio) ° |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
|
Quote:
Visto che il tuo intento è *semplificare*, hai già pensato a scrivere per ogni giocatore una riga (comma separated o fixed length) nel file? Quando devi effettuare un inserimento appendi una riga al file, quando devi effettuare una lettura scorri tutte le righe del file finchè non trovi quella/e che ti interessano e le trasformi in oggetti che poi inserisci al volo in strutture dati più utili.
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer °SetiEmperor°| Ninja Technologies { qualunque cosa sia, è veloce e fa male (cit.) } |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Concordo con Angus... Se la traccia ti mette queste limitazioni allora vai di campi separati da punto e virgola... Su ogni riga c'è un giocatore...
Per leggere e scrivere usa BufferedReader e BufferedWriter... Usa StringTokenizer, se ti è possibile, per separare i campi in lettura... |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 5206
|
... e aggiungo (oltre a quanto già detto da Angus e cionci), ti crei una nuova classe (es. Calciatore) che "incapsula" tutti i dati del calciatore.
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%) Java Versions Cheat Sheet |
|
|
|
|
|
#7 |
|
Junior Member
Iscritto dal: Jul 2006
Messaggi: 2
|
Puoi usare la serializzazione; definisci una classe con tutte le
proprieta' e i metodi accessor e mutator di tali proprieta'. Poi puoi implementare dei metodi per la visualizzazione e la ricerca... Cmq hai molti modi per definire un semplice database, quindi prima bisogna capire cosa vuoi fare, se e' un esercizio allora devi rispettare cosa esso ti chiede, se invece e' un tuo scrupolo personale allora hai il mare intorno... cioa |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Esempio di formato:
---calciatore--- nome: mario rossi ruolo: attaccante squadra: roma data_nascita: 123123123 numero_maglia: 10 ecc... ---calciatore--- Definisciti dei metodi del tipo: String leggiStringa(BufferedInputStream s, String delimitatore) int leggiIntero(BufferedInputStream s, String delimitatore) Date leggiData(BufferedInputStream s, String delimitatore) void leggiDelimitatore(BufferedInputStream s, String delimitatore) dove ad esempio leggiIntero(BufferedInputStream s, String delimitatore) legge la prossima linea dallo stream, verifica che inizi con il delimitatore, quindi elimina il delimitatore dalla linea, elimina eventuali spazi iniziali e finali e interpreta quello che resta come un intero. ad esempio se vuoi leggere la riga numero_maglia: 10 invochi: int n = leggiIntero(s, "numero_maglia:"); Con questi metodi puoi leggerti tutti i dati e interpretarli come vuoi, in modo parametrico rispetto al delimitatore. Per leggere un calciatore: Codice:
private void Calciatore leggiCalciatore(BufferedInputStream s){
leggiDelimitatore(s, "---calciatore---");
String nome = leggiStringa(s, "nome:");
String ruolo = leggiStringa(s, "ruolo:");
int numero_maglia = leggiIntero(s, "numero_maglia");
//ecc...
Calciatore calciatore = new Calciatore(nome, ruolo, numero_maglia,...);
return calciatore;
}
Ogni metodo dovrebbe lanciare un'eccezione se la riga non inizia con il delimitatore aspettato. All'avvio dell'applicazione l'intero "database" dovrebbe essere caricato in memoria. La serializzazione è comoda e facile ma non va bene per due motivi: 1 - se hanno assegnato questo esercizio è perche uno deve far pratica con la lettura e scrittura degli stream di i/o quindi non è vero che non ha senso asegnare i progetti imponendo di non utilizzare classi avanzate, bisogna prima imparare l'abc... 2 - se cambia una classe con la serializzazione perdi tutti i dati perche gli oggetti serializzati non saranno più compatibili con la nuova classe e quindi il database diventa illegibile.
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
|
Quote:
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer °SetiEmperor°| Ninja Technologies { qualunque cosa sia, è veloce e fa male (cit.) } |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Quote:
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 3852
|
Quote:
__________________
Cerco fotocamera con buono zoom!! CLICCA! ° Moderatore del Forum Ufficiale di ElaborarE (responsabile sezione HI-FI e Car Audio) ° Ultima modifica di Andrea16v : 07-08-2006 alle 09:26. |
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
|
Quote:
Da Java fan ritengo che esistano linguaggi migliori per imparare l'ABC (dell'approccio procedurale, non OO), che poi serve comunque per qualsiasi linguaggio. Sono invece d'accordo che è importante conoscere il framework di un linguaggio ad alto livello come Java, partendo dalle basi come l'I/O, ma non mi si dica che non posso usare una HashMap per effettuare le mie ricerche... [edit] Ok, sto facendo la figura di quello che vuole avere per forza ragione. E' tutto IMHO. [/edit]
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer °SetiEmperor°| Ninja Technologies { qualunque cosa sia, è veloce e fa male (cit.) } Ultima modifica di Angus : 04-08-2006 alle 10:16. Motivo: precisazione |
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 3852
|
edited
__________________
Cerco fotocamera con buono zoom!! CLICCA! ° Moderatore del Forum Ufficiale di ElaborarE (responsabile sezione HI-FI e Car Audio) ° Ultima modifica di Andrea16v : 13-08-2006 alle 09:29. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:27.



















