Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 40
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    37

    cercare righe uguali in un file txt

    salve ho un grande problema in pratica il mio programma dovrebbe leggere un file txt
    e individuare le righe uguali questo è il codice ma non riesco a capire l'errore
    suppongo che non riesce a fare il confronto grazie in anticipo

    codice:
    import java.io.*;
    
    public class dai2 {
        public static void main(String[] args) throws IOException {
        FileReader leggi=new FileReader("trripa.txt");
        BufferedReader leggicatalogo = new BufferedReader(leggi);
        String riga;
        int numRighe = 0;
        riga = leggicatalogo.readLine();
    
    	       while (riga != null) {
    	       numRighe++;
    	       riga = leggicatalogo.readLine();
                                    }
               System.out.println("il numero di righe è  "+numRighe);
               leggicatalogo.close();
               FileReader leggi1=new FileReader("trripa.txt");
               BufferedReader leggicatalogo1 = new BufferedReader(leggi1);
               String[] arrLinee = new String[numRighe];
               String[] arrLinee1 = new String[numRighe];
               while (leggicatalogo1.readLine()!=null) 
               	{
                           for (int i=0;i<(arrLinee.length-1);i++)
                           {
                             arrLinee[i]=leggicatalogo1.readLine();
    	                     for(int j=i+1;j<arrLinee.length;j++) 
    	                     	{
    	                          arrLinee1[j]=leggicatalogo1.readLine();
    	                          System.out.print("\n");
    	                            if (arrLinee[i].equals(arrLinee1[j])) 
    	                               
    	                               { 
    	                               	System.out.println("ciao");
                                        
                                       }
                                       else{
                                       	    
                                       	    leggicatalogo1.readLine();
                                       } 
    
                                }                 
                           }
                }
      
                                leggicatalogo1.close();
      
          }
      }

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

    Re: cercare righe uguali in un file txt

    Originariamente inviato da bong88
    il mio programma dovrebbe leggere un file txt e individuare le righe uguali
    Righe uguali in qualunque posizione? Allora ogni riga devi confrontarla con tutte le altre. Un bel po' di combinazioni se il numero di righe è alto ....

    Originariamente inviato da bong88
    questo è il codice ma non riesco a capire l'errore
    A me pare abbastanza (molto) "fumoso". Innanzitutto se non sai a priori il numero di righe, sarebbe più utile usare un ArrayList, non un array. Certo ... puoi anche contare prima le righe, poi istanziare l'array e poi ri-leggere tutte le righe e metterle nell'array.

    A prescindere che cosa scegli come tecnica, una volta che hai letto tutte le righe e le hai in memoria, devi semplicemente fare un doppio ciclo for annidato per fare i confronti (e nota, se si ragiona si escludono combinazioni inutili).

    Non hai bisogno di 2 array. Non hai bisogno di fare un while con 2 for dentro con mescolate in mezzo letture delle righe (questo è il "fumoso").
    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 L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    1. il codice va indentato con i tag [co de][/co de]
    2. i nomi delle classi iniziano per maiuscola
    3. prova a controllare il codice che hai scritto, io non sono riuscito a capire cosa vorresti fare.
    4. Esistono gli ArrayList. Ti consiglio di dar loro una occhiata. Eviteresti di leggere il file due volte.
    5. quando hai riempito l'array con le righe del file, chiudi il file che non ti serve più a niente. A questo punto ti serve solo un algoritmo per trovare le stringhe doppie nell'array. Il doppio ciclo di for ci vuole tutto, ma prendi carta e penna e simulane l'avanzamento. Se hai presente quelle tabelle con le distanze da città a città, possono esserti di aiuto. La diagonale non fa testo, e metà della tabella è di troppo.
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315

    Moderazione

    Ho corretto il tuo post aggiungendo i tag CODE, come previsto dal Regolamento interno, al punto 6.

    In futuro pensaci tu.


    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
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    37
    praticamente devo leggere un file txt scorrere le righe prendere tutte quelle uguali e scriverle su un altro file su un unica riga

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,280
    Originariamente inviato da bong88
    devo leggere un file txt scorrere le righe prendere tutte quelle uguali
    E per questo ti sono già state fornite (da me e da Pastore12) indicazioni utili e che in teoria dovrebbero esserti sufficienti per correggere e andare avanti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Originariamente inviato da Pastore12
    Il doppio ciclo di for ci vuole tutto
    Non necessariamente! Può bastare anche 1 solo ciclo.

    Ciò è possibile usando l'HashMap, il cui uso in questo caso è molto forzato (dal punto di vista concettuale), ma che fornisce ottimi risultati in termini di codice e prestazioni.

    Pseudo-codice:
    codice:
      fileToRead;
      fileToWrite;
      map;
    
      while ci sono righe da leggere in fileToRead
          begin
               if map.get(i-esima riga letta) != null
               than scrivi riga in fileToWrite;
               else map.put(i-esima riga, valore facoltativo che sia diverso da null);
          end

  8. #8
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Originariamente inviato da VincenzoTheBest
    Non necessariamente! Può bastare anche 1 solo ciclo.

    Ciò è possibile usando l'HashMap, il cui uso in questo caso è molto forzato (dal punto di vista concettuale), ma che fornisce ottimi risultati in termini di codice e prestazioni.
    Miseriaccia ladra... la HashMap in questo contesto mi pare il classico colpo di bazooka per colpire una lattina di alluminio a 3m di distanza...

    Sul discorso delle prestazioni non saprei, vorrei fare una prova..., ma la struttura del file (numero lunghezza e randomicità delle righe) potrebbe alterare i dati a favore di una soluzione piuttosto che l'altra. Credo.

    Poi il problema si risolve in tempo n * log(n) anche senza HashMap (scansione, ordinamento, controllo) ma in un contesto del genere neanche mi ci metterei. Anche se a livello di codice viene pulito pulito anche questo...
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  9. #9
    Originariamente inviato da Pastore12
    Sul discorso delle prestazioni non saprei, vorrei fare una prova...
    Allora potevi documentarti prima di rispondere. La complessità del metodo get di HashMap è costante in quanto le posizioni delle chiavi sono calcolate mediante una funzione hash che è parzialmente iniettiva.
    La soluzione dunque presenta un vantaggio per quanto riguarda l'uso della risorsa tempo.

    Originariamente inviato da Pastore12
    Poi il problema si risolve in tempo n * log(n) anche senza HashMap
    Con invece, la riduci a O(n).

    Originariamente inviato da Pastore12
    ma la struttura del file (numero lunghezza e randomicità delle righe) potrebbe alterare i dati a favore di una soluzione piuttosto che l'altra. Credo.
    La distribuzione dei dati non c'entra assolutamente nulla, in quanto il file devi comunque scannerizzarlo interamente.
    Non ti interessa sapere a priori dove e quando le righe si ripetono, in quanto l'obiettivo non è quello di prendere le prime n righe ripetenti, ma tutte.

  10. #10
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Ricordavo un log n di troppo...

    Sulla randomicità delle righe pensavo più a un problema di collisioni.
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

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.