Tags:
tag this topic
create new tag
view all tags
------++ Domande (e risposte) sul ModuloDue In questa pagina potete [[#LaForm][porre domande]] sul ModuloDue. Per gli OffTopic c'è la pagina apposita. ---- %TOC% ---- ---+++ 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 Users.GabrieleTarantino on 07 Apr 2005 ---- ---++++ RE: FORUM scomodo Ho rimesso il forum in ordine cronologico. Il forum rimane così (rozzo e schifoso :-) ) -- Comment added by Users.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!!!! :) -- Comment added by Users.DavidBenedetti on 07 Apr 2005 ---- ---+++ Come faccio a linkare libpcre ? A quanto pare, professore, lei è un veggente :D . 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 Users.RiccardoVona on 07 Apr 2005 ---- ---+++ PCRE Ehm, sarò ignorante, ma come hai fatto a scaricarla ed installarla???? :) -- Comment added by Users.DavidBenedetti on 07 Apr 2005 ---- ---++++ PCRE Ho scaricato l'install delle librerie e dei source dal link che il professore ha messo su ModuloDue. :) -- Comment added by Users.RiccardoVona on 07 Apr 2005 ---- ---++++ Come faccio a linkare libpcre ? <verbatim> "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)." </verbatim> Non so se è giusto...domani provo e vi faccio sapere -- Comment added by Users.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 Users.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 Users.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 Users.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 Users.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 Users.GiovanniColombi on 10 Apr 2005 ---- ---+++ LOL!!! :D scusi il titolo scemo prof., ma nulla di meglio si adattava! :D <br>mi è arrivata oggi una email di un *vero signor spammer*!!! :D <br>credo che per lo sviluppo di questo progetto abbiamo molto da imparare da quella email! <br>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:<br> <verbatim> 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! ;) </verbatim> 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... :D <br>lo riporto qui di seguito:<br> <verbatim> <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> </verbatim> ROTFL!!! :D <br>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 Users.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 Users.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) <verbatim> Via<font size="0">un po' di monnezza <font color=white>che contiene altra monnezza</font> dentro</font>gra </verbatim> * Prima della cura questo appare come: * Via<font size="0">un po' di monnezza <font color="white">che contiene altra monnezza</font>dentro</font>gra * Se sbaglio ad eliminare vien fuori: * Viadentro</font>gra * Se elimino solo il tag più interno: * Via<font size="0">un po' di monnezza dentro</font>gra * Se conto le aperture/chiusure di tag ed elimino il più esterno: * Viagra -- Comment added by Users.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 Users.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? :D -- Comment added by Users.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 Users.DavidBenedetti on 13 Apr 2005 ---- ---++++ Eliminazione di tag invisibili nidificati e se il testo contenesse un <verbatim> <tag invisibile> monnezza <tag visibile> parola </tag visibile> monnezza </tag invisibile> </verbatim> -- Comment added by Users.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 Users.AndreaSterbini on 13 Apr 2005 ---- ---+++ Viagra Certo che è un bell'esempio, ne incollo qui una versione lievemente modificata che fa capire come funziona. <table cellspacing=0 cellpadding=5 border=1> <tr > <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> <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> </table> -- Comment added by Users.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.<br><br> 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 Users.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 Users.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 Users.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 Users.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...??? :) -- Comment added by Users.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. <br> 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 Users.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 :) -- Comment added by Users.AlbertoLaRocca on 14 Apr 2005 ---- ---+++ NON SONO IL PROF, MA RISPONDO PER LUI (CHE ONORE!!!) :) 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!!!! :) -- Comment added by Users.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 Users.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 Users.AlbertoLaRocca on 14 Apr 2005 ---- ---++++ Finezza! asd :D David, come sempre sei un capolavoro di retorica! ;) :D -- Comment added by Users.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" ( :D ) 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? :D 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??? :) spesso nessuno usa nemmeno l'HTML... <br>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 Users.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!!! :) -- Comment added by Users.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 :-\ <br>se *non* la usiamo, la cosa come influisce sul voto? si alza o cala? -- Comment added by Users.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 Users.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:<br> <br> modulo1.h<br> modulo2.h<br> testModulo1.h<br> testModulo2.h<br> testModulo2.c<br> modulo1.c<br> modulo2.c<br> mainprogetto.c<br> <br> in testModulo2.c ho incluso solo testModulo2.h, ed in modulo2.c modulo2.h<br> Aiutooooooooooooo -- Comment added by Users.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 Users.GiovanniColombi on 14 Apr 2005 ---- ---++++ Multiply defined symbols Riccardo, a proposito di che file OBJ ti da' quell'errore? -- Comment added by Users.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 Users.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.<br> piuttosto volevo pensare a qualcosa da inserire nell'elenco dei tag da eliminare che permettesse di risolvere la questione.<br> ovviamente al limite quella storia può anche rimanere irrisolta, tanto neanche Hotmail con i filtri impostati alti riusciva a filtrare il messaggio! :D -- Comment added by Users.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 Users.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 Users.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 Users.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 Users.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 Users.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 Users.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 Users.TizianoFranchi on 14 Apr 2005 ---- ---+++ ESATTO! Hai fatto proprio quello che ho fatto io (ma ke fai: copi???)!!!! :) -- Comment added by Users.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.MarcoFattorosi on 15 Apr 2005 ---- ---+++ Errori compilazione -- Comment added by Users.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 Users.DavidBenedetti on 15 Apr 2005 ---- ---++++ Errori Compilazione Probabile che sia quello l'errore<br> 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 :) -- Comment added by Users.RiccardoVona on 15 Apr 2005 ---- ---+++ eliminaTagsHtml: caso particolare ops mi ero scordato che le parentesi angolari sono per l'html :D <br> Comunque, provando la eliminatagshtml mi sono trovato di fronte ad un caso particolare:<br> immaginiamo di avere questa stringa: " ciao, <blabla> sono <blabla> io </blabla>"<br> la eliminatagshtml dovrà copiare la stringa "ciao, sono <blabla> io" oppure "ciao, <blabla> sono io" ? -- Comment added by Users.RiccardoVona on 15 Apr 2005 ---- ---++++ eliminaTagsHtml: caso particolare GRRRR ci sono ricascato -.-' <br> allora aa sta per l'angolare aperta, ac per angolare chiusa<br> la stringa di esempio era "ciao aa blabla ac, sono aa blabla ac io aa/blabla ac"<br> devo copiare la stringa "ciao , sono aa blabla ac io" oppure la stringa "ciao aa blabla ac, sono io" ? -- Comment added by Users.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 Users.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? :D io mi sparo :D -- Comment added by Users.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 Users.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 Users.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 Users.AlbertoLaRocca on 15 Apr 2005 ---- ---+++ TWiki pazzo... O_o' ora vorrei sapere perché mi ha scritto tutto in grassetto... -- Comment added by Users.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:<br> * tutto quello che ci sta *prima* del match<br> * il replace del match<br> * tutto quello che c'è dopo<br> 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)<br> 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?<br> grazie x l'attenzione. :P -- Comment added by Users.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... :D 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 :) 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 Users.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 Users.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 Users.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.MarcoFattorosi 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 Users.DavidBenedetti on 18 Apr 2005 ---- ---+++ Risposte Purtroppo non ho potuto seguire il forum in questi giorni per cui sicuramente si incavolerete :-( 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 :-) ]_ 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 :-) . (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 Users.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 Users.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 Users.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 Users.MassimilianoNatale on 18 Apr 2005 ---- ---+++ Espressione Regolare in "er.txt" Professore! Stavo diventando matto! lei in "er.txt" ha scritto questo... <verbatim> # un qualsiasi tag HTML di tipo <qualcosa> o </qualcosa> </?[^<>]---+> </verbatim> Ma quell'espressione trova anche <verbatim> </qualcosa/> <qualcosa/> </verbatim> :P -- Comment added by Users.MarcoEsposito on 18 Apr 2005 ---- ---+++ pcre.h Hai provato a linkare in fase di compilazione la libreria pcre con -l pcre??? Potrebbe essere quello...! :) -- Comment added by Users.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 Users.EnricoMontesi on 19 Apr 2005 ---- ---+++ Risposte ------++++ RE: buffer per il testoPulito strcpy? non basta scambiare i puntatori? ;-) ------++++ 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: <verbatim> "font", "color='white'" "font", "color= 'white'" "font", "color ='white'" "font", "color = 'white'" "font", "color=\"white\"" "font", "color= \"white\"" "font", "color =\"white\"" "font", "color = \"white\"" </verbatim> ------++++ 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 %RED% *MODIFICA:* %FINE% ci eravamo dimenticati dei eliminate i *commenti HTML* ovvero: <verbatim> <!-- commento HTML che contiene un <TAG>html</TAG> --> </verbatim> Che però non possono essere elencati nella tabella di coppie "tag", "parametro=valore" per cui vanno gestiti ad-hoc. -- Comment added by Users.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 Users.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 Users.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 Users.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 Users.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 Users.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 Users.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 Users.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.MarcoFattorosi 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? ;-) 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 Users.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 Users.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 Users.MarcoEsposito on 19 Apr 2005 ---- ---+++ Ancora rimpiazzaLettere(...) Esatto! -- Comment added by Users.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!!! :) -- Comment added by Users.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 Users.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 Users.DavidBenedetti on 19 Apr 2005 ---- ---+++ eeeeeeeehhhhhhhhhh???????? O_O David, starai scherzando... a parte che forse casomai volevi dire "testoSporco[]"...<br> ma anche se fosse "testoPulito[]" cioè, io mi sparo... O_o' -- Comment added by Users.AlbertoLaRocca on 19 Apr 2005 ---- ---+++ rimpiazzaLettere buone notizie David: non mi sparo più :) (be', oddio... O_o') <br>comunque: leggendo attentamente la spiegazione PDF della rimpiazzaLettere nel modulo2 ho scoperto che avevi torto... :D <br>se trovi una sequenza la devi rimpiazzare completamente e ritornare, se non la trovi devi ritornare con MATCH_NOT_FOUND :P <br>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.<br> (dai ç@##0!!! non può non essere così!!! :mad: ^^') -- Comment added by Users.AlbertoLaRocca on 19 Apr 2005 ---- ---+++ a proposito, :D nell'elenco delle sequenze da rimpiazzare aggiungiamo anche queste entries: :D <br>ç per c <br>@ per a non so se è anche il caso di aggiungere anche # per z, ma non credo. -- Comment added by Users.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 Users.DavidBenedetti on 19 Apr 2005 ---- ---+++ *BANG!* colpo in bocca! certe volte il piombo ha un sapore migliore di quello della vita.<br> credo che domani non ci sentiremo... (ultime parole, qualcuno le incida sulla lapide plz thx) -- Comment added by Users.AlbertoLaRocca on 19 Apr 2005 ---- ---+++ ho capito!!! record storico, resuscito dopo ben meno di 3 giorni!!! :) <br>ho capito da solo (nonostante fossi già in decomposizione), ed era anche facile! non me l'aspettavo! <br>in pratica la rimpiazzaLettere deve cercare le occorrenze nell'ordine in cui sono sistemate nella tabella, giusto??? <br>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 Users.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 Users.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 <testo del tag> poi quelli con formato <testo del tag /> e infine i tag </ testo del tag> ? -- Comment added by Users.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 Users.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 Users.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 Users.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.<br><br> 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:<br> <kbd><verbatim>"<!-- commento1 --> <!-- commento2 --> <tag invisibile></tag invisibile> <!-- commento3 -->"</verbatim></kbd><br> dopo *una sola* chiamata ad eliminaTagsInvisibili che cosa mi ritrovo?<br> 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 Users.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:<br> <kbd><!-- commento1 --> <!-- commento2 --> <tag invisibile>blah blah blah</tag invisibile></kbd> -- Comment added by Users.AlbertoLaRocca on 20 Apr 2005 ---- ---+++ e dimenticavo la terza parte (ora ci si mettono anche gli errori miei); lo riscrivo per la terza volta:<br> <kbd><!-- commento1 --> <!-- commento2 --> <tag invisibile>blah blah blah</tag invisibile> <!-- commento3 --></kbd><br> -- Comment added by Users.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 Users.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.MarcoFattorosi 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 Users.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!!!<br>adesso rileggendo il forum mi sono accorto che la eliminaTagsHtml deve eliminare *prima* i <tags>, *poi* i </tags> e *infine* i <tags/>... o_O' <br>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 <br>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 Users.AlbertoLaRocca on 20 Apr 2005 ---- ---++++ O Madonna, e questa??? O_______o''' Si effettivamente è stata una complicazione non da poco ^^' io <b>apparentemente(finchè il prof non fa i test non ne ho la certezza :) ) </b> 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 Users.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 Users.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 :) -- Comment added by Users.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 Users.DavidBenedetti on 20 Apr 2005 ---- ---+++ ma LOL :D dai non ci credo! :D -- Comment added by Users.AndreaBalzi on 20 Apr 2005 ---- ---+++++ La sfiga suona sempre due volte.... Grazie David, ma è una questione di principio :) 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 Users.RiccardoVona on 20 Apr 2005 ---- ---+++ MMMHHHH.... Non lo so, anke xké Knoppix non m'è mai partito!!!Sorry! -- Comment added by Users.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 :D ora vado a cambiarmi le mutande... :D -- Comment added by Users.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 Users.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 Users.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 "<tag size="0)> per poi riprendere l'eliminazione dall'inizio e acchiappare tutti i tag inseriti nel vettore tagsInvisibili. Grazie cmq dell'indicazione David -- Comment added by Users.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 Users.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 Users.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:<br> <kbd>"1<tag>2<tag>3</tag>4</tag>5"</kbd><br> 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 <kbd>"</tag>"</kbd>, ottieni questo risultato (errato):<br> <kbd>"14</tag>5"</kbd><br> se invece interpreti anche il contenuto del tag invisibile e ti tieni il conto delle annidazioni, ottieni quest'altro risultato (corretto):<br> <kbd>"15"</kbd><br> 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.<br><br>*è 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 :D ...**) -- Comment added by Users.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 Users.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.<br>l'unica cosa di cui non sono certo è di aver fatto bene la gestione dei commenti (attendo ancora conferma dal prof). -- Comment added by Users.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 Users.DavidBenedetti on 21 Apr 2005 ---- ---+++ meno male :P e x quanto riguarda i commenti?<br>PS: le funzioni con le librerie pcre le devo ancora implementare anch'io ^^' -- Comment added by Users.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 "<!--", non con "<--"; il tag di chiusura invece è giusto: "-->". (ovviamente ho provato sia su IE che su FF). -- Comment added by Users.AlbertoLaRocca on 21 Apr 2005 ---- ---+++ doh speravo che almeno tra virgolette i simboli < e > venissero giusti; riscrivo il post come lo intendevo:<br>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 Users.AlbertoLaRocca on 21 Apr 2005 ---- ---+++ Commenti In ke senso per quanto riguarda i commenti??? -- Comment added by Users.DavidBenedetti on 21 Apr 2005 ---- ---+++ Nota per il professore... Gioco il jolly! -- Comment added by Users.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 Users.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 Users.DavidBenedetti on 21 Apr 2005 ---- ---+++ x quanto, riguarda i commenti! ho avvisato "quanto" di riguardare i commenti...<br>occhèeei, occhèeei, mamma mia, neanche uno stupido giochino di parole... :D <br>intendevo dire: l'algoritmo che ho fatto io nella eliminaTagsInvisibili è *tutto quanto* giusto??? (sta buono quanto, non dicevo a te)<br>anche la parte che gestisce la rimozione dei commenti è giusta? -- Comment added by Users.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 :) -- Comment added by Users.AlbertoLaRocca on 21 Apr 2005 ---- ---+++ [OT] asd :D 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!!! :D -- Comment added by Users.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 Users.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 :) -- Comment added by Users.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!) :) -- Comment added by Users.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 Users.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?<br> <kbd>"1 <tag> 2 </img> 3 </tag> 4"</kbd><br> 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):<br> <kbd>"1 3 </tag> 4"</kbd><br> mentre la versione corretta sarebbe:<br> <kbd>"1 4"</kbd><br> <br>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 Users.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 Users.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 Users.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 Users.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 Users.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 Users.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 Users.DavidBenedetti on 21 Apr 2005 ---- ---+++ rimpiazzaEspressioneRegolare Nel caso la stringa di replace sia una stringa vuota, si deve resituire BAD_REPLACE??? -- Comment added by Users.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 Users.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! :) <br>possiamo fare una funzione ricorsiva per analizzare il nesting level :) <br>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 :D <br>questo però non toglie che sarebbe meglio assumere che si riceva in input solo HTML corretto<br> ^_________^''' -- Comment added by Users.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 Users.DavidBenedetti on 21 Apr 2005 ---- ---++++ EUREKA eh si vede... parli di record di avvio e di stack pointer assieme... :D -- Comment added by Users.AlbertoLaRocca on 21 Apr 2005 ---- ---+++ ODDIO QUANTO SEI PIGNOLO.... Era per fare una battuta..... -- Comment added by Users.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 Users.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 Users.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 Users.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 Sì ------++++ 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 <verbatim> <tag size=0>pippo <tag colore=nero> va al mare </tag> a pescare </tag> le cozze 1 2 1 0 </verbatim> ------++++ 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 %RED% *fil rouge* %FINE% e ti vale doppio :-) ------++++ 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 Users.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.MarcoFattorosi 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)??? :) -- Comment added by Users.DavidBenedetti on 21 Apr 2005 ---- ---+++ HTML malformato giusto, a contare *solo* i tag con lo stesso nome non ci avevo pensato! grazie 1000! ^^' <br>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 :) ); 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 Users.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 Users.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 Users.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 Users.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 Users.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 Users.AlbertoLaRocca on 22 Apr 2005 ---- ---+++ Tags invisibili pardon, la mia precedente risposta era fuor di luogo :P <br>non avevo capito che la risposta del prof. era rivolta a David, pensavo si riferisse ancora all'HTML malformato ^^ -- Comment added by Users.AlbertoLaRocca on 22 Apr 2005 ---- ---+++ Tag Invisibili Ehm....vabbè, non mi sono spiegato bene......... -- Comment added by Users.DavidBenedetti on 22 Apr 2005 ---- ---+++ Chi non ha consegnato modulo1! E' sufficente che consegni modulo2 oppure deve consegnare entrambi? -- Comment added by Users.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ì: <verbatim> testoSporco = "ciao $0n0, un br4\/o b4mbin0 ba||erin0" </verbatim> Alla prima chiamata, la funzione restituisce... <verbatim> testoPulito = "ciao $0n0, un br4\/o b4mbin0 bal|erin0" ---- la prima | -> l </verbatim> ... seconda chiamata... <verbatim> testoPulito = "ciao $0n0, un br4\/o b4mbin0 ballerin0" ---- la seconda | -> l </verbatim> ...dopo metto tutto di seguito l'output: ogni riga, corrisponde ad un risultato di una chiamata di rimpiazzaLettere: <verbatim> "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... </verbatim> Oppure fa ogni tipo di carattere in una "botta" sola? (che ha anche più senso?... ) Invece la funzione eliminaTagsHtml si dovrebbe comportare così: <verbatim> testoSporco = "</primo>c'era una volta<secondo> tanto <terzo> tempo fà <quarto/> in un regno molto </quinto> <ultimo>" </verbatim> Metto come prima l'output di fila <verbatim> "</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) </verbatim> 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... <verbatim> _______________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 $$$$$$$$$$ ______________________""""$$$$$$$$$$$ __________________________$$$$$$$$$$$$ ___________________________$$$$$$$$$$" _____________________________"$$$"""" </verbatim> (e provate a mettere come input questa...) -- Comment added by Users.MarcoEsposito on 22 Apr 2005 ---- ---+++ O_______O' BUWAHUWAHUWAHUWAHUWAHUWHAUWAHWUAHWUAHWUAHUWA MARCO SEI 1 GRANDE!!!!!!! :D :D :D :D :D <br>dove l'hai trovata quella ASCII art? :) non ci credo che l'hai fatta tu! :D -- Comment added by Users.AlbertoLaRocca on 22 Apr 2005 ---- ---+++ headers oh, finalmente i nuovi headers del modulo2! :) iniziavo a stancarmi di sorbirmi le lamentele del watcom che non riusciva a generare i PCH :) <br>[OT] PS: mi sono messo questa pagina tra i preferiti :D :<br>http://www.google.com/search?hl=en&lr=&safe=off&q=tiziano---+ferro+twiki+david+benedetti&btnG=Search<br> 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... :D Tiziano Ferro, aiutaci tu!!! asdasdasd -- Comment added by Users.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 Users.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 Users.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 Users.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 Users.MarcoEsposito on 22 Apr 2005 ---- ---++++ eliminaTagsInvisibili implementata con libpcre + tip Ti ringrazio del consiglio, non avevo pensato a sprintf! ;) 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 :) 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 :) Al Prof. l'ardua sentenza. -- Comment added by Users.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 Users.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 Users.DavidBenedetti on 22 Apr 2005 ---- ---+++ libpcre.dll Professore, ma dove sta questo file???? Esiste o è un'apparizione??? -- Comment added by Users.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 Users.DavidBenedetti on 23 Apr 2005 ---- ---+++ Risposte ------++++ RE: Chi non ha consegnato modulo1! La scadenza del modulo 1 è passata ... sorry :-( (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 Users.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 Users.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 Users.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 Users.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 Users.TizianoFranchi on 23 Apr 2005 ---- ---+++ Chiarimento modulo1 Io mi riferivo alla necessità (non opportunità ;) ) 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 Users.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 Users.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 Users.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 Users.MassimilianoNatale on 23 Apr 2005 ---- ---+++ Risposte ------++++ RE: pulisciTestoRE( ); La seconda che hai detto :-) ------++++ 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 Users.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 Users.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 Users.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... ^^' <br>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 Users.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"! * :) <br>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 Users.AlbertoLaRocca on 23 Apr 2005 ---- ---+++ pulisciTestoRE(...) Lo dicevo semplicemente xké avevo letto la risposta del professore a Tiziano...tutto qua.... -- Comment added by Users.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 Users.DavidBenedetti on 24 Apr 2005 ---- ---+++ RIMBORSI!!! Professore, è previsto anche un rimborso di ore di sonno alla fine del corso??? :) (naturalmente scherzo!) -- Comment added by Users.DavidBenedetti on 24 Apr 2005 ---- ---++++ RE: pulisciTestoRE Hai ragione, avevo letto di fretta, pulisciTestoRE NON chiama parseEspressioniRegolari, bensì RICEVE un array di Search<nop>Replace ottenuto USANDO parseEspressioniRegolari. ------++++ RE: pulisciTestoSemplice .... mhhhhh ..... -- Comment added by Users.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 Users.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 Users.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 Users.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 Users.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 Users.MarcoMagnaneschi on 24 Apr 2005 ---- ---+++ er.txt anvedi oh, ce sta er ti ics ti... ok la pianto :D <br>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 Users.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?<br> 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
E
dit
|
A
ttach
|
Watch
|
P
rint version
|
H
istory
: r269
<
r268
<
r267
<
r266
<
r265
|
B
acklinks
|
V
iew topic
|
Ra
w
edit
|
M
ore topic actions
Topic revision: r269 - 2005-08-21
-
AndreaSterbini
Log In
or
Register
Labprog2eo Web ...
Labprog2eo Web
Labprog2eo Web Home
Users
Groups
Index
Search
Changes
Notifications
Statistics
Preferences
User Reference ...
User Reference
ATasteOfTWiki
TextFormattingRules
TWikiVariables
FormattedSearch
TWikiDocGraphics
TWikiSkinBrowser
InstalledPlugins
ChangeEmailAddress
ChangePassword
ResetPassword
Prenotazioni esami
Laurea Triennale ...
Laurea Triennale
Algebra
Algoritmi
Introduzione agli algoritmi
Algoritmi 1
Algoritmi 2
Algoritmi per la
visualizzazione
Architetture
Prog. sist. digitali
Architetture 2
Basi di Dati
Basi di Dati 1 Inf.
Basi di Dati 1 T.I.
Basi di Dati (I modulo, A-L)
Basi di Dati (I modulo, M-Z)
Basi di Dati 2
Calcolo
Calcolo differenziale
Calcolo integrale
Calcolo delle Probabilitą
Metodi mat. per l'inf. (ex. Logica)
canale AD
canale PZ
Programmazione
Fond. di Programmazione
Metodologie di Programmazione
Prog. di sistemi multicore
Programmazione 2
AD
EO
PZ
Esercitazioni Prog. 2
Lab. Prog. AD
Lab. Prog. EO
Lab. Prog. 2
Prog. a Oggetti
Reti
Arch. di internet
Lab. di prog. di rete
Programmazione Web
Reti di elaboratori
Sistemi operativi
Sistemi Operativi (12 CFU)
Anni precedenti
Sistemi operativi 1
Sistemi operativi 2
Lab. SO 1
Lab. SO 2
Altri corsi
Automi, Calcolabilitą
e Complessitą
Apprendimento Automatico
Economia Aziendale
Elaborazione Immagini
Fisica 2
Grafica 3D
Informatica Giuridica
Laboratorio di Sistemi Interattivi
Linguaggi di Programmazione 3° anno Matematica
Linguaggi e Compilatori
Sistemi Informativi
Tecniche di Sicurezza dei Sistemi
ACSAI ...
ACSAI
Computer Architectures 1
Programming
Laurea Magistrale ...
Laurea Magistrale
Percorsi di studio
Corsi
Algoritmi Avanzati
Algoritmica
Algoritmi e Strutture Dati
Algoritmi per le reti
Architetture degli elaboratori 3
Architetture avanzate e parallele
Autonomous Networking
Big Data Computing
Business Intelligence
Calcolo Intensivo
Complessitą
Computer Systems and Programming
Concurrent Systems
Crittografia
Elaborazione del Linguaggio Naturale
Estrazione inf. dal web
Fisica 3
Gamification Lab
Information Systems
Ingegneria degli Algoritmi
Interazione Multi Modale
Metodi Formali per il Software
Methods in Computer Science Education: Analysis
Methods in Computer Science Education: Design
Prestazioni dei Sistemi di Rete
Prog. avanzata
Internet of Things
Sistemi Centrali
Reti Wireless
Sistemi Biometrici
Sistemi Distribuiti
Sistemi Informativi Geografici
Sistemi operativi 3
Tecniche di Sicurezza basate sui Linguaggi
Teoria della
Dimostrazione
Verifica del software
Visione artificiale
Attivitą complementari
Biologia Computazionale
Design and development of embedded systems for the Internet of Things
Lego Lab
Logic Programming
Pietre miliari della scienza
Prog. di processori multicore
Sistemi per l'interazione locale e remota
Laboratorio di Cyber-Security
Verifica e Validazione di Software Embedded
Altri Webs ...
Altri Webs
Dottorandi
Commissioni
Comm. Didattica
Comm. Didattica_r
Comm. Dottorato
Comm. Erasmus
Comm. Finanziamenti
Comm. Scientifica
Comm Scientifica_r
Corsi esterni
Sistemi Operativi (Matematica)
Perl e Bioperl
ECDL
Fondamenti 1
(NETTUNO)
Tecniche della Programmazione 1° modulo
(NETTUNO)
Seminars in Artificial Intelligence and Robotics: Natural Language Processing
Informatica generale
Primo canale
Secondo canale
II canale A.A. 10-11
Informatica
Informatica per Statistica
Laboratorio di Strumentazione Elettronica e Informatica
Progetti
Nemo
Quis
Remus
TWiki ...
TWiki
Tutto su TWiki
Users
Main
Sandbox
Home
Site map
AA web
AAP web
ACSAI web
AA2021 web
Programming web
AA2021 web
AN web
ASD web
Algebra web
AL web
AA1112 web
AA1213 web
AA1920 web
AA2021 web
MZ web
AA1112 web
AA1213 web
AA1112 web
AA1314 web
AA1415 web
AA1516 web
AA1617 web
AA1819 web
Old web
Algo_par_dis web
Algoreti web
More...
Labprog2eo Web
Create New Topic
Index
Search
Changes
Notifications
RSS Feed
Statistics
Preferences
View
Raw View
Print version
Find backlinks
History
More topic actions
Edit
Raw edit
Attach file or image
Edit topic preference settings
Set new parent
More topic actions
Account
Log In
Register User
Questo sito usa cookies, usandolo ne accettate la presenza. (
CookiePolicy
)
Torna al
Dipartimento di Informatica
E
dit
A
ttach
Copyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback