Domande (e risposte) sul ModuloDue

In questa pagina potete porre domande sul ModuloDue.

Per gli OffTopic c'è la pagina apposita.



FORUM scomodo

professore non sarebbe possibile fare in modo che le risposte a una domanda siano visualizzate sotto la domanda originale in cascata e che si possa scegliere se postare una risposta o un nuovo titolo per una discussione. le domande per il modulo 1 sono state molte, e diventano difficili da leggere in questo modo...

-- Comment added by GabrieleTarantino on 07 Apr 2005


RE: FORUM scomodo

Ho rimesso il forum in ordine cronologico.

Il forum rimane così (rozzo e schifoso smile )

-- Comment added by AndreaSterbini on 07 Apr 2005


AHI, KE MAL DI TESTA....

AHI...sono afflitto da un doloroso mal di testa.......chissà xké.....ah già: ho letto modulo2.pdf!!!! smile

-- Comment added by DavidBenedetti on 07 Apr 2005


Come faccio a linkare libpcre ?

A quanto pare, professore, lei è un veggente big grin . Scherzi a parte, ho scaricato il pacchetto delle librerie pcre ed il pacchetto source. Ora mi si presenta il piccolo problema che non so linkarle all'interno del DevC---++ ^^' qualche suggerimento?

-- Comment added by RiccardoVona on 07 Apr 2005


PCRE

Ehm, sarò ignorante, ma come hai fatto a scaricarla ed installarla???? smile

-- Comment added by DavidBenedetti on 07 Apr 2005


PCRE

Ho scaricato l'install delle librerie e dei source dal link che il professore ha messo su ModuloDue. smile

-- Comment added by RiccardoVona on 07 Apr 2005


Come faccio a linkare libpcre ?

"it seems you need to make sure that libpcre.dll.a is in a library path of
DevC---++
(see Tools/Compiler Options/Libraries), pcre.h in an include path, and
pcre.dll in the system path (the environment variable Path)."
Non so se è giusto...domani provo e vi faccio sapere

-- Comment added by RiccardoVona on 07 Apr 2005


verbatim

Accidenti! la prossima volta ricordati di CHIUDERE il tag verbatim!

RE: pcre e Devc++

Una volta installato PCRE per windows aprite il progetto e:
  • aggiungete alle dir degli include la dir <dir di installazione>\include
  • aggiungete alle libs la libreria <dir di installazione>\lib\libpcre.lib
  • copiate libpcre.dll nella dir del progetto

-- Comment added by AndreaSterbini on 09 Apr 2005


INIZIO MODULO 2

Professore, personalmente non ho ancora cominciato a sviluppare le funzioni del modulo 2 (e testModulo 2), anche perché aspettavo il modulo2.h, per la definizione di nuovi errori, o altro....ho sbagliato? GRAZIE!

-- Comment added by DavidBenedetti on 10 Apr 2005


eliminaTagsHtml()

Mi accodo a te. Preferisco non scrivere anzichè ricontrollare dopo tutte le funzioni per i codici d'errore. Comunque ho dato uno sguardo alle funzioni: la eliminaTagsHtml() ad esempio elimina i tags HTML che hanno una certa sintassi che però non ho ben capito. Qualcuno può aiutarmi? Thanks

-- Comment added by MassimilianoNatale on 10 Apr 2005


eliminaTagsHtml( )

A dir la verità nemmeno io ho capito molto bene quale sia la sintassi di un tag html...cioè: so la generica sintassi dei tag (conosco le basi dell'html) però non capisco le specifiche quando dicono, ad esempio: "elimina tutti i tags html che seguono una delle seguenti sintassi: "<" [1 o più caratteri senza '<' o '>'] ">"...etc...mi spiego: se io incontro una "<" e poi del testo, capisco per un'altra "<", ma se incontro una ">" chi mi vieta di considerarlo un tag html anche se dopo c'è un'altra ">"??? PS = Professore, la mia domanda precedente è sempre valida!!! GRAZIE!!!

-- Comment added by DavidBenedetti on 10 Apr 2005


eliminaTagsHtml()

Vuol dire da "<" finchè non incontri "<" o ">". Le parentesi quadre indicano quello che può essere compreso fra "<" e ">". Se dopo "<" incontri un ">" vuol dire che il tag è finito. Se dopo "<" incontri un "<" vuol dire che la parte compresa fra i due "<" non fa parte di un tag html. Potrebbe benissimo essere semplice testo che contiene un "<". La sintassi indica perciò qualunque tag html. Non so se sono riuscito ad essere chiaro.

-- Comment added by GiovanniColombi on 10 Apr 2005


LOL big grin

scusi il titolo scemo prof., ma nulla di meglio si adattava! big grin
mi è arrivata oggi una email di un vero signor spammer!!! big grin
credo che per lo sviluppo di questo progetto abbiamo molto da imparare da quella email!
quando l'ho letta inizialmente mi sono chiesto se tante volte il filtro antispam di Hotmail non si fosse completamente rinco!!! riporto di seguito il testo dell'email:
Hello, Do you want to spend less on your MEDlCATIONS?
 
Visit PharmacyByMail SHOP and SAVE OVER 80%

VIAGRA VALIUM CIALIS XANAX and many other 

Have a nice day.
P.S. You will be pleasantly surprised with our prices! ;)
mi chiedevo per quale assurdo motivo Hotmail non fosse riuscito a filtrare tutte quelle "parole incriminate"! analizzando poi il sorgente HTML del messaggio ho iniziato a ridere e non ho ancora smesso... big grin
lo riporto qui di seguito:
<div>
<div style="background-color:"><div class=RTE><div>
<font face=Arial size=3>Hello, Do you want to spend less on your MEDlCATIONS?</font></div>
<div> </div>
<div><font size=4><font face=Arial>Visit </font><a href="javascript:ol('http://www.qvxpix.pmpi.associatispokesm.com');">
<font face=Arial size=4>PharmacyByMail SHOP and SAVE OVER 80%</font></a></font></div>
<div> </div>
<div>
<table cellspacing=0 cellpadding=0 border=0>
  <tbody>
  <tr valign=bottom>
    <td rowspan=2><font face=Arial size=4>V</font></td>
    <td><font face=Arial size=4></font></td>
    <td rowspan=2><font face=Arial size=4>GR</font></td>
    <td><font face=Arial size=4></font></td>
    <td rowspan=2><font face=Arial size=4>UM C</font></td>
    <td><font face=Arial size=4></font></td>
    <td rowspan=2><font face=Arial size=4>lS</font></td>
    <td><font face=Arial size=4></font></td>
    <td rowspan=2><font face=Arial size=4>NA</font></td>
    <td><font face=Arial size=4></font></td>
  <tr>
    <td><font face=Arial size=4>lA</font></td>
    <td><font face=Arial size=4>A VALl</font></td>
    <td><font face=Arial size=4>lAL</font></td>
    <td><font face=Arial size=4> XA</font></td>
    <td><font face=Arial size=4>X and many other</font></td>
</tr></tbody></table></div>
<div> </div>
<div><font face=Arial size=3>Have a nice day.</font></div>
<div><font face=Arial size=3><b>P.S.</b> <i>You will be pleasantly surprised with our prices! ;)</i></font></div></div></div>
ROTFL!!! big grin
in pratica le "parole incriminate" sono scritte in una tabella fatta in maniera tale che alcune celle della seconda riga si fondono con quelle della prima... mi piacerebbe conoscerlo il genio autore del messaggio!!!

-- Comment added by AlbertoLaRocca on 12 Apr 2005


modulo2.h eccetera

Ho appena aggiornato la descrizione del progetto ed "uploadato" i files .h e un paio di esempi.

-- Comment added by AndreaSterbini on 12 Apr 2005


Eliminazione di tag invisibili nidificati

Come detto a lezione, quando si vogliono eliminare i tag nidificati bisogna:
  • O contare quanti tag aperti ci sono in modo da capire qual'e' il tag che chiude.
  • Oppure eliminare un tag invisibile solo se non include nessun tag.

Esempio in cui inserisco della monnezza in mezzo alla parola Viagra (con qualche accapo per non allargare troppo la finestra)

Via<font size="0">un po' di monnezza 
<font color=white>che contiene altra monnezza</font>
dentro</font>gra

  • Prima della cura questo appare come:
    • Viaun po' di monnezza che contiene altra monnezzadentrogra
  • Se sbaglio ad eliminare vien fuori:
    • Viadentrogra
  • Se elimino solo il tag più interno:
    • Viaun po' di monnezza dentrogra
  • Se conto le aperture/chiusure di tag ed elimino il più esterno:
    • Viagra

-- Comment added by AndreaSterbini on 13 Apr 2005


NULL not defined

Vi potrebbe capitare di vedere questo messaggio compilando.

Includete stdlib.h (prima di modulo2.h)

-- Comment added by AndreaSterbini on 13 Apr 2005


ehm...

mi scusi prof. ma vorrei farle notare che sia su IE che su FF il suo esempio di prima sui tag nidificati non viene visualizzato come "Viagra"... lo scopo finale dello spammer non dovrebbe essere quello di far apparire la parola "Viagra"? perché piuttosto qualcuno non propone qualche idea per "ripulire" l'esempio di email che ho ricevuto ieri? big grin

-- Comment added by AlbertoLaRocca on 13 Apr 2005


HTML

Scusate l'ignoranza in termini di HTML, ma la parte finale di un tag è SICURAMENTE '<\'...'>' oppure potrebbe anche essere '<'...'\>' ??? GRAZIE!!!

-- Comment added by DavidBenedetti on 13 Apr 2005


Eliminazione di tag invisibili nidificati

e se il testo contenesse un
<tag invisibile> monnezza <tag visibile> parola </tag visibile> monnezza </tag invisibile>

-- Comment added by MarcelloLagana on 13 Apr 2005


Risposte

RE: HTML

  • il tag di apertura è <tag>
  • il tag di chiusura è </tag>
  • il tag aperto e chiuso senza "contenuto" ma solo argomenti è <tag/>

Attento allo slash, si usa quello in avanti "/"

RE: Eliminazione di tag invisibili nidificati

Il tag esterno dovrebbe rendere invisibile quello che sta dentro .... (forse)

RE: Ehm ...

Evidentemente i browser cercano di evitare i tag di dimensione nulla riducendo ad una dimensione minima. Comunque il tag col colore dello sfondo (e quindi invisibile) rimane valido.

Bisognerebbe provare a incollare il mio esempio in una email in Outlook ....

-- Comment added by AndreaSterbini on 13 Apr 2005


Viagra

Certo che è un bell'esempio, ne incollo qui una versione lievemente modificata che fa capire come funziona.

V GR UM C lS NA
lA A VALl lAL XA X and many other

-- Comment added by AndreaSterbini on 13 Apr 2005


Macro nel modulo2

le macro nel modulo2 come le definiamo? propongo di far iniziare il loro nome con le proprie iniziali seguite dal numero 2, ad es. ALR2_MIN oppure ALR2_MAX, questo per evitare confusione col modulo1, dove ho definito le corrispondenti ALR_MIN e ALR_MAX. preferisco evitare di riutilizzare le due macro che ho definito nel modulo1 perché il modulo2 secondo me dovrebbe essere più o meno indipendente dall'1.

PS: prof. lo sanno tutti che Outlook per visualizzare le anteprime HTML usa l'ActiveX di IE... è per questo che è così bacato, anzi lo è anche più di IE perché almeno IE visualizza pagine online, cioè che stanno nella SecurityZone (un hacker in genere non fa affidamento sul fatto che l'utente salvi la pagina sul PC, perché spesso non lo fa), ma le email visualizzate da Outlook non stanno nemmeno nella SecurityZone, stanno in una directory locale il cui path rimane sempre più o meno uguale su tutti i sistemi.

-- Comment added by AlbertoLaRocca on 14 Apr 2005


*dim nelle prime due funzioni

Nelle prime due funzioni dobbiamo considerare *dim così come in eliminaTagsInvisibili() ? Inoltre nelle librerie fornite manca la definizione di: RESULT_OK (a mio avviso una dimenticanza) e dei valori ritornati dalle funzioni (ed ovviamente sono i valori presenti in testModulo1.h). Chiedo ora: Va dunque include anche la libreria testModulo1.h? Oppure verrà utilizzato testModulo2.h ma in versione estesa? (Un'inclusione di una libreria non presente in directory manderebbe a cozze la compilazione)

-- Comment added by MassimilianoNatale on 14 Apr 2005


Come calcolare ovecsize

Per calcolare ovecsize in modo che ovector sia abbastanza grande da contenere tutti gli indici calcolati da pcre_exec() si può fare così:

1) si chiama la funzione pcre_fullinfo() con argomento options = PCRE_INFO_CAPTURECOUNT (vedetevi man pcreapi per gli altri argomenti) che torna il numero di subpatterns che sono presenti nell'espressione regolare (n);

2) ovecsize = (n---+ 1) * 3, cioè il minor numero di elementi da allocare per avere un ovector che possa contenere n subpatterns;

-- Comment added by GiovanniColombi on 14 Apr 2005

Una curiosita'.....anzi, piu di una

Professore, quando chiamo ad esempio rimpiazzaLettere(...) (una singola volta), al ritorno avro' in 'testoPulito[]' la stringa contenuta da testoSporco[] (nella chiamata) pulita dal match che ha effettuato, giusto? E poi, sempre in questa funzione, il match che devo effettuare e' il primo che trovo in testoSporco[] scandendo 'lettereDaRimpiazzare[]' in ordine? Nel senso, se la stringa che passo in testoSporco e' "\/iagra che fa tutti fe|ici", al ritorno avro' "\/iagra che fa tutti felici" in testoPulito[] (visto che, nell'ordine, '|' come campo 'search' e' definito prima di '\/' nel vettore in questione)?

-- Comment added by DavidBenedetti on 14 Apr 2005


Ops!

Nel messaggio di prima alcune volte ho scritto la V nel modo "incriminato", ma la renderizzazione del browser da proprio 'V'....ha messo un filtro bayesiano anche a twiki prof??? O sono io che sto perdendo la vista pian piano...??? smile

-- Comment added by DavidBenedetti on 14 Apr 2005


RimpiazzaLettere: va chiamata prima o dopo aver fatto pulizia dei tags html?

Professore, un collega (DavidBenedetti) oggi a lezione mi ha fatto notare un comportamento un po bizzarro che si potrebbe verificare quando chiamiamo la pulisciTestoSemplice.
Supponiamo di avere un email che al suo interno contenga un tag nullo del tipo size 0. Se noi chiamiamo ripetutamente la rimpiazzaLettere prima della eliminaTagsInvisibili, modificheremo quello 0 in una o, non facendolo più riconoscere alla eliminaTagsInvisibili. Come dobbiamo comportarci?

-- Comment added by RiccardoVona on 14 Apr 2005


secondo me infatti bisogna chiamare prima le routines di pulizia dei tags HTML, e poi quelle di pulizia delle monnezze grafiche smile

-- Comment added by AlbertoLaRocca on 14 Apr 2005


NON SONO IL PROF, MA RISPONDO PER LUI (CHE ONORE) smile

L'ho fatto notare anche al professore Riccardo, e lui ha detto che possiamo tranquillamente levare da 'lettereDaRimpiazzare[]' il match "0" "O" in modo da evitare il comportamento bizzarro rilevato. E pensare che avevo implementato 'rimpiazzaLettere(...)' in modo che effettuava i match solo se i match trovati erano al di fuori di un tag html!!! SOB!!!! smile

-- Comment added by DavidBenedetti on 14 Apr 2005


Finezza!

"Monnezze grafiche"....che austera definizione che dai agli artifizi cotanto articolati che gli spammers ingegnano per turlupinare i filtri bayesiani Alberto!!!

-- Comment added by DavidBenedetti on 14 Apr 2005


funzionamento di rimpiazzaLettere

ma questa rimpiazzaLettere esattamente come deve funzionare? deve correggere solamente il primo match che incontra ed essere richiamata più volte o fare tutti i match che trova in una botta sola? (vi prego, ditemi che è la seconda, ormai ho fatto così e non mi va di cancellare... T_____T)

-- Comment added by AlbertoLaRocca on 14 Apr 2005


Finezza!

asd big grin David, come sempre sei un capolavoro di retorica! wink big grin

-- Comment added by AlbertoLaRocca on 14 Apr 2005


ordine delle fasi di pulizia

prof. da quanto ho capito lei ha detto a David di togliere la entry {"0","o"} nella tabella delle sequenze da rimpiazzare, ma non sono affatto d'accordo! ci pensi bene: tra tutte le "monnezze grafiche" ( big grin ) che abbiamo raccolto finora nella tabella l'espediente dello 0 al posto della O è il più usato! inoltre abbiamo anche verificato che il tag <font size="0"> non funziona ne' su FF ne' su IE, quindi nemmeno su OE, quindi piuttosto direi di eliminare quello!! tanto di tag bast***i abbiamo visto che ce ne sono altri: come si fa a risolvere la storia della tabella con le celle fuse? big grin propongo di controllare gli eventuali attributi rowspan dei tag che permettono la costruzione delle tabelle (suppongo che la "fusione" delle celle fosse dovuta a quello...) in fondo, diciamoci la verità: quante sono le persone che in buona fede mandano una email all'amico impostando una tabella con le celle fuse??? smile spesso nessuno usa nemmeno l'HTML...
PS: poi, se proprio proprio, non c'è bisogno di eliminare ne' il tag <font size="0"> ne' l'entry {"0","o"}: come ho detto prima basta eseguire la pulizia dei tag prima di quella delle lettere da rimpiazzare.

-- Comment added by AlbertoLaRocca on 14 Apr 2005


rimpiazzaLettere(...)

Anche io all'inizio l'avevo pensata cosi Alberto, ma penso che sia la prima ipotesi che hai fatto...semplicemente per il fatto che sulle specifiche c'e' scritto che questa funzione (come quelle che eliminano i tags html) va richiamata "finché ci sono match": perció penso sarebbe abbastanza illogico chiamarla una volta, fargli fare TUTTE le sostituzioni, e poi aspettarsi che in una seconda chiamata non dia subito MATCH-NOT-FOUND di ritorno!!! Comunque aspetto un'illuminazione da parte del professore.....Ah, a proposito professore, ci dica anche se dobbiamo controllare le celle come ha detto Alberto...cosi mi sparo subito!!! smile

-- Comment added by DavidBenedetti on 14 Apr 2005


uso di pcre

professore, ma siamo obbligati ad usare la libreria delle espressioni regolari? a me sembra un tantino complicata, mi trovo meglio a fare tutto a mano :-
se non la usiamo, la cosa come influisce sul voto? si alza o cala?

-- Comment added by AlbertoLaRocca on 14 Apr 2005


substring

volevo sapere da qualcuno se sà una funzione per la ricerca di substring che non tenga conto della differza tra lettere minuscole e maiuscole...?io ho trovato solo la strstr(const char *s1, const char *s2); ma ovviamente non va bene!!

-- Comment added by TizianoFranchi on 14 Apr 2005


Errore Linker: Multiply defined symbol

Il linker mi da questo errore quando tento di compilare il progetto, e non so come risolverlo. Scrivo qui di seguito l'ordine in cui linko i files:

modulo1.h
modulo2.h
testModulo1.h
testModulo2.h
testModulo2.c
modulo1.c
modulo2.c
mainprogetto.c

in testModulo2.c ho incluso solo testModulo2.h, ed in modulo2.c modulo2.h

Aiutooooooooooooo

-- Comment added by RiccardoVona on 14 Apr 2005


rimpiazzaLettere(...)

Il funzionamento di rimpiazzaLettere() è chiaro leggendo le specifiche di pulisciTestoSemplice che dice appunto di chiamare "ripetutamente" la funzione fin quando ci sono corrispondenze. PS: la prego prof. di non complicarci la vita, più di quanto già non lo sia, con questa storia delle tabelle.

-- Comment added by GiovanniColombi on 14 Apr 2005


Multiply defined symbols

Riccardo, a proposito di che file OBJ ti da' quell'errore?

-- Comment added by AlbertoLaRocca on 14 Apr 2005


Maiuscole e minuscole

Tiziano, io ho risolto complicandomi la vita (come sempre!), anke se di poco! Non ho fatto altro che allocare una stringa di lunghezza del tag (---+1!), copiarcelo dentro, passare tutta questa nuova stringa a minuscolo (e levando anche gli spazi....anche perché se il tag è 'font size = "0"' e cerchi il match con 'size="0"' definito in 'lettereDaRimpiazzare[]' non ottieni granché!) e poi utilizzare la strstr(...) in questa stringa....FATTO!

-- Comment added by DavidBenedetti on 14 Apr 2005


storia delle tabelle

ovviamente con "risolvere la storia delle tabelle" non intendevo complicare la vita a tutti più di quanto già non lo sia, anche perché le specifiche del progetto quelle sono e non possono essere modificate, se non in dettagli.
piuttosto volevo pensare a qualcosa da inserire nell'elenco dei tag da eliminare che permettesse di risolvere la questione.
ovviamente al limite quella storia può anche rimanere irrisolta, tanto neanche Hotmail con i filtri impostati alti riusciva a filtrare il messaggio! big grin

-- Comment added by AlbertoLaRocca on 14 Apr 2005


Multiply defined symbols

In testModulo2.c e in modulo2.c. Praticamente stavo notando che entrambi includono modulo2.h in cui c'è la dichiarazione di una variabile globale (ovvero lettereDaRimpiazzare[] e tagInvisibili[] ) e a lui questa doppia dichiarazione non gli piace...

-- Comment added by RiccardoVona on 14 Apr 2005


substring

David una cosa, ma la maiuscola o minuscola riguarda solo il primo carattere o si possono avere delle differenze anche all'interno??perchè se la maiuscola o minuscola può esserci solo per il primo carattere basta ignorarlo!!solo che il prof. a lezione ha detto che c'è una funzione specifica, ma nella libreria string.h (del libro) non c'è nulla del genere!!

-- Comment added by TizianoFranchi on 14 Apr 2005


Multiply defined symbols

Infatti non li devi includere tutti, devi includere solo modulo2.h e testModulo2.h, in quanto la loro inclusione è già stata prevista dal prof dentro questi due file. ovviamente il modulo1.h e testModulo.h devono trovarsi nella stessa cartella del modulo2.c!

-- Comment added by TizianoFranchi on 14 Apr 2005


Multiply defined symbols

Tiziano, infatti io includo solo modulo2.h e testmodulo2.h.... quella era la lista dei file che linko...

-- Comment added by RiccardoVona on 14 Apr 2005


substring

Non conoscendo bene l'html non so se, mettendo una maiuscola (o una serie di esse) in giro per il tag, esso venga comunque interpretato correttamente dal browser (ad esempio: 'FonT SIZe="0"')...quindi, per andare sul sicuro, ho utilizzato una soluzione radicale!!!

-- Comment added by DavidBenedetti on 14 Apr 2005


Multiply defined symbols

infatti non bisognerebbe mai dichiarare variabili globali negli headers: gli headers devono contenere solo tipi e direttive di preprocessore, nulla che vada nel segmento .text o .data.

-- Comment added by AlbertoLaRocca on 14 Apr 2005


substring

io ho risolto, se così si può dire, togliendo gli spazi(visto che non so se ci possono essere più spazi tra "font" e "size=\"0\"") e portando ogni carattere a minuscolo con int tolower(int c) e quindi poi il confronto si può fare tranquillamente..!

-- Comment added by TizianoFranchi on 14 Apr 2005


ESATTO!

Hai fatto proprio quello che ho fatto io (ma ke fai: copi???)!!!! smile

-- Comment added by DavidBenedetti on 14 Apr 2005


Errore Compilazione

Domanda, perchè quando includo il file modulo2.h mi dice che il file non è stata trovato? Premetto che il nome lo ho ricontrollato più volte il modulo2.h è nella stessa cartella dei file main.c e modulo2.c dove sbaglio?? Nei due file .c quando includo faccio #include<modulo2.h> ma ogni volta che compilo dice che non riesce a trovare il file .h che si trova nella stessa cartella! Dove Sbaglio???

Aiutoooo pleessseee!!

-- Comment added by Users.691942 on 15 Apr 2005


Errori compilazione

-- Comment added by DavidBenedetti on 15 Apr 2005


Errori Compilazione

Ops...Comunque...quando includi i file .h li scrivi fra doppi apici ("modulo2.h") oppure fra parentesi angolari???

-- Comment added by DavidBenedetti on 15 Apr 2005


Errori Compilazione

Probabile che sia quello l'errore
se tu fai un include di questo tipo: #inlude <modulo2.h> lui andrà a cercare il file .h dentro la directory include del compilatore. Dovresti provare a fare l'include in quest'altro modo: #include "modulo2.h", dovrebbe cercare il file .h nella tua directory di lavoro smile

-- Comment added by RiccardoVona on 15 Apr 2005


eliminaTagsHtml: caso particolare

ops mi ero scordato che le parentesi angolari sono per l'html big grin
Comunque, provando la eliminatagshtml mi sono trovato di fronte ad un caso particolare:
immaginiamo di avere questa stringa: " ciao, sono io "
la eliminatagshtml dovrà copiare la stringa "ciao, sono io" oppure "ciao, sono io" ?

-- Comment added by RiccardoVona on 15 Apr 2005


eliminaTagsHtml: caso particolare

GRRRR ci sono ricascato -.-'
allora aa sta per l'angolare aperta, ac per angolare chiusa
la stringa di esempio era "ciao aa blabla ac, sono aa blabla ac io aa/blabla ac"
devo copiare la stringa "ciao , sono aa blabla ac io" oppure la stringa "ciao aa blabla ac, sono io" ?

-- Comment added by RiccardoVona on 15 Apr 2005


eliminaTagsHtml: caso particolare

Dunque, a quanto ho capito, dovrebbe resituire la stringa "ciao aa blabla ac, sono io", perché la funzione non fa altro che scandire il testo, trovare la prima occorrenza di un tag (che ovviamente non sará un tag invisibile) e saltarlo, indipendentemente da quello che é....inoltre dovrá anche ignorare il fatto che il tag saltato sia di apertura o chiusura....e quindi non dovrá andare a matcharlo con il suo corrispondente! Almeno cosi' ho capito!!!

-- Comment added by DavidBenedetti on 15 Apr 2005


eliminaTagsHtml: caso particolare

Cioè aspetta... O_o mi sa che ho capito male le specifiche io allora....cioè a noi non importa se ci troviamo di fronte ad un tag di apertura ed uno di chiusura, devo solo non copiare una stringa che inizia con una parentesi angolare aperta seguita da [/caratteri/]e da una chiusa? Mi stai dicendo che tutto il lavoro di eliminazione dei tag aperti e chiusi più esterni non andava fatto? big grin io mi sparo big grin

-- Comment added by RiccardoVona on 15 Apr 2005


eliminaTagsHtml()

La eliminaTagsHtml non dovrebbe eliminare tutte le occorrenze di "< [almeno un carattere] />" oppure "</ [almeno un caratere] >" ? Nel caso di un "< < esempio /> />" elimino solo la stringa "< esempio />" oppure devo eliminare anche il tag più esterno?

-- Comment added by MassimilianoNatale on 15 Apr 2005


Suggerimento su rimpiazzaLettere

Mi serve un piccolo aiuto... ho notato che c'è un ambiguità sul carattere "|". Voi avete usato le librerie pcre, per fare la prima funzione?

-- Comment added by MarcoEsposito on 15 Apr 2005


INVALID_PARAMETER o BUFFER_TOO_SMALL? :-prof., nel Modulo1 se ci arrivava come parametro una dimensione di un buffer negativa noi restituivamo BUFFER_TOO_SMALL, ma adesso che abbiamo definito anche INVALID_PARAMETER quale dei due è più appropriato? inoltre nei test con dimensioni negative dovremo essere clementi e ritornare TEST_PASSED anche se la funzione testata restituisse il codice sbagliato?

-- Comment added by AlbertoLaRocca on 15 Apr 2005


TWiki pazzo... O_o'

ora vorrei sapere perché mi ha scritto tutto in grassetto...

-- Comment added by AlbertoLaRocca on 15 Apr 2005


buffer per il testoPulito

prof., se ho capito bene le prime 3 funzioni del modulo in pratica vengono chiamate esclusivamente dalla pulisciTestoSemplice; la mia pulisciTestoSemplice naturalmente utilizzerà sempre lo stesso buffer come parametro da passare per ricevere il testoPulito (e così penso che farà chiunque altro), quindi prendiamo ad es. la funzione rimpiazzaLettere: tale funzione se non trova match non scrive nulla in testoPulito, ma se lo trova dovrà ricopiare in testoPulito (ammettendo che le dimensioni del buffer siano sufficienti) nell'ordine le seguenti 3 cose:
  • tutto quello che ci sta prima del match
  • il replace del match
  • tutto quello che c'è dopo
ma ora la mia domanda è: dal momento che la pulisciTestoSemplice usa sempre lo stesso buffer, tutta la parte che c'era prima del match non c'è bisogno di ricopiarla 1 altra volta, giusto? va bene se anziché ricopiare tutto quello che c'è prima del match, saltiamo direttamente al match, ricopiamo il replace e la parte che c'è dopo? (ritengo che ci sarebbe un guadagno di tempo non trascurabile; ovviamente si parla sempre di ordini di decimillesimi di secondo, ma io cerco sempre di seguire una buona linea di principio)
se la risposta alla mia domanda è si, allora mi si presenta un problema: alla prima esecuzione della funzione di turno (ad es. rimpiazzaLettere) la parte che precede la prima occorrenza di un match chiaramente contiene garbage, quindi nella pulisciTestoSemplice prima di fare qualsiasi cosa dovremo fare uno strcpy di tutto il testoSporco in testoPulito, giusto?
grazie x l'attenzione. :P

-- Comment added by AlbertoLaRocca on 15 Apr 2005


rimozione tag invisibili

prof., lei ha scritto una tabella di coppie di stringhe dove in ogni entry troviamo il nome di un tag invisibile e un attributo che lo contraddistingue; noi quindi dovremmo cercare in testoSporco i tag con quel nome e quell'attributo e rimuoverli, ma c'è un problema: la sintassi dell'attributo come lei l'ha scritta nelle entry della tabella non è universale: ad esempio tra il nome dell'attributo (x es. "size", oppure "color") e l'uguale ci possono essere dei separatori (spazi, tabulazioni e newlines), poi possono essercene anche tra l'uguale e il valore dell'attributo, e inoltre le virgolette sono opzionali. ho già provato numerose combinazioni sia su IE che su FF, tutte quante funzionanti. magari non rispetteranno il W3C, ma in genere gli spammers sorvolano questi dettagli... big grin in teoria gli algoritmi che dovremmo sviluppare per il parsing corretto dell'HTML sono abbastanza complessi: io tempo fa ho realizzato un rudimentale parser XML (una DLL Win32) che ho zippato e messo in attachment alla mia pagina personale; se le interessa nello zip ci sono i sorgenti (veda la funzione ParseNode nel file main.c per gli algoritmi di parsing). l'XML come probabilmente saprà ha una sintassi pressoché identica a quella dell'HTML smile forse i miei algoritmi non la rispettano al 100%, ma per le necessità che avevamo in quel momento, quello che ho fatto andava---+ che bene.

-- Comment added by AlbertoLaRocca on 15 Apr 2005


Libreria pcre.h ...il mistero

Ho un piccolo problema. Quando installai Linux (Mandrake 9.0) installai anche tutti i pacchetti "sorgente" e simili. Ero abbastanza sicuro quindi di avere la libreria pcre.h. Per essere più sicuro ho eseguito anche il comando "man pcre", che ha dato esito positivo. Quando però sono andato a compilare il programma, mi ha detto "pcre.h no such file or directory". Sono andato a vedere in /usr/include/ ed effettivamente non c'è la libreria pcre.h. Dato che per qualche inspiegabile motivo il programma "trova file" del mio Linux non vuole funzionare più, qualcuno ha un'idea di dove potrei trovare la libreria? Altrimenti se qualcuno è moooolto buono potrebbe persino mandarmela via e-mail a eri.scorp@virgilio.it, ve ne sarei decisamente grato

-- Comment added by EnricoMontesi on 18 Apr 2005


Per essere più precisi

Mi servirebbero i pacchetti pcre e pcre-devel. Il secondo l'ho anche trovato in internet(versione 3.4) ma il primo non lo trovo. qualcuno di voi sa aiutarmi? Ho i cd di installazione di Linux Mandrake 9.0 ...non è che qualcuno sa se è incluso il pacchetto pcre e soprattutto dove diamine si trova?

-- Comment added by EnricoMontesi on 18 Apr 2005


Errori compilazione
Grazie io infatti lo scrivevo con le parentesi angolari,nel primo modulo lo inserito tra parentesi angolari mi fallirà i test o no????chiedo lumi!!! Poi nel modulo2.c va inserita pure la libreria testmodulo2.h oppure questa libreria va inserita solo nei test nel file testmodulo2.c??????chiedo ancora lumi!!!

-- Comment added by Users.691942 on 18 Apr 2005


Errori di compilazione....

In teoria avresti dovuto compilarlo il modulo1 per vedere se ti dava errori....ma certo, se 'modulo1.h' l'hai incluso tramite parentesi angolari......nn so....comunque nn voglio portarti sfiga.....Nel modulo2.c nn devi includere testModulo2.h, xké tanto nn ti serve....invece in testModulo2.c si!

-- Comment added by DavidBenedetti on 18 Apr 2005


Risposte

Purtroppo non ho potuto seguire il forum in questi giorni per cui sicuramente si incavolerete frown per le mie risposte ...

RE: Macro nel modulo2

Sono d'accordo. Iniziate le macro con le vostre iniziali ed il 2. (ad esempio AS2_MACRO1)

RE: *dim nelle prime due funzioni

Il parametro dim in ingresso contiene il numero di elementi (o caratteri) del vettore (o buffer) ed in uscita deve contenere il numero di elementi (o caratteri) inseriti nel vettore (o buffer).

RESULT_OK: visto che in "modulo2.h" includo il file "modulo1.h" i codici di errore vecchi sono presenti.

testModulo2.h: voi includete "testModulo2.h".

RE: Come calcolare ovecsize

Grazie Giovanni.

RE: Una curiosita'.....anzi, piu di una

[un altro subject che non dice molto smile ]

Per semplicità rimpiazzaLettere (ed anche le altre simili) torna dopo UN SOLO MATCH.

(sì l'esempio che fai dovrebbe essere giusto)

RE: rimpiazzaLettere: va chiamata prima o dopo aver fatto pulizia dei tags html?

Ripensandoci meglio preferirei che rimpiazzaLettere venisse applicata DOPO i tag HTML.

Ne discutiamo mercoledì a lezione.

RE: funzionamento di rimpiazzaLettere

Per semplificare rimpiazzaLettere (e anche le altre) sostituiscono SOLO IL PRIMO match.

RE: ordine delle fasi di pulizia

Mi hai convinto.

RE: uso di pcre

Ti ci voglio vedere a implementare il motore delle espressioni regolari smile .

(nei test userò espressioni regolari)

RE: substring

usa strcasestr (come strstr ma ignora le maiuscole)

RE: Errore Linker: Multiply defined symbol

Controllo e ti faccio sapere.

RE: storia delle tabelle

Non vi preoccupate della " storia delle tabelle".

RE: Multiply defined symbols

... ma che dici ... tutti i miei .h sono protetti da inclusioni multiple ...

Ho trovato! NON DEVI compilare i .h, ma solo i .c (per forza che ti vengono gli errori del linker!)

RE: eliminaTagsHtml: caso particolare

Facciamo come per eliminaLettere, si elimina il primo tag che si trova cercando:

  • prima tutti i <tag>
  • poi, se non se ne sono trovati, i </tag>
  • infine i <tag/>

RE: INVALID_PARAMETER o BUFFER_TOO_SMALL

Una dimensione negativa o nulla è INVALID_PARAMETER.

Una dimensione piccola è BUFFER_TOO_SMALL

-- Comment added by AndreaSterbini on 18 Apr 2005


3 ore di lezione...

Professore, il professor Panconesi oggi a lezione ha parlato delle 3 ore di lezione di mercoledì per il suo corso, ma lui ha parlato di questo mercoledì, invece lei sulla home del corso ha messo il 27....qual'è la data giusta??? GRAZIE!!!

-- Comment added by DavidBenedetti on 18 Apr 2005


pcre.h

scusi prof ma includendo questa libreria su linux mi da comunque questo errore: In function 'rimpiazzaEspressioneRegolare': undefined reference to 'pcre_compile' collect2: ld returned 1 exit status. Me lo da anche per la funzione pcre_exe, come mai???

-- Comment added by TizianoFranchi on 18 Apr 2005


EliminaTagsHtml, funzionamento

Leggendo le specifiche del progetto sono arrivato alla conclusione che la EliminaTagsHtml dovrebbe eliminare il tag html più vicino al carattere di chiusura (> oppure />). Dunque la mia funzione elimina prima i tag più interni, ma dovendo richiamarla più volte fino a quando ci sono tag nel testo non penso che questo comporti dei cambiamenti significativi

-- Comment added by MassimilianoNatale on 18 Apr 2005


Espressione Regolare in "er.txt"

Professore! Stavo diventando matto! lei in "er.txt" ha scritto questo...
# un qualsiasi tag HTML di tipo <qualcosa> o </qualcosa> 
</?[^<>]---+>
Ma quell'espressione trova anche
</qualcosa/>
<qualcosa/>
:P

-- Comment added by MarcoEsposito on 18 Apr 2005


pcre.h

Hai provato a linkare in fase di compilazione la libreria pcre con -l pcre??? Potrebbe essere quello...! smile

-- Comment added by DavidBenedetti on 18 Apr 2005


pcre.h

il problema viene quando uno sta programmando in Windows. Utilizzando Dev-cpp come programma nasce il problema di: dove inserire il codice -l pcre? Ho provato ad inserirlo in "strumenti/opzioni di compilazione/aggiungi questi comandi alla linea di comando del linker", ma mi da lo stesso errore. Ho provato allora a "aggiungi i comandi seguenti alla linea di compilazione", ma lì invece mi dice che non trova nessun file -lpcre. Ho provato anche a togliere "-l", ma evidentemente non è quello l'errore...che si fa? (risposte come "passa a Linux non sono apprezzate...se siamo ridotti a bestemmiare dietro Windows abbiamo sicuramente orripilanti motivi dietro...sia maledetta la microsoft!)

-- Comment added by EnricoMontesi on 19 Apr 2005


Risposte

RE: buffer per il testoPulito

strcpy? non basta scambiare i puntatori? wink

RE: rimozione tag invisibili

Per non complicare la rimozione dei tag invisibili lasciamo la sintassi che si è detta. (la soluzione corretta sarebbe avere 3 campi, tag, argomento, valore ma è troppo tardi per cambiarla). Aggiungendo nuovi casi alla tabella sarà possibile acchiappare qualcuno degli altri modi di scrivere gli stessi tag. Esempio:
   "font",   "color='white'"
   "font",   "color= 'white'"
   "font",   "color ='white'"
   "font",   "color = 'white'"
   "font",   "color=\"white\""
   "font",   "color= \"white\""
   "font",   "color =\"white\""
   "font",   "color = \"white\""

RE: pcre per Mandrake

Guarda su http://rpmfind.net/linux/rpm2html/search.php?query=pcre&submit=Search---+...&system=mandrake&arch=

RE: Errori di compilazione....

Inserisco la directory in cui sono i .h nel path di ricerca dell'include (opzione -I ) per cui non dovrebbe esserci problema.

ATTENZIONE: AGGIORNAMENTO di modulo2.pdf

Ho aggiornato modulo2.pdf per tener conto di un paio di cose che si sono dette sopra.

ATTENZIONE: ci siamo dimenticati i commenti HTML

MODIFICA: ci eravamo dimenticati dei eliminate i commenti HTML ovvero:
<!-- commento HTML che contiene un <TAG>html</TAG>  -->

Che però non possono essere elencati nella tabella di coppie "tag", "parametro=valore" per cui vanno gestiti ad-hoc.

-- Comment added by AndreaSterbini on 19 Apr 2005


Problemi di compilazione al laboratorio...

Dato che sia sotto windows che sotto Linux alla compilazione mi dava lo stesso errore di Tiziano Franchi (quello che David Benedetti ha detto di cercare di risolvere aggiungendo -l pcre...e a cui dico che magari la cossa fosse stata così banale) e non riuscivo ad uscirne, sono andato ai laboratori dell'università. Lì ho fatto girare il programma (scrivendo anche -l pcre) ma mi ha dato lo stesso identico errore. Qualcuno può illuminarci su cosa altro diamine si può fare? Ho anche pensato ad un errore di installazione della libreria e di PCRE...ma se anche i laboratori dell'università hanno questo errore come fa uno a fare il progetto?

-- Comment added by EnricoMontesi on 19 Apr 2005


Problemi di compilazione.....

Io ai laboratori ho compilato come ho suggerito a Tiziano Franchi, e ha compilato senza problemi....altrimenti non mi sarei permesso di dare consigli di cui non sapevo l'esito...!

-- Comment added by DavidBenedetti on 19 Apr 2005


rimozione tags invisibili

prof. aggiungendo un unico spazio tra l'uguale e il nome dell'attributo o il suo valore la questione non si risolve: in teoria potrebbero esserci 10.000 spazi farciti di newlines e tabulazioni (oppure anche il viceversa), e il tag sarebbe ancora valido (ma riuscirebbe a fregare il filtro).

-- Comment added by AlbertoLaRocca on 19 Apr 2005


Problemi di compilazione.....

Non volevo assolutamente dire che davi consigli a caso, scusa se sono sembrato un po' troppo aggressivo. Volevo soo dire che purtroppo la tua soluzione non andava bene nel mio caso. Questo fine settimana non potrò essere a casa, quindi se il problema non si risolve non potrò consegnare il modulo...perché la libreria non vuole saperne di funzionare.

-- Comment added by EnricoMontesi on 19 Apr 2005


Non per essere scansa fatiche...

Professore, ci poteva avvisare peró che il corso prevedeva il suicidio, no? Non per sembrare scansa fatiche o svogliato, pero' personalmente devo ancora sviluppare per bene le funzioni con le espressioni regolari e speravo almeno di aver sistemato quelle normali...solo che, ad una settimana dalla consegna, non mi aspettavo di veder cadere improvvisamente le mie piccole certezze.................

-- Comment added by DavidBenedetti on 19 Apr 2005


Non per essere scansa fatiche

Sono d'accordo con te Davide...sembra impossibile ma ora anche io devo rifare quasi da capo tutto quello che ho "creato" fin dal primo giorno che la "bozza" e' uscita.Sembra che ci dobbiamo accontentare comunque del fatto che il professore almeno sta rispondendo alle nostre domande.suggerisco a tutti di fare il maggior numero di domande domani a lezione, di concentrarsi su tutti i dubbi e di farci dare con esatezza le istruzioni per finire questo "benedetto" modulo2.buon lavoro.

-- Comment added by VladLupascu on 19 Apr 2005


commento html

Tra l'altro, quanti modi ci sono per fare un commento Html? Mettere il commento tra "<--" e "-->" è l'unico modo, o ce ne sono altri? Oppure neanche questo è un modo e non ho capito io come si fanno i commenti in Html?

-- Comment added by EnricoMontesi on 19 Apr 2005


Che CASINO

Il prof scrive: >>ATTENZIONE: si esaminano le stringhe da cercare nell'ordine in cui si >>trovano nelle tabelle, per cui
>>vengono prima i match con il primo della lista (anche se nel testo appare >>dopo un match col secondo della lista)

Cosi' diventa un vero casino per chi non implementa le librerie pcre......professore non potrebbe tornare sui suoi passi??? Tanto che cambia??

-- Comment added by Users.691942 on 19 Apr 2005


Risposte

RE: rimozione tags invisibili

Lo facciamo con le espressioni regolari ... no?

RE: Non per essere scansa fatiche...

OK, capisco la sensazione che sentite. Però mi sembra che sostituire solo la PRIMA occorrenza sia una semplificazione, piuttosto che una complicazione.

Per quanto riguarda l'ordine delle 3 chiamate in pulisciTestoSemplice ... davvero vi complica tanto le cose? wink

I commenti HTML sono nuovi, d'accordo ... (ma nella bozza c'erano, mi pare)

RE: commento html

Farò alcuni test CON il commento HTML ed alcuni SENZA, così qualcuno li passa.

RE: Che CASINO

Cambia il risultato quando ci sono diversi match a seconda di come viene fatta la ricerca.

Quindi sono costretto a fare una scelta (e chi ha fatto l'altra si incavola ... mi dispiace).

-- Comment added by AndreaSterbini on 19 Apr 2005


rimozione tags invisibili

no, scusi... le prime tre funzioni vanno realizzate senza espressioni regolari, no? e anche la 4^ (che usa le prime 3)

-- Comment added by AlbertoLaRocca on 19 Apr 2005


Ancora rimpiazzaLettere!

ok ok, abbiamo detto che rimpiazzaLettere, rimpiazza solamente la PRIMA STRINGA che troviamo... quindi se non trova nessuna stringa da rimpiazzare cosa deve ritornare la funzione? MATCH_NOT_FOUND?

-- Comment added by MarcoEsposito on 19 Apr 2005


Ancora rimpiazzaLettere(...)

Esatto!

-- Comment added by DavidBenedetti on 19 Apr 2005


Commenti....

Non mi sembra ci fossero i commenti nella bozza professore....cmq lascio il beneficio del dubbio...tanto ormai ci sono!!! smile

-- Comment added by DavidBenedetti on 19 Apr 2005


Rimpiazza lettere: Prima stringa o prima occorrenza???

Ma la rimpiazza lettere dovrebbe scambiare soltanto il primo carattere vietato per poi ricopiare alla lettera tutto quello che viene dopo. Oppure tutte le occorrenze nella prima stringa? Penso sia la prima ovviamente

-- Comment added by MassimilianoNatale on 19 Apr 2005


Rimpiazza lettere: Prima stringa o prima occorrenza???

In particolare la rimpiazzaLettere(...) deve cercare la prima occorrenza nella stringa di testSporco[] di "uno" dei caatteri incriminati e sostituirlo con il suo corrispondente...indipendentemente dal fatto che la prima occorrenza che trovi segua un'altra occorrenza di un altro carattere....ad esempio, la frase "\ /iagra che fa tutti fe|ici" in testoPulito[], dopo UNA SOLA chiamata di rimpiazzaLettere(...) sarà: "\ /iagra che fa tutti felici"!!!

-- Comment added by DavidBenedetti on 19 Apr 2005


eeeeeeeehhhhhhhhhh???????? O_O

David, starai scherzando... a parte che forse casomai volevi dire "testoSporco[]"...
ma anche se fosse "testoPulito[]" cioè, io mi sparo... O_o'

-- Comment added by AlbertoLaRocca on 19 Apr 2005


rimpiazzaLettere

buone notizie David: non mi sparo più smile (be', oddio... O_o')
comunque: leggendo attentamente la spiegazione PDF della rimpiazzaLettere nel modulo2 ho scoperto che avevi torto... big grin
se trovi una sequenza la devi rimpiazzare completamente e ritornare, se non la trovi devi ritornare con MATCH_NOT_FOUND :P
quindi se in testoSporco hai "\/iagra fa tutti fe|ici", dopo una sola chiamata a rimpiazzaLettere ti ritroverai con "Viagra fa tutti fe|ici"; alla seconda chiamata avrai "Viagra fa tutti felici", e alla terza MATCH_NOT_FOUND.
(dai ç@##0!!! non può non essere così!!! mad! ^^')

-- Comment added by AlbertoLaRocca on 19 Apr 2005


a proposito, big grin

nell'elenco delle sequenze da rimpiazzare aggiungiamo anche queste entries: big grin
ç per c
@ per a non so se è anche il caso di aggiungere anche # per z, ma non credo.

-- Comment added by AlbertoLaRocca on 19 Apr 2005


rimpiazzaLettere(...)

Se guardi un esempio ke ho fatto al professore più su...che poi è proprio quello ke hai criticato tu...scoprirai ke lui ha scritto ke l'esempio ke ho fatto è giusto!!!Ke poi nn è ke sia complicato eh!!!! Cmq sentiamo domani!

-- Comment added by DavidBenedetti on 19 Apr 2005


BANG!

colpo in bocca! certe volte il piombo ha un sapore migliore di quello della vita.
credo che domani non ci sentiremo... (ultime parole, qualcuno le incida sulla lapide plz thx)

-- Comment added by AlbertoLaRocca on 19 Apr 2005


ho capito

record storico, resuscito dopo ben meno di 3 giorni!!! smile
ho capito da solo (nonostante fossi già in decomposizione), ed era anche facile! non me l'aspettavo!
in pratica la rimpiazzaLettere deve cercare le occorrenze nell'ordine in cui sono sistemate nella tabella, giusto???
ok, quindi esistono anche casi in cui la rimpiazzaLettere ritorna MATCH_NOT_FOUND anche se ci sono ancora altre occorrenze da rimpiazzare, no?

-- Comment added by AlbertoLaRocca on 19 Apr 2005


Ma state delirando??? Sempre su rimpazzaLettere()

Cioè, non mi dite davvero che è così. La funzione così come l'ho scritta io (e da come si deduce dal pdf del prof) fa esattamente quello che hai detto tu sopra: "se in testoSporco hai "\/iagra fa tutti fe|ici", dopo una sola chiamata a rimpiazzaLettere ti ritroverai con "Viagra fa tutti fe|ici"; alla seconda chiamata avrai "Viagra fa tutti felici", e alla terza MATCH_NOT_FOUND." Comunque troppa confusione con queste funzioni, propongo un suicidio di massa

-- Comment added by MassimilianoNatale on 20 Apr 2005


eliminaTagsHtml: ordine dei tag

Nella descrizione della funzione eliminaTagsHtml() viene detto: "che elimina il primo tag HTML che seguono NELL'ORDINE". Con questo si vuol fare intendere che i vanno eliminati dapprima i tag con formato poi quelli con formato e infine i tag </ testo del tag> ?

-- Comment added by MassimilianoNatale on 20 Apr 2005


RI - eliminaTagsHtml: ordine dei tag

Scusate, Twiki ha cancellato i tag. Riformulo la domanda: Nella descrizione della funzione eliminaTagsHtml() viene detto: "che elimina il primo tag HTML che seguono NELL'ORDINE". Con questo si vuol fare intendere che vanno eliminati dapprima i tag con formato "< testo del tag >" poi quelli con formato "< testo del tag />" e infine i "</testo del tag >" ?

-- Comment added by MassimilianoNatale on 20 Apr 2005


Eliminazione dei commenti HTML in eliminaTagsInvisibili()

E' lecito semplificare la funzione eliminaTagsInvisibili() eliminando dapprima tutti i commenti (ovviamente uno per chiamata) per poi passare ai controlli sulle coppie match-replace? Questo comporterebbe la semplice aggiunta di poche righe (ad una funzione che ho scritto da una settimana), in caso contrario penso ci sia da fare un bel lavoro di riscrittura. Non penso sia consentito ma sognare non fa mai male

-- Comment added by MassimilianoNatale on 20 Apr 2005


Eliminazione dei commenti HTML in eliminaTagsInvisibili()

Da quanto ho capito la funzione in questione deve funzionare proprio come dici tu Massimiliano, e cioe' prima cerca in sequenza in 'testoSporco[]' qualche tag e quando lo trova, verifica prima di tutto se e' un commento HTML, e poi (ovviamente se non lo e'!) vede se e' un tag invisibile...! (xlomeno spero stavolta di aver capito bene...sentiamo un pó oggi il prof...!

-- Comment added by DavidBenedetti on 20 Apr 2005


rimpiazzaLettere ed eliminaTagsInvisibili

ok, ma intanto David dimmi se ho capito bene il funzionamento della rimpiazzaLettere, che mo la rifaccio e non ho intenzione di cambiarla per la terza volta.

e un'altra cosa: quando la eliminaTagsInvisibili elimina i commenti l'algoritmo che fa, li elimina tutti alla prima botta e poi elimina il primo tag invisibile oppure elimina tutti i commenti fino al 1° tag invisibile e poi anche quello? cioè, se io ho:
"<!-- commento1 --> <!-- commento2 --> <tag invisibile></tag invisibile> <!-- commento3 -->"

dopo una sola chiamata ad eliminaTagsInvisibili che cosa mi ritrovo?
e inoltre, anche la eliminaTagsInvisibili funziona come la rimpiazzaLettere, cioè devo cercare i tags invisibili nell'ordine in cui sono definiti dell'array globale? (sinceramente spero che stavolta non sia così...) **RICARICA LA PISTOLA**

-- Comment added by AlbertoLaRocca on 20 Apr 2005


-____________-'

a-ehm... allora, premesso che mia sorella qui presente ha dovuto trattenermi a forza dall'aprire l'armadietto delle armi speciali (bazooka, calibri pesanti, spade cinesi, etc.), quello che volevo scrivere come esempio di input per la eliminaTagsInvisibili era:
<!-- commento1 --> <!-- commento2 --> <tag invisibile>blah blah blah</tag invisibile>

-- Comment added by AlbertoLaRocca on 20 Apr 2005


e dimenticavo la terza parte (ora ci si mettono anche gli errori miei); lo riscrivo per la terza volta:
<!-- commento1 --> <!-- commento2 --> <tag invisibile>blah blah blah</tag invisibile> <!-- commento3 -->

-- Comment added by AlbertoLaRocca on 20 Apr 2005


rimpiazzaLettere ed eliminaTagsInvisibili

Credo che dovresti ritrovarti tutta la stringa che viene dopo il primo commento html

-- Comment added by RiccardoVona on 20 Apr 2005


Tutto più semplice.....

Riflessione....ora non volgio essere pesante e rompere le scatole al prof ma non sarebbe tutto più semplice senza questa dannata correzione automatica????????????

Tanto il primo modulo lo hanno consegnato in 45/50 il secondo credo(non spero)molti di meno! Sarebbe molto più semplice far vedere l'out del programma al prof di ogni modulo direttamente alla discussione dell'esame così ognuno ha la possibilità di spiegare le sue ragioni! E non incappa in errori di segmentation fault ecc a causa della correzione aut! Anche perchè in questo modo non fallirei tutti i test solo per una \\/ --> V cambiata prima di un altro valore! Secondo me in quest'altro modo lo studente verrebbe valutato in maniera più attenta e completa!

-- Comment added by Users.691942 on 20 Apr 2005


eliminaTagsInvisibili

ok, quindi secondo te i commenti vanno rimossi uno alla volta, cioè vanno considerati come se fossero anch'essi dei tags invisibili (infatti lo sono :P ); MATCH_NOT_FOUND quindi lo devo restituire solo alla fine quando non ci sono ne' tags invisibili ne' commenti, quindi (nel mio esempio di prima) dopo 4 chiamate (cioè alla 5^ chiamata). in effetti così mi torna tutto; prof. attendo sue conferme thx. :P PS ribadisco anche 1 altra mia domanda: la eliminaTagsInvisibili deve trovare i tags invisibili nell'ordine in cui li trova nella stringa o nell'ordine in cui sono definiti nella tabella globale? grazie ancora.

-- Comment added by AlbertoLaRocca on 20 Apr 2005


O Madonna, e questa??? O_______o'''

ma questo modulo è un pantano di una confusione assurda, e siamo a una settimana dalla consegna!!!
adesso rileggendo il forum mi sono accorto che la eliminaTagsHtml deve eliminare prima i <tags>, poi i </tags> e infine i <tags/>... o_O'
e chiaramente ne fa solo uno alla volta, quindi se ad es. troviamo prima un </tag> e poi un <tag>, alla 1^ chiamata dovremo rimuovere il secondo, e alla seconda il primo T______T
prof, è ancora valida questa regola? qualcuno ha fatto così? non è che tante volte possiamo cambiare? perché sono l'unico a fare le cose normali più immediate, ovvie e facili da pensare, che però il prof. pensa che siano difficili e quindi le complica??? T______T

-- Comment added by AlbertoLaRocca on 20 Apr 2005


O Madonna, e questa??? O_______o'''

Si effettivamente è stata una complicazione non da poco ^^' io apparentemente(finchè il prof non fa i test non ne ho la certezza smile ) sono riuscito ad implementarlo. Nella mia soluzione le operazioni vengono compiute dentro un ciclo for su una variabile che indica che tipo di tag sto cercando. Quando trova un tag, ne determina il tipo e lo confronta con quello che sto cercando, se è uguale lo "elimino" dalla stringa, se diverso lo ignoro

-- Comment added by RiccardoVona on 20 Apr 2005


Si Alberto...

Che tu ci creda o no....anke io implemento le cose come te.....purtroppo però sono sbagliate....segui per bene le specifiche NUOVE (cioè...i cambiamenti!)!...E cmq per rispondere alla tua domanda riguardo i tags invisibili (escludendo i commenti) ti rispondo di si: vanno controllati (ed ignorati) nell'ordine della tabella!!! (CHE BELLO!!!!!!)

-- Comment added by DavidBenedetti on 20 Apr 2005


[OT] La sfiga suona sempre due volte...

Ero tranquillamente sul mio notebook a scrivere la pulisciTestoSemplice quando ad un tratto il balordo si riavvia. Un crash di winzozz penso io, smadonnando per aver perso le ultime modifiche fatte a modulo2.c. Ma con mia somma gioia, scopro che non è stato un semplice crash...winzozz non si riavvia più, neanche in provvisoria. Perdo 1 ora a cercare di capire cosa fosse andato storto e TOH scopro che ci sono alcuni cluster danneggiati, proprio dove sono memorizzati i file di sistema...morale della favola, non ho potuto fare un backup di NESSUNO dei miei documenti, ho perso svariati giga di roba, e spero che almeno i file .c del progetto, visto che si trovavano in un altra partizione, si siano salvati...Se domani chi mi conosce non mi vedrà a lezione, vuol dire che mi sono sparato in testa smile

-- Comment added by RiccardoVona on 20 Apr 2005


La sfiga suona sempre due volte....

Mi dispiace Riccà...e capisco i moccoli che starai tirando giù, sia per la perdita (anche se spero non grave) di un HD sia per il modulo2, comunque se vuoi ti posso dare una mano: ti posso mettere a disposizione il mio portatile per fare il modulo, o quello che vuoi...se posso comunque ti do una mano volentieri!!!

-- Comment added by DavidBenedetti on 20 Apr 2005


ma LOL big grin

dai non ci credo! big grin

-- Comment added by AndreaBalzi on 20 Apr 2005


La sfiga suona sempre due volte....
Grazie David, ma è una questione di principio smile Cmq la cosa più bella è che i RECOVERY DISK LI FANNO A C***O, mica fanno una scansione del disco...nooooo ci mancherebbe, copiano direttamente i files del sistema operativo.... risultato non riesco neanche più ad installare un sistema operativo. I floppy di ripristino che avevo non me li legge... ehm nessuno di voi sa se tante volte knoppix ha uno scandisk che riesca a sistemare una fat32?

-- Comment added by RiccardoVona on 20 Apr 2005


MMMHHHH....

Non lo so, anke xké Knoppix non m'è mai partito!!!Sorry!

-- Comment added by DavidBenedetti on 20 Apr 2005


La sfiga suona sempre due volte....
* ripone la pistola * grazie al buon ms-dos 6.2 sono riuscito a recuperare i file del progetto big grin ora vado a cambiarmi le mutande... big grin

-- Comment added by RiccardoVona on 20 Apr 2005


ELIMINA_TAGS_INVISIBILI

scusate ma anche questa funzione deve tenere conto dell'ordine dei tag nel vettore tagsInvisibili????

-- Comment added by TizianoFranchi on 20 Apr 2005


Pc Spim

lo so che con programmazione II non c' entra niente ma prof mi spiega l'assurdo motivo per cui pc spim mi funziona solo la prima volta che lo installo e dopo di che muore?? ho seguito le istruzioni che ha messo sulla pag da architettura, però una volta re-installato fa la stessa storia, come mai???

-- Comment added by TizianoFranchi on 20 Apr 2005


Eliminazione dei commenti

Effettivamente la strcmp() che il prof utilizza nei test non dà scampo: deve essere tutto perfetto. Proprio per questo sarebbe più oppurtuno avere delle specifiche ben chiare e soprattutto fisse. A una settimana dalla consegna mi ritrovo con un casino di dubbi anche sulle funzioni che in teoria (e anche nella realtà) sono semplici. Comunque per l'eliminazione dei commenti html io intendevo eliminare dapprima tutti i commenti (anche quelli che vengono dopo un "MassimilianoNatale on 20 Apr 2005


ELIMINA_TAGS_INVISIBILI

Si Tiziano, la funzione deve tener conto dell'ordine dei tag nella tabella....anche se cmq, ora che ci penso, se hai una nidificazione, non hai molto scampo, xké devi vedere a tutti i costi se i tag al suo interno sono anch'essi invisibili, sennò non puoi capire dove devi riprendere la copia (e cioè qual'è il tag di chiusura del tag invisibile---+ esterno...in un certo senso si potrebbe anche dire che non ne tiene molto conto, se non per i controlli su un singolo tag.....RICCARDO SE TI SERVE UNA MANO IO STO QUA!!!

-- Comment added by DavidBenedetti on 20 Apr 2005


MATCH_NOT_FOUND

prof., nei test delle funzioni del modulo2 l'errore MATCH_NOT_FOUND a che argomento deve essere associato? al buffer contenente il testo da ripulire? cioè, se ad es. viene chiamata la funzione di test per la rimpiazzaLettere con tipo_di_test = MATCH_NOT_FOUND, l'argomento quale sarà, lo 0 (cioè appunto il buffer "testoSporco")? thx.

-- Comment added by AlbertoLaRocca on 20 Apr 2005


eliminaTagsInvisibili

David, se hai una nidificazione devi semplicemente eliminare il tag---+ esterno! tanto guarda che se un tag è considerato invisibile, non ci interessa quello che c'è dentro: va tolto tutto quanto. il prof. però giustamente ci avvisa di leggere comunque il contenuto del tag invisibile e di non saltarlo a pie' pari direttamente in cerca della chiusura, altrimenti potremmo incorrere in errore in casi del genere:
"1<tag>2<tag>3</tag>4</tag>5"
supponiamo che "tag" fosse un tag invisibile: come vedi ce ne sono due annidati; se tu salti a pie' pari il contenuto del tag---+ esterno e cerchi direttamente la stringa "</tag>", ottieni questo risultato (errato):
"14</tag>5"
se invece interpreti anche il contenuto del tag invisibile e ti tieni il conto delle annidazioni, ottieni quest'altro risultato (corretto):
"15"
quindi il punto qual è: le annidazioni le devi considerare solamente allo scopo che ti ho appena descritto, ma se trovi una annidazione devi semplicemente rimuovere il tag---+ esterno.

*è meglio però fare una precisazione*: quello che ho detto finora è quello che sono riuscito a capire io in mezzo al pantano, e penso sia giusto; se necessario il professore puntualizzerà, ma ne andrebbe dell'incolumità di tutto il volume di materia che mi circonda nel raggio di circa 1 km... (*ACCAREZZA LA CHIAVETTA DELL'ARMADIETTO DELLE ARMI SPECIAL big grin ...*)

-- Comment added by AlbertoLaRocca on 20 Apr 2005


nidificazione

Se il tag più significativo ne contiene altri meno significativi non ci sono problemi, però se è il tag più significativo a trovarsi all'interno di uno meno significativo nasce un bel problema..In quanto secondo le specifiche si drovrebbe saltare il meno significativo e perciò si andrebbe ad eliminare il tag più interno, e solo ad una successiva passata si eliminerebbe il tag più esterno..

-- Comment added by TizianoFranchi on 20 Apr 2005


nidificazione

io ho fatto un algoritmo che non so come si comporterebbe nel caso che dici tu Tiziano, ma secondo me è quello che andava fatto: la mia eliminaTagsInvisibili prima cerca tutti i commenti HTML e il primo che trova lo elimina e ritorna; se non trova nessun commento, cicla su tutti i tags elencati nella tabella globale: per ogni tag ne cerca un'occorrenza nel testoSporco; se la trova analizza il suo contenuto contando il nesting level, e quando il nesting level raggiunge -1 (tag---+ esterno chiuso) oppure quando viene raggiunta la fine del buffer, si ferma ed elimina tutto quello che ha letto a partire dall'inizio del tag. se non trova nessuna occorrenza di nessun tag invisibile ritorna MATCH_NOT_FOUND.
l'unica cosa di cui non sono certo è di aver fatto bene la gestione dei commenti (attendo ancora conferma dal prof).

-- Comment added by AlbertoLaRocca on 21 Apr 2005


Conferma conferma

Quello che dice Tiziano e' corretto Alberto, l'ha confermato oggi il prof a lezione quando gli abbiamo fatto una domanda proprio su questa questione.....fortunato te che l'hai interpretata cosi....io mi sto per sparare, visto che devo ancora implementare le funzioni con la libreria pcre......

-- Comment added by DavidBenedetti on 21 Apr 2005


meno male :P

e x quanto riguarda i commenti?
PS: le funzioni con le librerie pcre le devo ancora implementare anch'io ^^'

-- Comment added by AlbertoLaRocca on 21 Apr 2005


ATTENZIONE, commenti HTML!

nella pagina principale del Modulo2 c'è un esempio di commento HTML, che però è errato! i tags HTML devono iniziare con "". (ovviamente ho provato sia su IE che su FF).

-- Comment added by AlbertoLaRocca on 21 Apr 2005


doh

speravo che almeno tra virgolette i simboli < e > venissero giusti; riscrivo il post come lo intendevo:
nella pagina principale del Modulo2 c'è un esempio di commento HTML, che però è errato! i tags HTML devono iniziare con "<!--", non con "<--"; il tag di chiusura invece è giusto: "-->". (ovviamente ho provato sia su IE che su FF).

-- Comment added by AlbertoLaRocca on 21 Apr 2005


Commenti

In ke senso per quanto riguarda i commenti???

-- Comment added by DavidBenedetti on 21 Apr 2005


Nota per il professore...

Gioco il jolly!

-- Comment added by DavidBenedetti on 21 Apr 2005


Errori di compilazione

A proposito!Riccardo, hai kiesto al professore per quanto riguarda quel problema ke ti da in compilazione???

-- Comment added by DavidBenedetti on 21 Apr 2005


Tiziano, aiutami tu!

Allora, ricapitolo un secondo. Nella eliminaTagsInvisibili gestisco prima i commenti e poi i tags...e fin qui ci siamo!Ora nasce il problema delle nidificazioni (e dei miei svenimenti!). Quando cerco un tag invisibile mi baso sull'array dove sono definiti i tags invisibili da cercare, e cioè sulla loro priorità...la domanda però è: quando trovo il tag con priorità più alta e voglio levarlo, automaticamente decade il discorso delle prirità, giusto? Nel senso: se ho una situazione del genere: "<" tag3 ">" mondezza "<" tag2 ">" ancora mondezza "<" tag1 ">" mondezza a più non posso "<" tag6 ">" "<" tag7 ">" "<" /font ">" "<" /font ">" "<" /font ">" "<" /font ">" "<" /font ">" (dove la priorità più alta è 1) dovrò ignorare da quel punto in poi il discorso delle priorità no? Cioè, ignorare l'intera nidificazione giusto (fino al tag di chiusura corretto del tag1)?

-- Comment added by DavidBenedetti on 21 Apr 2005


x quanto, riguarda i commenti!

ho avvisato "quanto" di riguardare i commenti...
occhèeei, occhèeei, mamma mia, neanche uno stupido giochino di parole... big grin
intendevo dire: l'algoritmo che ho fatto io nella eliminaTagsInvisibili è tutto quanto giusto??? (sta buono quanto, non dicevo a te)
anche la parte che gestisce la rimozione dei commenti è giusta?

-- Comment added by AlbertoLaRocca on 21 Apr 2005


eliminaTagsInvisibili

ossantocielo David, sulla eliminaTagsInvisibili stai confondendo le idee anche a me (ed ero uno dei pochi ad averle chiare...); leggi la descrizione dell'algoritmo che ho implementato io: secondo te è giusta? anche per come tratta i commenti? se trovi che sia giusta allora considerala come una spiegazione per te smile

-- Comment added by AlbertoLaRocca on 21 Apr 2005


[OT] asd big grin

oggi mi immagino tutte le ragazzine cretine di 10 anni che cercheranno su Google "Tiziano Ferro" e troveranno il post di David Benedetti su TWiki che chiede aiuto a... Tiziano!!! big grin

-- Comment added by AlbertoLaRocca on 21 Apr 2005


BUFFER_TOO_SMALL in rimpiazzaEspressioneRegolare()

Come ci si deve comportare? Si deve tornare subito BUFFER_TOO_SMALL oppure si può gestire con una realloc? Lo chiedo perchè se io mi calcolo quanto sarà lungo testoRipulito e uso realloc, mi risparmio un bel po' di controlli sulla fine del buffer. Una funzione così implementata però fallirebbe inesorabilmente tutti i test di BUFFER_TOO_SMALL (ritornerebbe RESULT_OK invece).

-- Comment added by GiovanniColombi on 21 Apr 2005


Errore multiple definition of

Prof. torno sull'argomento perchè a me il codice non compila. Ma ho trovato il modo di farlo compilare commentando la riga 8 del suo testModulo2.h: #include "modulo2.h". Non ho fatto altre modifiche ai .h e di certo non li passo a gcc. Se vuole le posso inviare il mio makefile, ma una volta commentata quella istruzione, con lo stesso makefile, il comando make va a buon fine. E' un comportamento molto strano dato che i .h sono protetti con delle #ifndef! Mi faccia sapere per la cronaca, cmq io i .c ovviamenti li consegno, poi se non compilano sappiamo il motivo smile

-- Comment added by GiovanniColombi on 21 Apr 2005


SIA LODE A KNOPPIX DUBBIO OPTIONS SU PCRE

Stavo chino sul mio portatile, quand'ecco sorgermi un'idea: perché non provare a far partire Knoppix sul fisso??? E così è stato...è partito!!!!!! Mi sono quindi ben documentato sulla libreria PCRE (e devo ammettere che quel manualino che aveva dato lei prof andava già abbastanza bene. Grazie!) e ho trovato un paio di cosucce interessanti, anche se non so se considerarle o meno. Per esempio, le "options" di compilazione di un'espressione regolare oppure le options di matching per la funzione pcre_exec....(Ad esempio l'opzione PCRE_CASELESS fa in modo che il pattern sia compilato in modo che matchi sia maiuscole che minuscole....PCRE_ANCHORED fa in modo che il pattern matchi SOLO la prima occorrenza, anche se non sono sicuro di averla capita bene questa opzione...etc...) dobbiamo considerarle professore? (Eh, lo so, è una risposta difficile: ma la voglio aiutare: dica di no!) smile

-- Comment added by DavidBenedetti on 21 Apr 2005


SIA LODE A KNOPPIX DUBBIO OPTIONS SU PCRE

David già l'ho fatta questa domanda al prof. pcre_exec fa di per se il match con la prima occorrenza. PCRE_ANCHORED forza a fare il match solo dall'inizio della stringa (potrei aver scritto idiozie, ma a me funzia così). Le opzioni credo che se vuoi usarle ti fanno risparmiare un po' di lavoro, sta a te decidere (è un vantaggio non una fatica in---+). PS: mi dici di preciso che versione hai di knoppix?

-- Comment added by GiovanniColombi on 21 Apr 2005


HTML malformato

professore, come ci dobbiamo comportare se riceviamo in input una stringa di HTML sintaticcamente errato che però nel browser appare nel modo voluto dallo spammer? specificamente mi riferisco alla eliminaTagsInvisibili, ma la domanda vale anche in generale. per fare un esempio, supponiamo di aver trovato nella eliminaTagsInvisibili un <tag> che appare nella tabella globale, inoltre è della priorità giusta per essere eliminato, ok; noi allora interpretiamo il tag di apertura, leggiamo il contenuto, contiamo i livelli di annidazione, attendiamo che il livello scenda a -1, e quando è sceso chiudiamo ed eliminiamo tutto quello che abbiamo letto. ma che succede se mi arriva una stringa del genere?
"1 <tag> 2 </img> 3 </tag> 4"
in teoria il nostro programma si dovrebbe accorgere che il tag di chiusura "<img>" è fuor di luogo in quel punto, e quindi dovremmo ignorarlo, no? un programma errato infatti (cioè un programma che non verifica che il tag di chiusura si chiami "tag" e non "img") restituirebbe il seguente output (errato):
"1 3 </tag> 4"
mentre la versione corretta sarebbe:
"1 4"

mi permetto di aggiungere che se lei ci dicesse di assumere che tutti gli input contengano HTML valido ci farebbe un gran favore :P

-- Comment added by AlbertoLaRocca on 21 Apr 2005


Definizioni multiple

Professore non ci abbandoni proprio ora!!! Il problema di compilazione lo dà anche a me: mi dice che ci sono delle definizioni multiple di funzioni!!! Non vorrei mettere mani sulle librerie poichè ovviamente non verrà usata la mia di libreria ma quella generale. Come ovviare al problema???

-- Comment added by MassimilianoNatale on 21 Apr 2005


Priorità dei tag

Ricapitolando (e se non ho capito nemmeno ora cerco asilo politico all'estero): la priorità dei tag da eliminare è la seguente: i commenti li considero come tag da eliminare con la massima priorità (come se fossero inseriti nella tabella in prima posizione), il resto vien da sè (ossia elimino tutti i tag nell'ordine in cui compaiono nella tabella). Sono sicuro su quest'ultima parte, un pò meno nell'eliminazione dei commenti

-- Comment added by MassimilianoNatale on 21 Apr 2005


HTML malformato

Credo che anche se scritto male un tag sia da considerare mondezza (e quindi eliminato). L'obiettivo del modulo è quello di pulire l' email (per poterla poi analizzare), cioè eliminare (o rimpiazzare) tutto quello che non è una parola che può essere indice di spam. Un tag di per se non è indice di spam e quindi va cmq eliminato. Quindi nel tuo esempio il programma dovrà tornare semplicemente 1 2 3 4 SE tag non è invisibile, altrimenti 1 4. (TIP: non sempre bisogna preoccuparsi di trovare la chiusura di un tag) Giusto prof.?

-- Comment added by GiovanniColombi on 21 Apr 2005


Priorità dei tag

1) elimini i commenti. 2) elimini i tags che trovi nella tabella tagsInvisibili nell'ordine in cui compaiono. Fermo restando che appena trovi un match ti fermi.

-- Comment added by GiovanniColombi on 21 Apr 2005


HTML malformato

Ehm, professore, la prego: ci dica che gli input saranno a priori giusti riguardo la sintassi HTML, altrimenti è un vero e proprio caos!!!!!

-- Comment added by DavidBenedetti on 21 Apr 2005


errore di digitazione???

Professore, nel prototipo di rimpiazzaEspressioneRegolare definito nel file .h l'ultimo parametro lo ha chiamato "dimensionI"...come dobbiamo chiamarlo noi? DIMENSIONE oppure DIMENSIONI????? Lo chiedo perché nel .pdf ha scritto "dimensione" quando spiega il contenuto del parametro...! GRAZIE!

-- Comment added by DavidBenedetti on 21 Apr 2005


rimpiazzaEspressioneRegolare

Nel caso la stringa di replace sia una stringa vuota, si deve resituire BAD_REPLACE???

-- Comment added by DavidBenedetti on 21 Apr 2005


HTML malformato

ma Giovanni, secondo te quindi se riceviamo una stringa malformata dobbiamo capire appunto che è sintatticamente errata e restituire "1 4", quindi di fatto dobbiamo ignorare il tag errato "</img>"; ora quello che dico io è che fare questo controllo (cioè controllare che un tag di chiusura sia corretto) è un vero e proprio come dire!!! capito, no? infatti se dovessimo controllare la correttezza dei tag aperti e chiusi al fine di ignorare le "chiusure di troppo", dovremmo costruire in memoria tutto l'albero dei tag aperti finora e controllare tutti i nomi man mano che chiudiamo, e se qualche nome non coincide dobbiamo ignorare la chiusura, e tutto questo per cosa? cioè alla fine quanti saranno i casi in cui l'uso dell'albero sarà intensivo e ci sarà un forte livello di annidazione? ti esprimo la mia posizione: o il prof. si fa cogliere da un improvviso attacco di benevolenza, o ci da un vero parser HTML (ovviamente preferisco la prima...)

-- Comment added by AlbertoLaRocca on 21 Apr 2005


EUREKA

scemo me!!! che cosa vado a pensare agli alberi N-ari per controllare la nidificazione dei tag quando la soluzione ce l'ho già (quasi) pronta! lo stack! smile
possiamo fare una funzione ricorsiva per analizzare il nesting level smile
ebbene si: lo so che ancora non ci credete, ma a quanto sembra il mio cervello bacato ha avuto l'ardire di... oddiochemozione... di pensare!!! O_O big grin
questo però non toglie che sarebbe meglio assumere che si riceva in input solo HTML corretto
^_________^'''

-- Comment added by AlbertoLaRocca on 21 Apr 2005


EUREKA....

Guarda che puoi anke fare a meno dello stack eh!!!! Almeno se ho capito bene quello che intendi...ormai l'$sp del mio cervello s'è perso pure il record d'avvio principale!!!

-- Comment added by DavidBenedetti on 21 Apr 2005


EUREKA

eh si vede... parli di record di avvio e di stack pointer assieme... big grin

-- Comment added by AlbertoLaRocca on 21 Apr 2005


ODDIO QUANTO SEI PIGNOLO....

Era per fare una battuta.....

-- Comment added by DavidBenedetti on 21 Apr 2005


Errore di digitazione?

Non cambia niente se nella tua funzione metti un nome diverso (per l'argomento) da quello che ci sta nel prototipo. Quello che è importante è il tipo: in teoria potresti anche chiamarla pippo o paperino, l'importanche è che sia (nel caso di *dim) un puntatore a intero

-- Comment added by MassimilianoNatale on 21 Apr 2005


Errore di digitazione?

Si si, lo so...però siccome a questo punto mi piacerebbe fare TUTTO il meglio possibile...era solo un chiarimento, non cambia nulla.....!!!Grazie per la risposta cmq!

-- Comment added by DavidBenedetti on 21 Apr 2005


HTML malformato

Forse non mi sono spiegato...

caso 1) tag è un tag VISIBILE: il programma torna 1 2 3 4

caso 2) tag è un tag INVISIBILE: il programma torna 1 4

In sostanza io credo che il controllo apertura/chiusura di un tag va fatto solo se il tag è invisibile. Le "chiusure di troppo" vengono eliminate da eliminaTagsHtml. Non è importante sapere se lo spammer sa scrivere codice html (non bisogna fargli la correzione), ogni stringa che segue la sintassi descritta nelle specifiche va epurata.

-- Comment added by GiovanniColombi on 21 Apr 2005


Risposte

RE: rimozione tags invisibili

Le prime tre funzioni possono essere implementate sia senza usare pcre che usando pcre, come preferite.

RE: rimpiazzaLettere

Alberto ha detto bene.

RE: a proposito

Allora dovrei aggiungere tutte le lettere accentate ... se qualcuno lo fa e mi manda il file lo aggiungo a modulo2.h

RE: ho capito

ORA hai capito!!! finalmente!

tutte e 3 le funzioni cercano gli elementi delle 3 liste (caratteri, tags, tags invisibili) NELL'ORDINE dato dalle tabella.

Per eliminaTagsHtml si elimina il primo trovato di: prima <tag...> poi </tag...> e infine <tag.../>

Perl eliminaTagsInvisibili si eliminano: prima i commenti html poi gli elementi della tabella nell'ordine.

RE: Eliminazione dei commenti HTML in eliminaTagsInvisibili()

esatto, vedi risposta precedente

RE: rimpiazzaLettere ed eliminaTagsInvisibili

certo, si elimina il PRIMO commento

RE: Tutto più semplice.....

Spero invece che il numero di studenti che consegnano non diminuisca, visto che basta metà progetto per passare l'esame (e quindi chi non ha fatto il modulo 1 è ancora in tempo a fare i seguenti).

RE: eliminaTagsInvisibili

Confermo, si toglie una sola cosa per volta

RE: ELIMINA_TAGS_INVISIBILI

RE: MATCH_NOT_FOUND

Sì, come per modulo1, gli errori generali corrispondono al primo argomento

RE: eliminaTagsInvisibili

per essere precisi, se il tag invisibile che si sta cercando è nidificato bisogna contare quanti tag dello stesso tipo (cioè dello stesso nome) si aprono e quanti si chiudono, quando si arriva a 0 si è sul tag che chiude quello che si era individuato. Esempio
<tag size=0>pippo <tag colore=nero> va al mare </tag> a pescare </tag> le cozze
     1                    2                       1                0

RE: nidificazione

se il tag che si ata cercando è dentro ad un altro tag diverso non vi preoccupate, col conteggio che ho detto prima trovate correttamente la sua chiusura e potete eliminarlo correttamente

RE: nidificazione

(per Alberto) a occhio sembra giusto

RE: Nota per il professore...

E sei fortunato, perchè siamo al fil rouge e ti vale doppio smile

RE: BUFFER_TOO_SMALL in rimpiazzaEspressioneRegolare

il buffer viene passato da fuori alla funzione, come fai a riallocarlo?

RE: Errore multiple definition of

Manda pure

RE: DUBBIO OPTIONS SU PCRE

Eaatto, dovete usare le options per indicare CASELESS. Credo che ANCHORED voglia dire "che inizia dal primo carattere del testo". (La pcre_exec trova SEMPRE una sola occorrenza, la prima, no?)

RE: HTML malformato

Devi contare SOLO i tag che hanno lo STESSO nome (nel tuo esempio ignori IMG).

RE: Priorità dei tag

Giusto.

RE: HTML malformato

se un tag invisibile non è chiuso non è invisibile.

ma per fortuna eliminaTagsHtml se ne occuparà lei.

RE: errore di digitazione???

ma si tratta di un parametro ... chiamalo un po' come ti pare!!! (pensaci un attimo)

RE: rimpiazzaEspressioneRegolare

NO, perchè potremmo voler semplicemente rimuovere il testo trovato.

(se ti guardi l'esempio del file delle RE con i commenti c'e' proprio una riga vuota)

RE: EUREKA

basta contare, non serve ricordare TUTTI i tag, ma solo quello in esame

-- Comment added by AndreaSterbini on 21 Apr 2005


Anche io lo spero...

Anche io non spero come ho scritto che il numero di persone diminuisca ma sono veramente molto scoraggiato!

-- Comment added by Users.691942 on 21 Apr 2005


Tag invisibili...

Professore, quindi dobbiamo anche controllare che un tag invisbile sia kiuso o meno? E come facciamo a considerare la grande quantità di possibilità che a questo punto mi sembra spunti fuori??? Devo dire che inizio a scoraggiarmi anke io.....E poi, un'altra cosa...capisco il discorso dell'usare le options nella libreria pcre, ma come facciamo a capire QUANDO usare una determinata option (ad esempio CASELESS)??? A quanto ricordo (ora non ho le specifiche sott'occhio) non sempre dobbiamo unificare maiuscole e minuscole...dobbiamo implementare anche un parser per le espressioni regolari per capire cosa si sta cercando (a questo punto non mi meraviglierei più di niente)??? smile

-- Comment added by DavidBenedetti on 21 Apr 2005


HTML malformato

giusto, a contare solo i tag con lo stesso nome non ci avevo pensato! grazie 1000! ^^'
comunque aggiungo che non è proprio vero che se un tag invisibile rimane aperto allora non è invisibile: il browser applica lo stesso l'effetto del tag e lo chiude automaticamente alla fine dello stream (provato col tag font su IE e FF smile ); di conseguenza se non troviamo la chiusura dobbiamo considerarla come se stesse alla fine del buffer, quindi eliminare tutto quello che c'è a partire dall'inizio del tag.

-- Comment added by AlbertoLaRocca on 21 Apr 2005


Compilazione dei sorgenti

Ragazzi per favore potete dirmi se (includendo modulo2.h in modulo2.c & modulo2.h---+ testModulo2.h in test.c + modulo2.h in main.c) il programma vi compila??? A me dà definizioni multiple, ma quelle inclusioni sono TUTTE necessarie!!!

-- Comment added by MassimilianoNatale on 22 Apr 2005


Compilazione dei sorgenti: spiego meglio

Allora la situazione è questa: per poter provare i test ovviamente mi scrivo il mio bel "main.c" nel quale ci schiaffo testmodulo2.h (ovvio perchè devo lanciare i test). Nel file modulo2.c invece ci metto modulo2.h (anche qui molto ovvia la cosa) ed infine nel testModulo2.c includo modulo2.h (per le funzioni lanciate dai test) e testModulo2.h (che naturalmente contiene i prototipi delle funzioni di test. "gcc -o main *.c" e mi viene che ci sono definizioni multiple. E' problema di quel main???

-- Comment added by MassimilianoNatale on 22 Apr 2005


Risposte

RE: Tag invisibili...

Ma se non cerchi la chiusura, mi dici come fai a sapere fin dove devi eliminare il testo?

RE: Compilazione dei sorgenti: LA SOLUZIONE

Allora, il problema (grazie Giovanni per avermi mandato il tuo Makefile) nasce se compilate separatamente ciascun file .c producendo separatamente il corrispondente file oggetto .o.

Dato che nel file modulo2.h sono definite due variabili globali, questo fa sì che ce ne sia una copia in ciascun .o che includeva modulo2.h. Il linker a quel punto non sa a chi dare i resti ...

SOLUZIONE: compilate il programma IN UN SOLO PASSO senza passare per i file oggetto. Esempio:

  • gcc -g -o modulo2 modulo2.c main2.c testModulo2.c -lpcre

-- Comment added by AndreaSterbini on 22 Apr 2005


COL CAVOLO! (simboli multipli)

Scusate, la soluzione qua sopra non è giusta, visto che le variabili globali vengono create per ciascun file .c in input al compilatore.

Ho aggiustato modulo2.h (scaricatevelo) commentando gli inizializzatori e dichiarando le variabili extern.

Definitevi le variabili nel VOSTRO main (da non consegnare).

Io pure definirò le variabili globali nel MIO main.

-- Comment added by AndreaSterbini on 22 Apr 2005


Tags invisibili

fino alla fine; se io apro un tag font color=white e non lo chiudo, il browser visualizza tutto quello che c'è dopo in bianco (provi, le assicuro che è così, ho provato su IE e FF).

-- Comment added by AlbertoLaRocca on 22 Apr 2005


Tags invisibili

pardon, la mia precedente risposta era fuor di luogo :P
non avevo capito che la risposta del prof. era rivolta a David, pensavo si riferisse ancora all'HTML malformato ^^

-- Comment added by AlbertoLaRocca on 22 Apr 2005


Tag Invisibili

Ehm....vabbè, non mi sono spiegato bene.........

-- Comment added by DavidBenedetti on 22 Apr 2005


Chi non ha consegnato modulo1!

E' sufficente che consegni modulo2 oppure deve consegnare entrambi?

-- Comment added by AndreaNaim on 22 Apr 2005


Funzionamento delle prime TRE funzioni

NON C'HO CAPITO UNA MAZZA!!! Alcune persone mi dicono una cosa ed altre un'altra... e ha dire la verità, secondo me, con questo tipo di forum e le risposte con dei titoli così assurdi, rendono il tutto molto complicato da capire! (e in più non seguo le lezioni) Le prime 3 (TRE) funzioni si comportano TUTTE e TRE allo stesso modo! (e fin qui almeno PENSO di esserci arrivato..). Ora vi faccio alcuni esempi, e per favore, ditemi se sono corretti.

La funzione rimpiazzaLettere si dovrebbe comportare così:

testoSporco = "ciao $0n0, un br4\/o b4mbin0 ba||erin0"

Alla prima chiamata, la funzione restituisce...

testoPulito = "ciao $0n0, un br4\/o b4mbin0 bal|erin0" ---- la prima | -> l

... seconda chiamata...

testoPulito = "ciao $0n0, un br4\/o b4mbin0 ballerin0" ---- la seconda | -> l

...dopo metto tutto di seguito l'output: ogni riga, corrisponde ad un risultato di una chiamata di rimpiazzaLettere:

"ciao S0n0, un br4\/o b4mbin0 ballerin0"  ---- la prima $ -> S
"ciao S0n0, un br4Vo b4mbin0 ballerin0"   ---- la prima \/ -> V
"ciao S0n0, un brAVo bAmbin0 ballerin0"   ---- la prima 4 -> A
"ciao S0n0, un brAVo bAmbin0 ballerin0"   ---- la seconda 4 -> A
"ciao SOn0, un brAVo bAmbin0 ballerin0"   ---- la prima 0 -> O
"ciao SOnO, un brAVo bAmbin0 ballerin0"   ---- la seconda 0 -> O
"ciao SOnO, un brAVo bAmbinO ballerin0"   ---- la terza 0 -> O
....etc...

Oppure fa ogni tipo di carattere in una "botta" sola? (che ha anche più senso?... )

Invece la funzione eliminaTagsHtml si dovrebbe comportare così:

testoSporco = "</primo>c'era una volta<secondo> tanto <terzo> tempo fà <quarto/> in un regno molto </quinto> <ultimo>"

Metto come prima l'output di fila

"</primo>c'era una volta tanto <terzo> tempo fà <quarto/> in un regno molto </quinto> <ultimo>" --->(secondo)
"</primo>c'era una volta tanto tempo fà <quarto/> in un regno molto </quinto> <ultimo>" --->(terzo)
"</primo>c'era una volta tanto tempo fà <quarto/> in un regno molto </quinto> " --->(ultimo)
"</primo>c'era una volta tanto tempo fà in un regno molto </quinto> " --->(quarto)
"c'era una volta tanto tempo fà in un regno molto </quinto> " --->(primo)
"c'era una volta tanto tempo fà in un regno molto " --->(quinto)

Oppure anche questa elimina tutto in una botta?

La terza funzione è analoga.

Grazie

e vi faccio pure una linguaccia così complico pure io le cose...

_______________oooo$$$$$$$$$$$$oooo
____________oo$$$$$$$$$$$$$$$$$$$$$$$$o
_________oo$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$o
_______o$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$o
_____o$$$$$$$$$____$$$$$$$$$$$$$____$$$$$$$$$o
____o$$$$$$$$$______$$$$$$$$$$$______$$$$$$$$$$o
___$$$$$$$$$$$______$$$$$$$$$$$______$$$$$$$$$$$$
__$$$$$$$$$$$$$____$$$$$$$$$$$$$____$$$$$$$$$$$$$$
_$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
o$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"_"$$$
$$$$$__$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$___o$$$
_$$$$___$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$_____$$$$
__$$$$____"$$$$$$$$$$$$$$$$$$$$$$$$$$$$"______o$$$
__"$$$o_____"""$$$$$$$$$$$$$$$$$$"$$"_________$$$
____$$$o__________"$$""$$$$$$""""___________o$$$
_____$$$$o_________________oo_____________o$$$"

______"$$$$o______o$$$$$$o"$$$$o________o$$$$
________"$$$$$oo_____""$$$$o$$$$$o___o$$$$""
___________""$$$$$oooo__"$$$o$$$$$$$$$"""
______________""$$$$$$$oo $$$$$$$$$$
______________________""""$$$$$$$$$$$
__________________________$$$$$$$$$$$$
___________________________$$$$$$$$$$"
_____________________________"$$$""""

(e provate a mettere come input questa...)

-- Comment added by MarcoEsposito on 22 Apr 2005


O_______O'

BUWAHUWAHUWAHUWAHUWAHUWHAUWAHWUAHWUAHWUAHUWA MARCO SEI 1 GRANDE!!!!!!! big grin big grin big grin big grin big grin
dove l'hai trovata quella ASCII art? smile non ci credo che l'hai fatta tu! big grin

-- Comment added by AlbertoLaRocca on 22 Apr 2005


headers

oh, finalmente i nuovi headers del modulo2! smile iniziavo a stancarmi di sorbirmi le lamentele del watcom che non riusciva a generare i PCH smile
[OT] PS: mi sono messo questa pagina tra i preferiti big grin :
http://www.google.com/search?hl=en&lr=&safe=off&q=tiziano---+ferro+twiki+david+benedetti&btnG=Search
attendo che la pagina del forum entri in cache a Google, così le ragazzine cretine di 10 anni che cercano Tiziano Ferro troveranno il post di David Benedetti su TWiki... big grin Tiziano Ferro, aiutaci tu!!! asdasdasd

-- Comment added by AlbertoLaRocca on 22 Apr 2005


Funzionamento delle prime tre funzioni

Marco io ho fatto esattamente come hai fatto tu: elimino un elemento a chiamata seguendo la precedenza data dalla disposizione nella tabella. Non ti dico al 100% ma secondo me al 99% bisogna fare così

-- Comment added by MassimilianoNatale on 22 Apr 2005


eliminaTagsInvisibili implementata con libpcre + tip

Prof. io sto implementando tutte le funzioni con libpcre. Lavorando a eliminaTagsInvisibili mi sembra più facile implementarla senza usare il vettore tagsInvisibili, perchè altrimenti è un macello di strcat, strcpy et simila solo per creare una espressione regolare che farei prima a scrivere a mano. Insomma, visto che i casi sono pochi pensavo di scrivere delle chiamate a rimpiazzaER ad hoc. Inoltre alle altre persone coraggiose che hanno fatto la mia stessa scelta (implementare tutto con libpcre) vorrei dare un aiuto per un problema che a me ha fatto perdere un sacco di tempo: in rimpiazzaLettere bisogna stare attenti ai search "|" e "$" poichè sono caratteri speciali di libpcre. per far andare le cose a posto bisogna passare a rimpiazzaER rispettivamente "[|]" e "[$]" (o forse basta metterci davanti \). A me continuava a dare MATCH_NOT_FOUND senza un apparente ragione.

-- Comment added by GiovanniColombi on 22 Apr 2005


eliminaTagsInvisibili implementata con libpcre + tip

per il tuo problema di creare un espressiore regolare dalla tabella "tagsInvisibili" prova a vedere il funzionamento della "sprintf" vedrai che è molto più semplice di quanto pensi... senza usare tutto quel caos con le strcpy strcat.. etc

-- Comment added by MarcoEsposito on 22 Apr 2005


eliminaTagsInvisibili implementata con libpcre + tip

Fammi capire una cosa... tu per implementare le prime funzione chiami in esse la funzione rimpiazzaEspressioneRegolare? io avevo valutato questa possibilità, ma nell'ignoranza ho preferito implementare le funzioni come entità non dipendenti l'una dall'altra.

-- Comment added by MarcoEsposito on 22 Apr 2005


eliminaTagsInvisibili implementata con libpcre + tip

Ti ringrazio del consiglio, non avevo pensato a sprintf! wink

Sì, io chiamo rimpiazzaER nelle prime tre funzioni. Credo che così si evita la perdita di tempo (e possibile causa di errori) di implementare qualcosa che già si è fatto (e testato), ma si incorre nel rischio di veder crollare tutto il modulo a causa di una funzione. Per me in questo momento è il fattore tempo è prioritario smile Inoltre: 1) finora ho studiato la programmazione strutturata, perchè non applicarla? 2) credo che i test si superino se il programma fa il suo dovere, il come non penso sia importante a questo livello (tant'è che la correzione è automatica). Certo se il Prof. è contrario a questa implementazione impiegherò i prossimi giorni in lunghe e snervanti sessioni di cut&paste smile Al Prof. l'ardua sentenza.

-- Comment added by GiovanniColombi on 22 Apr 2005


Chi non ha consegnato modulo1

Andrea chi non ha consegnato il modulo1 ha saltato il modulo. Le scadenze, come dice il prof., sono imprerogabili. PS: Ma l'uso di RE (risposta) è riservato solo al professore? Io l'ho utilizzato numerose volte e mi scuso se inappropriatamente

-- Comment added by MassimilianoNatale on 22 Apr 2005


Installazione e compilazione con la libreria pcre su windows

Professore, potrebbe spiegare dettagliatamente come, una volta installata la libreria pcre per windows, si deve procedere affinché il compilatore non faccia storie e compili normalmente un file in cui noi (poveri mortali) scriviamo semplicemente #include pcre.h ????????

-- Comment added by DavidBenedetti on 22 Apr 2005


libpcre.dll

Professore, ma dove sta questo file???? Esiste o è un'apparizione???

-- Comment added by DavidBenedetti on 22 Apr 2005


BAD_REPLACE

Cosa intende professore con il commento "la stringa rimpiazzata da errore (chiamando libpcre)" ??? Mi spiego: i controlli per quanto riguarda la stringa di replace li faccio MENTRE eseguo il replace del match sul testo, per rilevare eventuali errori di \n di indicazione di subpattern non validi, o cose del genere.....ho capito bene???

-- Comment added by DavidBenedetti on 23 Apr 2005


Risposte

RE: Chi non ha consegnato modulo1!

La scadenza del modulo 1 è passata ... sorry frown (ma ti puoi rifare coi moduli 2 3 e 4).

RE: Installazione e compilazione con la libreria pcre su windows (devcpp)

L'ho fatto già ... comunque lo ripeto
  • scaricate e installate il pacchetto http://gnuwin32.sourceforge.net/downlinks/pcre.php
  • questo normalmente va a finire in C:\Programmi\GnuWin32
  • copiate il file C:\Programmi\GnuWin32\bin\pcre.dll nella directory del progetto Devcpp
  • Aprite il progetto che state sviluppando in Devcpp e:
    • aggiungete in Tools->Compiler Options->Directories->Libraries la directory C:\Programmi\GnuWin32\lib
    • aggiungete in Tools->Compiler Options->Directories->Includes la directory C:\Programmi\GnuWin32\include
    • aggiungete in Project->Project Options->Parameters->Linker la libreria C:/Programmi/GnuWin32/lib/libpcre.lib
  • salvate il progetto

-- Comment added by AndreaSterbini on 23 Apr 2005


Installazione e compilazione con la libreria pcre su windows (devcpp)

Ora è un pò più kiaro, grazie professore!

-- Comment added by DavidBenedetti on 23 Apr 2005


Problema...

Professore, io non ho sviluppato un progetto, ma tutti singoli files...e così il dev mi "nasconde" la finestra Project.....c'è un'uscita???

-- Comment added by DavidBenedetti on 23 Apr 2005


pulisciTestoRE( );

senta prof ma l'array con tutte le coppie "search" "replace" dell'espressioni regolari da trovare e sostituire da dove lo prendiamo??? visto che nel file modulo2.h non c'è!!

-- Comment added by TizianoFranchi on 23 Apr 2005


pulisciTestoRE( );

oppure questa funzione richiama anche la parseEspressioniRegolari(); e quindi gli passiamo l'array restituito da tale funzione???

-- Comment added by TizianoFranchi on 23 Apr 2005


Chiarimento modulo1

Io mi riferivo alla necessità (non opportunità wink ) di consegnarlo ugualmente, il dubbio mi era venuto perchè ho sentito parlare di riferimenti a modulo1... mi chiedevo quindi se chi non aveva consegnato modulo1 doveva comunque svilupparlo e implementarlo (senza valore di esonero) per necessità di modulo2... ho cmq avuto la risposta :p... grazie

-- Comment added by AndreaNaim on 23 Apr 2005


pulisciTestoRE(...)

A quanto posso immaginare dalle intenzioni del prof Tiziano, nei test tu puoi passargli un vettore creato ed inizializzato da te, con N coppie search replace arbitrarie...Nella totalità del progetto dovrebbe invece essere così: prima si chiama la parseEspressioniRegolari(...) che mette i valori nell'array, e poi la pulisciTestoRE(...) che esegue tutti i match chiamando la rimpiazzaEspressioneRegolare(...), ma aspetto comunuqe l'iluminazione del prof...!!!

-- Comment added by DavidBenedetti on 23 Apr 2005


pulisciTestoRE(...)

non può richiamare la parseEspressioniRegolari() perchè a questa funzione gli serve il testo del file er.txt quindi prof come la dobbiamo implementare????????????????????

-- Comment added by TizianoFranchi on 23 Apr 2005


parseEspressioniRegolari()

L'ultima funzione va implementata con la libreria pcre? E' possibile implementarla anche senza e siccome non ho visto riferimenti a quella libreria diabolica ho pensato che andasse scritta con le solite librerie. Ho sbagliato?

-- Comment added by MassimilianoNatale on 23 Apr 2005


Risposte

RE: pulisciTestoRE( );

La seconda che hai detto smile

RE: Chiarimento modulo1

Solo le costanti del modulo 1 sono usate dal modulo 2.

RE: parseEspressioniRegolari()

Non credo sia necessario usare pcre per leggere una serie di righe da un file ...

-- Comment added by AndreaSterbini on 23 Apr 2005


pulisciTestoRE(...)

A questo punto penso proprio di essermi rinco*******o.....professore, di preciso: COME SI IMPLEMENTA QUESTA FUNZIONE???? LEI stessa richiama la parseEspressioniRegolari(...), oppure questa viene chiamata fuori? Oppure la pulisciTestoRE(...) chiama prima la leggiFile(...) (modulo1) e POI la parseEspressioni Regolari????? La prego, sia esplicito!!!!!

-- Comment added by DavidBenedetti on 23 Apr 2005


parametro MAX in pulisciTestoSemplice(...)

Professore, non mi ricordo se l'ha detto, ma come dobbiamo gestire una situazione in cui alla funzione in questione viene passato un valore negativo o nullo in MAX??? INVALID_PARAMETER???

-- Comment added by DavidBenedetti on 23 Apr 2005


pulisciTestoRE

sinceramente David le specifiche di questa funzione (e in generale delle ultime 3) mi sono sembrate molto meno traumatiche delle prime 4 funzioni; temevo che questa storia delle librerie pcre fosse molto peggio... ^^'
a me il funzionamento della pulisciTestoRE sembra evidente: la leggiFile non c'entra nulla, tu non ricevi nessun nome di file, ricevi il buffer contenente il testo da ripulire e chiami rimpiazzaEspressioneRegolare tante volte finché non ti ritorna MATCH_NOT_FOUND o finché non l'hai chiamata max volte (tutto analogo a pulisciTestoSemplice insomma); ovviamente il testo ripulito deve andare nel buffer "pulito". quello che non capisco è come mai abbiamo dovuo realizzare il modulo2 in 2 versioni: versione con parsing diretto dell'HTML (prima 4 funzioni) e versione con espressioni regolari (ultime 3 funzioni).

-- Comment added by AlbertoLaRocca on 23 Apr 2005


pulisciTestoRE

ovviamente dimenticavo di specificare che la funzione deve chiamare rimpiazzaEspressioneRegolare N volte *per ogni espressione contenuta nel vettore "expr"! * smile
dove N ovviamente è il numero di match incontrati che corrispondono ad una certa espressione regolare più uno, oppure max se il N risulterebbe maggiore di max.

-- Comment added by AlbertoLaRocca on 23 Apr 2005


pulisciTestoRE(...)

Lo dicevo semplicemente xké avevo letto la risposta del professore a Tiziano...tutto qua....

-- Comment added by DavidBenedetti on 24 Apr 2005


pulisciTestoSemplice(...)

Professore, non ho ben capito una cosa...ma questa funzione, può ritornare il codice RESULT_OK?

-- Comment added by DavidBenedetti on 24 Apr 2005


RIMBORSI

Professore, è previsto anche un rimborso di ore di sonno alla fine del corso??? smile (naturalmente scherzo!)

-- Comment added by DavidBenedetti on 24 Apr 2005


RE: pulisciTestoRE

Hai ragione, avevo letto di fretta, pulisciTestoRE NON chiama parseEspressioniRegolari, bensì RICEVE un array di SearchReplace ottenuto USANDO parseEspressioniRegolari.

RE: pulisciTestoSemplice

.... mhhhhh .....

-- Comment added by AndreaSterbini on 24 Apr 2005


Funzione *pcre_compile

Non riesco a capire che valori bisogna passare alla funzione *pcre_compile!! Qualcuno può farmi un esempio pratico??Grazie..

-- Comment added by MarcoMagnaneschi on 24 Apr 2005


Funzione *pcre_compile

allora il primo parametro (search) è l'espressione regolare che devi cercare nel testoSporco, il secondo è un'opzione (per i valori c'è il manuale di linux) comunque puoi mettere 0 per non avere l'opzione, il terzo parametro è un puntatore di puntatore a una stringa dove la compile() mette l'eventuale stringa d'errore, il quarto è un puntatore ad intero dove la funzione mette l'indice nel quale ha trovato l'errore nella stringa serach, e l'ultimo puoi mettere NULL. quindi avrai: RE=pcre_compile(search, 0, &errptr, &erroffset, NULL); errptr è definito come puntatore a char

-- Comment added by TizianoFranchi on 24 Apr 2005


pulisciTestoSemplice(...)

Scusa avevo capito pulisciTestoRE(), comunque anche la pulisciTestoSemplice() può ritornare il RESUL_OK, solo se alla prima passata non è stato trovato nessun match da nessuna delle tre funzioni che richiama allora si ritorna MATCH_NOT_FOUND.

-- Comment added by TizianoFranchi on 24 Apr 2005


er.txt

nel file er.txt mi sembra ci sia un errore: l'espressione regolare \/ (backslah, slash) non è valida! va corretta con \\/ (backslash, backslash, slash) oppure va lasciata così?

-- Comment added by MarcelloLagana on 24 Apr 2005


Ancora funzione pcre_compile

Io ho fatto cosi: pcre *RE; char pattern[10]="pippo"; char **errptr; int *erroffset; RE=pcre_compile(pattern,0,errptr,erroffset,NULL);

e mi da il warning sul terzo argomento anche se lo passo con la ‘&’ davanti!! Ma così è GIUSTO??Grazie…

-- Comment added by MarcoMagnaneschi on 24 Apr 2005


er.txt

anvedi oh, ce sta er ti ics ti... ok la pianto big grin
non ne so molto della sintassi delle espressioni regolari, ma secondo me va corretta in "[\]/" (ovviamente il contenuto del file deve essere "[\]/", ma se lo scrivi in un sorgente C devi scrivere "[\\]/")

-- Comment added by AlbertoLaRocca on 24 Apr 2005


parseEspressioniRegolari : caso di replace \0

Piccola domanda che mi sorge scrivendo la parse...come facciamo a riconoscere l'empty string?
Mi spiego meglio: quando noi scandiamo testo dobbiamo ignorare i commenti ed i /n, tutti gli altri caratteri li consideriamo stringhe da mettere nei campi dell'elemento searchreplace. Ma nel file er.tx


This topic: Labprog2eo > WebHome > DomandeSulModuloDue
Topic revision: r269 - 2005-08-21 - AndreaSterbini
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2021 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback