Discussioni progetto:Qualità/ProgettoRestart
find_stringa[modifica]
Devo ammettere che mi trovo in difficoltà: non capisco come funziona e quale sia lo scopo di find_stringa.
Capisco che serva per trovare una sottostringa, ma in quel caso, non sarebbe molto più semplice usare una regex?
Alex: illuminami :-)
Samuele 23:51, 13 giu 2012 (CEST)
- mettiti gli occhiali da sole. ;-)
- Quando ero "piccolo" non capivo una beata mazza delle regex. Allora mi son fatto find_stringa in python. Appena imparato qualcosa di js (ma ancora le regex proprio non le digerivo) ho immediatamente tradotto find_stringa in js e ho continuato a usare il mio schema mentale dipendente da questa piccola routine (con cui ho fatto cose UFO....). Ma non ero soddisfatto:le mancava mancava la capacità di risolvere strutture annidate, come i tag html (facile con jQuery, o con i parser xml... ma erano arabo...) o i template annidati (meno facile.... ). Alla fine ho avuto l'illuminazione e adesso find_stringa risolve allegramente qualsiasi annidamento. Poi ho capito le regex (per sommi capi) e subito mi son detto: com'è che con le regex si risolvono i tag annidati? E ho scoperto che.... non è facile; anzi ho trovato esperti che dicono che non si può.
- find_stringa, può, ed è facile.
- Il secondo motivo per cui la uso è che è straordinariamente veloce, ci facevo il parsing del dump completo di wikisource alla ricerca di "cose" in pochi secondi, quando un parser xml ci metteva minuti.
- Ora, forse "uno bravo" risolve via regex la questione dei tag annidati senza limiti di livello di possibile annidamento; ti sottopongo questo esercizio:
Estrarre dalla stringa t="{{A destra|{{smaller|{{AutoreCitato|Alessandro Manzoni|{{Sc|Manzoni}}}}}}}}" il parametro del template smaller
- con find_stringa ci metto un secondo: find_stringa(t,"{{smaller|","}}",0,"{{"); con le regex (immaginando che gli annidamenti potrebbero essere qualsiasi....) mi ci vorrebbe un po' più tempo. Tu quanto ci metti? Qualsiasi siano i possibili annidamenti di template in qualsiasi ordine?
- I primi tre parametri sono intuitivi, il quarto restituisce i delitatori (valore 1) o li scarta(valore 0); il quinto è il magico trucco, vi si rappresenta il prefisso comune alle eventuali strutture annidate, per schivare gli errori da annidamento.
- find_stringa(), inoltre, è il motore di produciLista(), che lo esegue ripetutamente estraendo ordinatamente in una lista tutte le sottostringhe che matchano, con identica sintassi. --Alex brollo bis (disc.) 00:58, 14 giu 2012 (CEST)