Tempo fa avevo fatto un visualizzatore di liste di testo (parti di ricambio) che avevano struttura variabile.
L'avevo fatto con Python e le librerie Qt.
Avevo una classe base che copriva il 70% dei casi, e il restante era fatto da classi derivate.
La griglia era fatta sulla classe base, ma visualizzava anche le classi derivate, usando gli stessi metodi, essendo che l'unica differenza tra le classi era nel parsing del testo.
Ne stavo sviluppando una versione più 'intelligente', ma il progetto fu chiuso.
In sostanza la classe aveva dei metodi per:
- caricare il file e filtrare le righe inutili (intestazioni, numeri di pagina, ecc)
- fare il parsing e convertire il testo in un vettore di dizionari
- altri metodi accessori (tipo conteggio delle righe, degli item, ecc)
- la classe era fatta come un iteratore, per cui si potevano prelevare tutte le righe con semplice ciclo
Il progetto più 'intelligente' prevedeva una classe unica che fosse in grado di gestire da sola anche i casi 'anomali', ma era ancora in stato di 'cappello pensatore'. L'idea era di usare le regexp, in unione con la gestione delle eccezioni di Python per iterare tra tutti i modelli disponibili fino a quando non si intercettava un modello che filtrava correttamente il testo.