Discussioni progetto:Qualità/ProgettoRestart

Contenuti della pagina non supportati in altre lingue.
Da Wikisource.

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)[rispondi]

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)[rispondi]