Sto provando a confrontare due file di testo. Voglio calcolare quante linee sono state aggiunte e rimosse. Fondamentalmente cosa sta facendo git diff --stat
. Punti bonus per non dover memorizzare l'intero contenuto del file in memoria.
L'approccio che sto attualmente considerando è:
- legge ogni riga del vecchio file
- calcola un hash (probabilmente MD5 o SHA-1) per ogni riga
- memorizza gli hash in un set
- fa lo stesso per ogni riga nel nuovo file
- ogni hash dal vecchio set di file che manca nel nuovo set di file è stato rimosso
- ogni hash del nuovo set di file che manca nel vecchio set di file è stato aggiunto
Probabilmente vorrò escludere le linee vuote e tutte le linee bianche. C'è un piccolo problema con le linee duplicate. Questo può essere risolto memorizzando anche la frequenza con cui appare un hash o confrontando il numero di linee nel vecchio e nel nuovo file e regola le linee aggiunte o rimosse in modo che i numeri si sommino.
Vedi spazio per miglioramenti o un approccio migliore?
Modifica
Attualmente sto usando Java e la libreria SVNKit.