|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2004
Messaggi: 1703
|
[C++]Eliminare i tag da un file html
ho un file html dove c'è del testo e delle piccole immagini rappresentati i semi delle carte. Volevo sostituire i link alle immagini con del testo e poi eliminare tutti i tag in eccesso.
Potete indirizzarmi a qualcosa che utilizzi il C++ o qualcosa di già pronto. Grazie. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
Il modo migliore è usare le regular expressions, però io le ho usate solo in java, quindi non so in c++ quali sono le librerie migliori.
Per farti un esempio di quello che si può fare con le regex: per togliere tutti i tag basterebbe fare una cosa del tipo: Codice:
testo=testo.replace("<.*?>","");
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Aug 2004
Messaggi: 1703
|
Quote:
per fare quello che dico io in c o c++ non so se esiste qualcosa. a me interessa levare tutti i tag tranne uno quello delle immagini che poi mi volevo sostiutire con una funzione di ricerca e sostituzione sottostringhe. |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
Esistere esiste, se cerchi su google trovi un sacco di librerie però non so consigliarti, aspettiamo che qualcuno che le ha già usate risponda, oppure prova...
Per fare quello che chiedi basta prima sostituire il tag delle immagini con quello che devi e poi tutto quello che resta con il codice che dicevo prima. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
Per quello che deve fare, se ho capito bene, le regex sono meglio.
PS: per evitare ulteriori post inutili e chiarire subito: secondo me il risultato che vuole ottenere limpid-sky non è un'altra pagina html modificata ma un file di testo pulito dai tag. Siccome le immagini nel file di testo non si vedono ma sarebbe bene che ci fosse qualcosa al loro posto vuole sostituirle con qualche testo. Se ho capito male allora sono d'accordo con fero86 Ultima modifica di wingman87 : 01-04-2009 alle 23:26. |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
|
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
comunque se non erro per le regex in C++ puoi usare boost..
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Aug 2004
Messaggi: 1703
|
Purtroppo credo di non avere le conoscenze necessarie a fare una cosa del genere poichè conosco solo un po di C++.
cmq svelo le mie "carte" il codice html è preso dalla chat del programma di poker gioco digitale. Se il testo viene copiato in un editor html (ho usato ace html... con il tasto destro è presente paste as html)ci sono tanti tag e a me interessata eliminarli tutti tranne i tag delle immagini (i semi delle carte) Al posto del link all'immagine presente nel codice volevo sostituire del testo come ho scritto in basso. Ecco il codice di una mano di gioco e quello che vorrei ottenere io. Se qualcuno mi può dare una mano, per me è difficile ma credo che qualcuno di voi mi sa aiutare. Codice HTML:
<SPAN class=dealerbrief channel="dealerbrief" timestamp="1238602104">Benvenuto al tavolo Torneo #5653663, tavolo #1</SPAN><SPAN class=system channel="system" timestamp="1238602104"><BR>Nuovo livello: 10/20</SPAN><SPAN class=dealerbrief channel="dealerbrief" timestamp="1238602104"><BR>kapbeer ha la carta A<IMG align=top src="file:///C:/Documents%20and%20Settings/All%20Users/Dati%20applicazioni/GiocoDigitale/Poker/images/suit_spade.png"> e ha il bottone</SPAN><SPAN class=dealerbrief channel="dealerbrief" timestamp="1238602104"><BR>Stai giocando Hold 'em</SPAN><SPAN class=dealerbrief channel="dealerbrief" timestamp="1238602104"><BR> <HR> Hold 'em, mano #263884288</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602104"><BR>enzob mette il piccolo buio (10)</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602104"><BR>lucadifour mette il grande buio (20)</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602104"><BR>cratos76 fa call</SPAN><SPAN class=dealerbrief channel="dealerbrief" timestamp="1238602104"><BR>domeneque, è il tuo turno</SPAN><SPAN class=player channel="player" timestamp="1238602104"><BR>Maxplus: <IMG align=top src="file:///C:/Documents%20and%20Settings/All%20Users/Dati%20applicazioni/GiocoDigitale/Poker/images/emoticon_12.png"></SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602104"><BR>domeneque fa call</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602104"><BR>JackRipper fa fold</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602104"><BR>paolo1962 fa fold</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602104"><BR>covodeipirat fa fold</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602104"><BR>Maxplus fa call</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602104"><BR>kapbeer fa call</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602104"><BR>enzob fa call</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602104"><BR>lucadifour rilancia di 100</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602105"><BR>cratos76 fa call</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602105"><BR>domeneque fa fold</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602105"><BR>Maxplus fa call</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602105"><BR>kapbeer fa call</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602106"><BR>enzob fa fold</SPAN><SPAN class=dealerbrief channel="dealerbrief" timestamp="1238602109"><BR>Il flop è Q<IMG align=top src="file:///C:/Documents%20and%20Settings/All%20Users/Dati%20applicazioni/GiocoDigitale/Poker/images/suit_club.png"> 2<IMG align=top src="file:///C:/Documents%20and%20Settings/All%20Users/Dati%20applicazioni/GiocoDigitale/Poker/images/suit_diamond.png"> J<IMG align=top src="file:///C:/Documents%20and%20Settings/All%20Users/Dati%20applicazioni/GiocoDigitale/Poker/images/suit_spade.png"></SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602115"><BR>lucadifour punta 80</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602124"><BR>cratos76 fa call</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602125"><BR>Maxplus fa call</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602129"><BR>kapbeer fa call</SPAN><SPAN class=dealerbrief channel="dealerbrief" timestamp="1238602131"><BR>Il turn è 4<IMG align=top src="file:///C:/Documents%20and%20Settings/All%20Users/Dati%20applicazioni/GiocoDigitale/Poker/images/suit_spade.png"></SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602133"><BR>lucadifour fa check</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602134"><BR>cratos76 fa check</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602134"><BR>Maxplus fa check</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602134"><BR>kapbeer fa check</SPAN><SPAN class=dealerbrief channel="dealerbrief" timestamp="1238602136"><BR>Il river è 6<IMG align=top src="file:///C:/Documents%20and%20Settings/All%20Users/Dati%20applicazioni/GiocoDigitale/Poker/images/suit_heart.png"></SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602138"><BR>lucadifour fa check</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602140"><BR>cratos76 fa check</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602140"><BR>Maxplus fa check</SPAN><SPAN class=dealerverbose channel="dealerverbose" timestamp="1238602140"><BR>kapbeer fa check</SPAN><SPAN class=dealerbrief channel="dealerbrief" timestamp="1238602142"><BR>lucadifour ha A<IMG align=top src="file:///C:/Documents%20and%20Settings/All%20Users/Dati%20applicazioni/GiocoDigitale/Poker/images/suit_club.png"> J<IMG align=top src="file:///C:/Documents%20and%20Settings/All%20Users/Dati%20applicazioni/GiocoDigitale/Poker/images/suit_diamond.png"> e coppia di jack</SPAN><SPAN class=dealerbrief channel="dealerbrief" timestamp="1238602145"><BR>Maxplus mostra 2<IMG align=top src="file:///C:/Documents%20and%20Settings/All%20Users/Dati%20applicazioni/GiocoDigitale/Poker/images/suit_club.png"> 8<IMG align=top src="file:///C:/Documents%20and%20Settings/All%20Users/Dati%20applicazioni/GiocoDigitale/Poker/images/suit_heart.png"> da coppia di due</SPAN><SPAN class=dealerbrief channel="dealerbrief" timestamp="1238602150"><BR>lucadifour vince 760 con coppia di jack</SPAN><SPAN class=dealerbrief channel="dealerbrief" timestamp="1238602155"><BR> <HR> Nuovo livello: 10/20 kapbeer ha la carta A[picca] e ha il bottone Stai giocando Hold 'em Hold 'em, mano #263884288 enzob mette il piccolo buio (10) lucadifour mette il grande buio (20) cratos76 fa call domeneque, è il tuo turno domeneque fa call JackRipper fa fold paolo1962 fa fold covodeipirat fa fold Maxplus fa call kapbeer fa call enzob fa call lucadifour rilancia di 100 cratos76 fa call domeneque fa fold Maxplus fa call kapbeer fa call enzob fa fold Il flop è Q[fiori] 2[quadri] J[picca] lucadifour punta 80 cratos76 fa call Maxplus fa call kapbeer fa call Il turn è 4[picca] lucadifour fa check cratos76 fa check Maxplus fa check kapbeer fa check Il river è 6[cuori] lucadifour fa check cratos76 fa check Maxplus fa check kapbeer fa check lucadifour ha A[fiori] J[picca] e coppia di jack Maxplus mostra 2[picca] 8[cuori] da coppia di due lucadifour vince 760 con coppia di jack Ultima modifica di limpid-sky : 02-04-2009 alle 13:30. |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
Quote:
Comunque con le regex fare quello che chiedi non è molto difficile. Però prima di togliere tutti i tag oltre a sostituire le immagini dovresti anche sostituire i <br> con dei ritorni a capo. Ho fatto una piccola ricerca e confermo quanto detto da ndakota. Qui trovi tutte le info che ti servono LINK. Per usare il DOM, di nuovo, non so indirizzarti perché non ho mai fatto cose del genere in C++. |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
Non vorrei risultare semplicistico, ma il problema è abbastanza più semplice di quello che sembra
![]() -Noi sappiamo che il testo che vuoi togliere è compreso tra '<' e '>'. Tanto basta, e si risolve in un for. Codice:
ifstream html( "miofile.html", ios_base::in | ios_base::ate );
//controlla la grandezza.
unsigned int size = html.tellg();
html.seekg (0, ios::beg);
//alloca il buffer
char* buffer = (char*)malloc( size );
html.read (buffer, size );
html.close();
string clean ="";
bool parsingTag = false;
for( unsigned int i = 0; i < size-1; i++)
{
if( buffer[i] == '<' ) //inizia la tag
{
parsingTag = true;
clean += ' ';
}
else if( buffer[i] == '>' ) //fine tag
parsingtag = false;
if( !parsingTag )
clean += buffer[i];
else if( buffer[i] = 'B' && buffer[i+1] == 'R' ) //se la tag è BR bisogna andare accapo.
clean += '\n';
}
free( buffer );
Si poteva fare in maniera più efficente, per esempio evitando di fare += per ogni char, e serve di aggiungere l'esclusione per le immagini. Però la base è quella. Forse prima di appellarsi a regex, boost e altra roba assurda (e dire che il C++ non puo' risolvere questo problema) si dovrebbe avviare il cervello EDIT: migliorato un pò... Ultima modifica di Tommo : 02-04-2009 alle 20:20. |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
Eh, hai ragione anche te, ma abituato a programmare in java certi problemi li vedi in un'altra ottica.
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Aug 2004
Messaggi: 1703
|
Quote:
Ho trovato una cosa simile su bruke eckel practical programming, con qualche accorgimento in più. La base cmq è quella come dicevi tu. Questa è più semplice e al mio livello. Poi magari la posto visto che può essere interessante. Ultima modifica di limpid-sky : 03-04-2009 alle 01:49. |
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:24.




















