PDA

View Full Version : [C] Esiste funzione che trasforma HTML in TXT?!


Matrixbob
01-02-2007, 17:57
Ed eccomi a riscrevere nella mitica sezione di Programmazione! :)

Il problema di questa volta è che ho scritto 1 applicazione in C e che tra le altre cose tratta testo simile a questo:

Dopo il voto scoppiano le contraddizioni nella maggioranza<br>e la Cdl va all'attacco:<i>"Il governo non ha i numeri, si dimetta"</i><br>Base Vicenza, Unione divisa Parisi:<i>"Serve un chiarimento"</i><br>Ma Chiti getta acqua sul fuoco:<i>"Non era mica un voto di fiducia"</i><br>
<br><br>
(18:11 01/02/2007)<br>

Solo che da stampare a schermo dove l'interpretazine dei TAG non viene implementata fa schifo, è 1 po' ome quando si guarda 1 telefilm sottotitolato e il lettore DIVX da tavolo non legge i TAG e pianta su 1 bel casino di layout.
Rendo l'idea?

Domanda:
C'è 1 modo per cui il <br>, o <br/> che siano, diventi il mitico "\n" e via dicendo per i caratteri dello stesso tipo?!

Grazie amici!

Matrixbob
01-02-2007, 18:00
Ovviamente il TXT puro a video sarà visualizzato correttamente, o almeno spero. :stordita:

Dopo il voto scoppiano le contraddizioni nella maggioranza
e la Cdl va all'attacco: "Il governo non ha i numeri, si dimetta"
Base Vicenza, Unione divisa Parisi: "Serve un chiarimento"
Ma Chiti getta acqua sul fuoco: "Non era mica un voto di fiducia"


(18:11 01/02/2007)

Matrixbob
01-02-2007, 18:08
Forse è meglio 1 funzione "Sostituisci"?! :mbe:

... che magari rimpiazza le sottostringhe del HTML con quello che gli dico io tipo "\n". :mc:

:boh: sono confuso, :O ho bisogno di 1 calcio in ... ehm :sofico: :)

Furla
01-02-2007, 18:40
fai prima a fartela da solo, è piùttosto semplice...

Matrixbob
01-02-2007, 19:06
fai prima a fartela da solo, è piùttosto semplice...
Non dirmi così :(

Tu dici di fare la sostituisci?! Come la imposteresti tu?!

Non c'è ne 1 x farne automaticamente di botto la transumanza HTML2TXT ?! :confused:

trallallero
02-02-2007, 13:34
Non dirmi così :(

Tu dici di fare la sostituisci?! Come la imposteresti tu?!

Non c'è ne 1 x farne automaticamente di botto la transumanza HTML2TXT ?! :confused:

http://www.devspy.com/public/viewer/list.aspx?guid=l2-m0-td
ho cercato

html2txt C++

con google ;)

Matrixbob
02-02-2007, 15:00
http://www.devspy.com/public/viewer/list.aspx?guid=l2-m0-td
ho cercato

html2txt C++

con google ;)
Grazie, scaricata e adesso la controllo se è al caso mio.

Matrixbob
02-02-2007, 15:22
Troppo complessa quella, passerei 1 sacco di tempo a riadattarla.

Forse faccio prima a partorire 1 funzione
"sostituisci(char* a, char* b)"

che utilizzando la funzione di STRING.H
"char* strstr(cs, ct)"

ad ogni prima occorrenza di ct in cs, attraverso al puntatore all'occorrenza, sostituisca la parte ineteressata.

Bisogna stare attenti a shiftare i caratteri, sempra 1 cacata, ma occorre fare attenzione.

Voi come la impostereste?!

Matrixbob
02-02-2007, 15:50
EDIT

Gandalf_BD
02-02-2007, 16:39
puoi usare uno scanner tipo Flex (per il C) o JFlex (per il Java)... in 30 secondi scrivi tre regolette che al posto di ogni <br> ti mettono un \n... non è difficile...
non so solo come si interfacci un programma C con uno scanner Flex, ma non penso che sia proibitivo...
spero di non aver aggiunto solo confusione... :stordita:

Matrixbob
02-02-2007, 16:58
puoi usare uno scanner tipo Flex (per il C) o JFlex (per il Java)... in 30 secondi scrivi tre regolette che al posto di ogni <br> ti mettono un \n... non è difficile...
non so solo come si interfacci un programma C con uno scanner Flex, ma non penso che sia proibitivo...
spero di non aver aggiunto solo confusione... :stordita:
Mah parli di scanner nel senso di HW?!
Quello che in sostanza a me servirà è 1 funzioncina di immettere tra il resto del mio codice C senza stravolgimenti.
Per questo le soluzioni precedenti non erano il MAX.
A parte quel utente che giustamente ha detto di scriverla a manina.

Gandalf_BD
03-02-2007, 08:25
Mah parli di scanner nel senso di HW?!

no, no :)
parlavo di questo http://www.cs.princeton.edu/~appel/modern/c/software/flex/flex_toc.html
in pratica, è la parte di un compilatore che si occupa di fare l'analisi del codice sorgente (che nel tuo caso sarebbe la pagina HTML...)

Matrixbob
03-02-2007, 18:34
Io ho 1 stringa relativamente corta di HTML, quidi cerco 1 approcio + classico.

Sto pensando di portare avanti qualcosa del genere:

void rimpiazza(char *str_input, char *str_target, char *str_sostituta)
{
char *str_tmp;

str_tmp = strstr(str_input, str_target);
if (str_tmp != "NULL")


}

Posso poi usare 1 serie di strcat per ricostruira la stringa?!

tomminno
03-02-2007, 22:22
Troppo complessa quella, passerei 1 sacco di tempo a riadattarla.

Forse faccio prima a partorire 1 funzione
"sostituisci(char* a, char* b)"

che utilizzando la funzione di STRING.H
"char* strstr(cs, ct)"

ad ogni prima occorrenza di ct in cs, attraverso al puntatore all'occorrenza, sostituisca la parte ineteressata.

Bisogna stare attenti a shiftare i caratteri, sempra 1 cacata, ma occorre fare attenzione.

Voi come la impostereste?!

Scusa ma visto che parli anche di C++ perchè non usi la replace della classe string che risolve da sola il problema dello shift?


while((pos = stringaHTML.find(tagHTML)) != string::npos)
stringaHTML = stringaHTML.replace(pos,tagHTML.length(),"\n");

Matrixbob
03-02-2007, 22:45
Ehh magari fosse C++, è solo C aimè.
Infatti sto chiedendo aiuto qui:
[C] Sostituire 1 sottostringa in 1 stringa: ho fatto questa funzione.. (http://www.hwupgrade.it/forum/showthread.php?p=15822544)

jappilas
03-02-2007, 23:00
puoi usare uno scanner tipo Flex (per il C) o JFlex (per il Java)... in 30 secondi scrivi tre regolette che al posto di ogni <br> ti mettono un \n... non è difficile...
non so solo come si interfacci un programma C con uno scanner Flex, ma non penso che sia proibitivo...
spero di non aver aggiunto solo confusione... :stordita:c'è solo il piccolo problema che le tag html mi risultano a coppie di apertura e chiusura e spesso e volentieri, nested... quindi il solo sostituire <....> con equivalenti escape code, temo sconvolgerebbero la formattazione

quello che farei io sarebbe un parser con:
una macchina a stati
uno stack con cui tenere straccia del contenuto di tag aperte in sospeso
una tabella di conversione

Matrixbob
03-02-2007, 23:12
c'è solo il piccolo problema che le tag html mi risultano a coppie di apertura e chiusura e spesso e volentieri, nested... quindi il solo sostituire <....> con equivalenti escape code, temo sconvolgerebbero la formattazione

quello che farei io sarebbe un parser con:
una macchina a stati
uno stack con cui tenere straccia del contenuto di tag aperte in sospeso
una tabella di conversione
Allora il vero problema è questo.
Io ho già fatto 1 parser RSS solo che in barba a tutte le dichiarazioni degli STANDARD il campo che vado a prendere invece di essere 1 CDATA (ovvero solo testo) contiene al suo interno dei piccoli TAG che non vanno lontano dal essere il <br>, <i> o il <b>.

Bene io vorrei che i <br> diventino dei \n e gli altri che scompaiano pure.

AD ESEMPIO:

- <![CDATA[
<i>Nuovo intervento del presidente del Consiglio dopo la tragedia di Catania<br>"Faremo un provvedimento non a breve, che cambi radicalmente le cose"<br></i>
<b> Prodi: "Nessuna indulgenza alla violenza responsabilizzare le società di calcio"</b>
<br>
Il premier ha chiesto ai ministri Melandri e Amato di incontrare lunedì la Federcalcio<br>"Non possiamo mettere continuamente a rischio la vita degli agenti di polizia"
<br><br>
(21:42 03/02/2007)


]]>