• User

    leggere txt - esaminarlo - scrivere txt nuovo

    Salve, come si intuisce dal titolo il programma che dovrei realizzare è il seguente:
    Devo leggere un file (.txt) che ho (molto grande 10MB), all'interno del quale ci sono scritti dei dati che devo esaminare per poi restituire il risultato in un nuovo txt.
    Per leggere il txt penso di utilizzare il BufferedReader e per restituire l'output il PrintWriter (corregetemi se sbaglio).
    Il problema principale è esaminare il tutto all'interno del file? Come fare?
    In questo file ci sono moltissimi dati (un dato per ogni riga) e devo confrontare solo alcune righe di questo file tra loro, per eliminare quelle che si ripetono.
    Mi potete aiutare?
    Grazie mille


  • User

    P.S. tutto questo devo farlo in Java


  • ModSenior

    Credo sarebbe meglio indicare un esempio di successione delle righe del file, una decina possono bastare, e magari che tipo di confronto fare.


  • User

    Questa è una parte della struttura del txt, ma i vari blocchi hanno la stessa struttura di questi che ho copiato:
    <<
    Legenda:
    Hairpin ed Energia (1° Rigo)
    Sequenza (2°Rigo)
    Posizione dell'hairpin in HPV(3° Rigo)
    Nome del Gene (4° Rigo)
    Seed (5° Rigo)
    Posizione del Seed in HPV (6° Rigo)
    Posizione del complementare del seed nell'UTR (7° Rigo)
    Braccio dell'Hairpin in cui si trova il seed(8° Rigo)

    .(((......(((.(((((((.((((....(((((...(((((((..(-31.00)
    AGCTGGACAAGCAGAACCGGACAGAGCCCATTACAATATTGTAACCTTTTGTT
    684
    (SPRK)
    TGTGACTC
    742
    42
    3p

    .(((((..((((((((((((..........((..(((((((.(.((... (-30.60)
    TTGGTTTTCCTGACACCTCATTTTATAATCCAGATACACAGCGGCTGGTTTGGGCCT
    5884
    (SPRK)
    TTCCTGAC
    5890
    126
    5p

    .(((......(((.(((((((.((((....(((((...(((((((.....)(-31.00)
    AGCTGGACAAGCAGAACCGGACAGAGCCCATTACAATATTGTAACCTTTTGTTGCAA
    684
    (SPRK)
    TGTGACT
    742
    43
    3p

    .(((((..((((((((((((..........((..(((((((.(.((.... (-30.60)
    TTGGTTTTCCTGACACCTCATTTTATAATCCAGATACACAGCGGCTGGTTTGGGCC
    5884
    (SPRK)
    TTCCTGA
    5890
    127
    5p

    .(((((..((((((((((((..........((..(((((((.(.((.. (-30.60)
    TTGGTTTTCCTGACACCTCATTTTATAATCCAGATACACAGCGGCTGGTTTGGT
    5884
    SAA2/NM_001127380.1
    TTTATAA
    5905
    870
    5p

    Considera che io, esclusa la leggenda, devo esaminare il 4° rigo di ogni blocco e SOLO se c'è scritto lo stesso nome devo esaminare il 5°rigo, se quest'ultimo è uguale o compreso allora scarto l'intero blocco dove questo è compreso, altrimenti se sono diversi scriverò nell'output l'intero blocco.
    Ad esempio:confronto il primo blocco col secondo e noto che il 4° rigo del primo blocco (SPRK) è uguale a quello del secondo blocco, allora esamino il 5° rigo di entrambi e noto che però non sono nè uguali nè compresi l'uno nell'altro (TGTGACTC con TTCCTGAC) per cui entrambi i blocchi restano nel testo e passo a confrontare il primo blocco col terzo blocco. In questo caso il quarto rigo è sempre uguale (SPRK) allora esamino il 5° rigo e vedo che TGTGACT è compreso in TGTGACTC per cui posso scartare l'intero terzo blocco, e così via....nell'ultimo blocco noto invece che addirittura il 4° rigo è diverso e quindi neanche effettuerò un controllo e li lascerò entrambi nel testo...ecc...(perchè i blocchi sono un centinaio).
    Forse non sono stato chiarissimo ?!?! 😄
    Spero tu possa aiutarmi.


  • ModSenior

    Ricordiamo a tutti che stiamo parlando di JAVA.
    Io farei cosi mi preparo una struttura dati da me definita che contenga le 8 righe, e ogni 8 righe compongo un nuovo oggetto di questa struttura mentre sto leggendo il file txt.
    Alla fine della lettura di tutto il file txt, avrai il vettore della tua struttura dati con tutti di i blocchi di 8 righe da confrontare.

    Ti dovrebbe risultare tutto piu facile in quanto farei una cosa del tipo oggetto(i)->4riga per il confronto.


  • User

    capito, potresti farmi un esempio di codice sia per come creare la struttura dati e sia per copiare di volta in volta il blocco di 8 righe dal txt?
    grazie


  • ModSenior

    Saran 5 anni che non uso Java, posso trovare il tempo di un breve ripasso durante il fine settimana, nel frattempo magari vediamo se qualche utente arriva con la soluzione. 🙂


  • User

    ok grazie tante 🙂


  • User

    ok fatto grazie lo stesso 😉


  • ModSenior

    Magari potresti postare la soluzione se ti va, cosi altri utenti potrebbero prendere spunto.


  • User

    Certamente grazie al fondamentale aiuto di un ragazzo:

    import java.io.;
    import java.util.
    ;

    public class Main {

    public static void main(String[] args) throws Exception{
        HashMap hm = new HashMap();
        FileReader fr = new FileReader("NomeFile.txt");
        BufferedReader br = new BufferedReader(fr);
        String s;
        while((s = br.readLine()) != null) {
            if (!hm.containsKey(s)) 
                hm.put(s,s);
        }
        fr.close(); 
    
        Set set = hm.entrySet();
        Iterator i = set.iterator();
        FileWriter fw = new FileWriter(new File("output.txt"));
        BufferedWriter bw = new BufferedWriter(fw);
    
        while(i.hasNext()){
            Map.Entry me = (Map.Entry)i.next();
            bw.write((String)me.getValue());
            bw.newLine();
            }
        fw.close();    
    }
    

    }