Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    7

    scrittura su file e chiarimento.

    Salve a tutti,

    ho bisogno di alcune delucidazioni sulla scrittura di un file di testo in java.

    Vi spiego il mio problema: devo creare un'applicazione che effettua un ordinamento lessicografico di un file di testo.
    Ho delle stringhe del tipo:

    codice --- nome --- indirizzo --- cap

    ho trovato in giro per il web alcune dritte su come raggiungere il mio obbiettivo ma ci sono ancora alcuni punti poco chiari...

    1)sono riuscito a scrivere le funzioni che mi realizzano l'ordinamento servendomi di oggetti della classe comparable. Riesco a fare l'ordinamento e a stamparlo a video (nell'IDE per intenderci) però, quando provo a scrivere l'output su file (attraverso l'utilizzo di printWriter) non sono in grado di far stampare la lista ordinata ma ottengo questo: SortableContainer@16a55fa

    dove SortableContainer è la classe in cui utilizzo gli oggetti comparable per effettuare l'ordinamento... dov'è che sbaglio??? devo postare del codice??? nn lo faccio ora perchè è un pochino lunghetto...

    2) se volessi ordinare la mia lista di stringhe contemporaneamente sia per codice e poi soltanto per i nomi che corrispondono ai codici uguali come potrei fare???

    esempio:

    lista iniziale
    codice --- nome --- ......
    ciao b
    ciao a
    ciao2 c
    ciao2 d


    lista dopo l'ordinamento

    codice nome

    ciao a
    ciao b
    ciao2 c ----> non vengono proprio toccati perchè ho ordinato solo i nomi
    ciao2 d ----> corrispondenti al codice ciao


    se qualcuno avesse qualke dritta da darmi, gliene sarei molto grato

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: scrittura su file e chiarimento.

    Originariamente inviato da anseg
    se qualcuno avesse qualke dritta da darmi, gliene sarei molto grato
    Hai un file di testo che contiene diversi "campi". Una riga risulta essere un "record" di informazioni correlate. Pertanto la cosa più ovvia è quella di realizzare una classe che "modella" tali informazioni, per esempio una classe Nominativo (dico tanto per dire) che contiene i campi codice, nome, indirizzo e cap.

    Leggi il file riga x riga (es. con BufferedReader), estrai i campi e istanzi un oggetto Nominativo che poi aggiungi ad una lista (ArrayList o simile).

    Una volta che hai la lista la ordini secondo i criteri che vuoi. La tua classe Nominativo può implementare Comparable<Nominativo> oppure puoi definire una classe a parte che implementa Comparator<Nominativo>. Quindi ordini con il sort() di Collections.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    7
    ok... grazie per la risp....

    ho risolto la scrittura dell'oggetto sul file... praticamente sbagliavo io a invocare l'overriding di ToString... avevo già utilizzato i record per ogni stringa (utilizzando scanner per la lettura da file e useDelimiter(",") per separare i vari campi del record ) gestendo una classe che implementa Comparable...
    grazie alla tua spiegazione passo passo ho inquadrato il problema

    ora però c'è il secondo punto per il quale non viene in mente alcun metodo "intelligente" per realizzare una sorta di doppio ordinamento..

    ti ripeto il problema nel caso non fosse chiaro dal mess precedente...

    comincio ad ordinare il file per "codice" e, trovate tutte le occorrenze di un certo codice, devo ordinare questo gruppo per "nome" senza toccare i restanti record...
    terminato l'ordinamento del primo gruppo, passo ad iterare il ragionamento per tutti gli altri codici finchè il file non risulta completamente ordinato... Ovviamente ciascun gruppo avrà un ordinamento "locale" (i record saranno ordinati soltanto localmente al gruppo ordinato in precedenza per "codice")...

    Piccolo esempio:


    codice -- nome (l'alternanza dei codici è puramente casuale)
    aab ----- z
    aba ----- g
    aab ----- a
    aba ----- f

    dopo l'ordinamento

    codice -- nome
    aab ----- a
    aab ----- z
    aba ----- f
    aba ----- g

    Come si può vedere, l'ordinamento è locale poichè il nome "z" viene prima di "f" e "g", siccome il suo codice ha una priorità maggiore (in termini di ordinamento) rispetto agli altri due...

    Spero di essere stato chiaro...

    Saluti

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da anseg
    comincio ad ordinare il file per "codice" e, trovate tutte le occorrenze di un certo codice, devo ordinare questo gruppo per "nome" senza toccare i restanti record...
    Quindi devi ordinare per codice e, a parità di codice, per nome???

    Hai in memoria la lista degli oggetti, giusto? Hai implementato Comparable o un Comparator?? Bene, questo criterio di ordinamento lo stabilisci proprio qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    7
    Quindi devi ordinare per codice e, a parità di codice, per nome???
    esatto!! per coddice e, a parità di codice, per nome..

    Hai in memoria la lista degli oggetti, giusto?
    Si, ho in memoria la lista degli oggetti... ovviamento svuoto la memoria soltanto quando vado a stampare il risultato... ma credo che questo non sia un problema dato che questo passo viene dopo l'ordinamento....

    Hai implementato Comparable o un Comparator??
    Codice PHP:
    public class Item implements Comparable<Item
    implemento un comparable per gestire i miei record....
    dopodichè effettuo un ordinamento utilizzando mergesort per via della sua complessità...

    come imposto il criterio di ordinamento??? forse mi conviene abbandonare l'idea di mergesort oppure va bene comunque??

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da anseg
    Codice PHP:
    public class Item implements Comparable<Item
    implemento un comparable per gestire i miei record....
    dopodichè effettuo un ordinamento utilizzando mergesort per via della sua complessità...
    Quindi hai, presumo, un ArrayList<Item> (o simile ... comunque un List). Per l'ordinamento nota che basta sort() di Collections!

    Per stabilire l'ordinamento .... è davvero semplice. Faccio l'ipotesi che il tuo Item abbia almeno i metodi es. getCodice() e getNome(), entrambi restituiscono String.

    codice:
    public int compareTo(Item altro) {
        int r = getCodice().compareTo(altro.getCodice());
    
        if (r != 0) {
            return r;
        }
    
        return getNome().compareTo(altro.getNome());
    }
    Se i 2 codici sono diversi, avrai già dal primo compareTo un <0 o >0. Se sono uguali, avrai 0, pertanto confronti il nome. Tutto qui!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    7
    ok ok... abbandono merge sort

    ho capito come dici di fare... almeno spero...

    mi sa, mi sa che una ripassatina veloce a comparator e collection fa proprio al mio caso...

    ti faccio sapere a breve se sono riuscito a risolvere

    grazie ancora!!

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    7
    ariecchime...

    lavoro finito... fatto e funziona alla grande...

    grazie andbin!! Quel piccolo pezzettino di codice mi ha risolto mille problemi...

    Ho dovuto risistemare un poco il codice per prevedere anche i metodi get e set che non avevo utilizzato previo complicarmi la vita in altri modi...

    thanks

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.