Reformater le contenu d'un fichier txt en html [RESOLU]

Reformater le contenu d'un fichier txt en html [RESOLU] - C++ - Programmation

Marsh Posté le 22-06-2006 à 17:24:49    

Mon probleme est simple, j'ai un fichier texte de ce style :
 

Citation :

____PDU_Type:_request_(0)
________request:_terminalCapabilitySet_(2)
____________terminalCapabilitySet
________________sequenceNumber:_1
________________protocolIdentifier:_0.0.8.245.0.6_(itu-t(0)_recommendation(0)_h(8)_h245(245)_version(0)_6)
________________multiplexCapability:_h223Capability_(2)
____________________h223Capability
________________________...._0..._transportWithI-frames:_False
________________________...._.0.._videoWithAL1:_False
________________________...._..1._videoWithAL2:_True
________________________...._...1_videoWithAL3:_True
________________________0..._...._audioWithAL1:_False
________________________.1.._...._audioWithAL2:_True
________________________..0._...._audioWithAL3:_False
________________________...0_...._dataWithAL1:_False
________________________...._0..._dataWithAL2:_False
________________________...._.0.._dataWithAL3:_False
________________________maximumAl2SDUSize:_256
________________________maximumAl3SDUSize:_1024
________________________maximumDelayJitter:_200
________________________h223MultiplexTableCapability:_basic_(0)
____________________________basic:_NULL


 
Nota : j'ai volontairement remplacé les espaces par des '_' car sinon on ne voyait pas la "structure" du texte.
 
et je veux le faire passer dans une frame HTML avec la même cohérence (espaces devant, retour-chariot en fin de ligne).
 
Pour les retours-chariot, il faut simplement rajouter la balise <br> en fin de ligne.
 
Pour les espaces devant, par contre, j'en ai aucune idée ! il semblerait que le compilo les efface directement en effectuant le getline :heink:  
 
[U]Mon idée pour l'instant pour le rajout du retour chariot :[/U]
 

Code :
  1. bouclage{
  2. std::ifstream myfile( "test.txt" );
  3. std::getline( myfile, ligne );
  4. ligne += "<br>";
  5. }


 
 
Mes questions sont donc :  
 
- Comment reconnaitre une fin de ligne ?
- Faut il se servir de getline, puis rajouter <br> a la fin et le tour est joué ?
- Comment garder les espaces en début de ligne ?
- Comment boucler l'opération du dessus ? (while(!eof()) marcherait-il dans ce cas de figure ?)

Message cité 1 fois
Message édité par Thordax le 23-06-2006 à 13:56:29

---------------
Atari 520 ST 256 Ko
Reply

Marsh Posté le 22-06-2006 à 17:24:49   

Reply

Marsh Posté le 22-06-2006 à 18:13:39    

Pour garder les espaces, mettre des non-breakable spaces avec le code html : &nbsp;

Reply

Marsh Posté le 22-06-2006 à 18:26:46    

vous vous compliquez inutilement, la balise <pre> est la pour ca

Reply

Marsh Posté le 22-06-2006 à 19:58:49    

Thordax a écrit :

- Comment reconnaitre une fin de ligne ?


Une ligne se termine toujours par le caractère '\n'. Mais t'as pas vraiment besoin de savoir où est la fin si t'utilises "getline" ou "fgets" car ces fonctions s'arrêtent systématiquement à chaque fin de ligne. Donc getline peut être une bonne solution
 

Thordax a écrit :

- Comment boucler l'opération du dessus ? (while(!eof()) marcherait-il dans ce cas de figure ?)


NON !!! On n'utilise jamais "feof" (nom trompeur) pour détecter une fin de fichier.
Le principe général d'un traitement de fichier est

while (fonction_de_lecture(...) != valeur_spéciale_quand_je_peux_plus_lire)


La valeur spéciale étant dépendante de la fonction que t'utilises (=> man fonction pour plus d'infos)
Exemples

int carac;
FILE *fichier;
while ((carac=fgetc(fichier)) != EOF)
{...}


char buffer[1024 + 1];
FILE *fichier;
while (fgets(buffer, 1024 + 1, fichier)) != NULL)
{...}


char *buffer=NULL;
int taille;
FILE *fichier;
while (getline(&buffer, &taille, fichier)) != -1)
{...}
if (buffer)
    free(buffer);


 
feof sert, une fois que tu peux plus lire, à t'indiquer si tu peux plus lire à cause de la "fin de fichier" ou à cause d'une autre raison (par exemple "disque crashé", "fichier supprimé entre temps", etc...)


Message édité par Sve@r le 22-06-2006 à 20:01:59

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 22-06-2006 à 20:02:59    

c'est la cat C++ ici, pas C

Reply

Marsh Posté le 22-06-2006 à 20:05:08    

skelter a écrit :

c'est la cat C++ ici, pas C


Le principe exposé est aussi valable en C++...


Message édité par Sve@r le 22-06-2006 à 20:05:41

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 22-06-2006 à 20:11:39    

sans doute mais par respect pour les personne qui connaisse le C++ mais pas le C ca aurait été bien de ne pas expliqué un truc avec du C

Reply

Marsh Posté le 22-06-2006 à 23:15:14    

skelter a écrit :

sans doute mais par respect pour les personne qui connaisse le C++ mais pas le C ca aurait été bien de ne pas expliqué un truc avec du C


Mais tout ce que j'ai écrit est compilable par du C++ (même si ça ne fait appel à aucune des notions qu'a apporté le C++ au C). Peut-être le "free" est maladroit quand on ne connait que "new" et "delete[]" mais on est bien obligé de l'utiliser si on fait appel à "getline"...


Message édité par Sve@r le 22-06-2006 à 23:16:47

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 22-06-2006 à 23:17:19    

On s'en branle, la question n'est pas du C++ c'est de l'HTML ...
et effectivement la solution la plus simple est la balise <pre> autour de ce texte.


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 23-06-2006 à 13:55:52    

Ok merci, resolu.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed