Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
La facilità di installazione e la completa automazione di tutte le fasi di utilizzo, rendono questo prodotto l'ideale per molti clienti. Ecco com'è andata la nostra prova in anteprima
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
be quiet! debutta nel settore mouse da gaming con Dark Perk Ergo e Dark Perk Sym: due modelli gemelli per specifiche, con polling rate di 8.000 Hz anche in wireless, sensore PixArt PAW3950 da 32.000 DPI e autonomia dichiarata fino a 110 ore. Nel test, a 8.000 Hz si arriva a circa 30 ore reali, con ricarica completa in un'ora e mezza
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-04-2009, 20:03   #1
limpid-sky
Senior Member
 
L'Avatar di limpid-sky
 
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.
limpid-sky è offline   Rispondi citando il messaggio o parte di esso
Old 01-04-2009, 20:39   #2
wingman87
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("<.*?>","");
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 01-04-2009, 22:00   #3
limpid-sky
Senior Member
 
L'Avatar di limpid-sky
 
Iscritto dal: Aug 2004
Messaggi: 1703
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
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("<.*?>","");
si questo l'ho visto pure in rete.
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.
limpid-sky è offline   Rispondi citando il messaggio o parte di esso
Old 01-04-2009, 22:21   #4
wingman87
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.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 01-04-2009, 22:40   #5
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Il modo migliore è usare le regular expressions
no, quello é il modo peggiore: il modo migliore é usare il DOM, che é fatto apposta. inoltre per un lavoro del genere sconsiglio il C++, si puó fare in maniera piu semplice.
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 01-04-2009, 23:20   #6
wingman87
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.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2009, 12:37   #7
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
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
l'implementazione Microsoft del DOM non serve solo a costruire da zero documenti XML, serve anche a leggerli da un URL.
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2009, 13:12   #8
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
comunque se non erro per le regex in C++ puoi usare boost..
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2009, 13:16   #9
limpid-sky
Senior Member
 
L'Avatar di limpid-sky
 
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>
Benvenuto al tavolo Torneo #5653663, tavolo #1
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.
limpid-sky è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2009, 19:26   #10
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2787
Quote:
Originariamente inviato da fero86 Guarda i messaggi
l'implementazione Microsoft del DOM non serve solo a costruire da zero documenti XML, serve anche a leggerli da un URL.
Non lo nego ma non è quello che stavo dicendo io...

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++.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2009, 20:10   #11
Tommo
Senior Member
 
L'Avatar di Tommo
 
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 );
Alla fine di questo codice hai il testo privo di tags dentro alla stringa clean
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ò...
__________________
*ToMmO*

devlog | twitter

Ultima modifica di Tommo : 02-04-2009 alle 20:20.
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2009, 21:57   #12
wingman87
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.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2009, 23:16   #13
Tommo
Senior Member
 
L'Avatar di Tommo
 
Iscritto dal: Feb 2006
Messaggi: 1304
Beh in questo caso non è un grosso punto a favore di Java
Cmq si fa tranquillamente anche in java la stessa cosa.
__________________
*ToMmO*

devlog | twitter
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2009, 01:46   #14
limpid-sky
Senior Member
 
L'Avatar di limpid-sky
 
Iscritto dal: Aug 2004
Messaggi: 1703
Quote:
Originariamente inviato da Tommo Guarda i messaggi
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 );
Alla fine di questo codice hai il testo privo di tags dentro alla stringa clean
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ò...
Grazie molto.
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.
limpid-sky è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2009, 04:39   #15
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2787
Quote:
Originariamente inviato da Tommo Guarda i messaggi
Beh in questo caso non è un grosso punto a favore di Java
Cmq si fa tranquillamente anche in java la stessa cosa.
Beh, non è colpa di java in sé, è colpa mia che mi faccio viziare dal framework molto generoso
wingman87 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
La nuova AMD non è più 'ec...
La Cina non è più la pecor...
Un SSD accanto alla GPU: la ricetta di Z...
Texas Instruments acquisisce Silicon Lab...
NVIDIA chiede l'archiviazione della caus...
MOUSE: P.I. For Hire: sembra un cartone ...
Francia all'attacco: X sotto indagine, p...
Vodafone abilita il Wi-Fi Calling in Ita...
GTA VI: confermata l'uscita a novembre, ...
Il robot umanoide G1 di Unitree cammina ...
Gli americani comprano quasi solo iPhone...
Xcode 26.3 trasforma gli assistenti AI i...
Anche la Spagna è pronta a vietar...
Loongson 3B6000: la CPU cinese scalfisce...
Hard disk ancora protagonisti: Western D...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 15:24.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v