Convertion String char* [Résolu]

Messages postés
30
Date d'inscription
dimanche 22 mai 2005
Statut
Membre
Dernière intervention
19 mars 2009
- - Dernière réponse : CerberusAbaka
Messages postés
30
Date d'inscription
dimanche 22 mai 2005
Statut
Membre
Dernière intervention
19 mars 2009
- 21 mai 2008 à 08:30
Bonjour;

   Je développe avec Dev C++ un petit exécutable qui converti des PostScript couleur en noir et blanc, tout marche pas trop mal mais j'ait un petit problème à la fin... sic

Voila une foi les couleurs changées dans le fichier d'origine, il faut recréer un fichier avec toute les lignes du premier, le problème est que certaines lignes ont cette syntaxe :

%!PS-Adobe-3.0
ou encore :<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>


%%Pages: (atend)

Donc en fait mes lignes modifiées sont stocké dans un std::string, puis j'utilise :

cout << line << endl;                           
fprintf(fp,line.c_str()); 
fprintf (fp,"\n");

Où fp est mon fichier de sortie, line une ligne du fichier, le cout donne :
%%Pages: 1

mais dans le fichier de sortie je me retrouve avec
%Pages: 1

Voila, en fait il me "mange" le caractère %.... Alors si quelqu'un à une solution...



 




Merci d’avance 



 
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
30
Date d'inscription
dimanche 22 mai 2005
Statut
Membre
Dernière intervention
19 mars 2009
3
Merci
Bon, j'ait trouver en fait ;)


 


si sa peut servir à quelqu'un il faut utiliser un ofstream.


 


Je vait poster la source de la conversion des Ps ;)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 132 internautes nous ont dit merci ce mois-ci

Commenter la réponse de CerberusAbaka
Messages postés
78
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
23 avril 2010
0
Merci
Bon tu as déjà accepté ta propre réponse mais je vais quand même éclairer ta lanterne concernant cette perte de % dans le fprintf.

N'oublie pas que le fprintf est un printf fait directement dans un fichier (ou plutot printf est l'equivalent d'un fprintf avec comme fichier la sortie stdout). La chaine qu'utilise donc fprintf utilise les formats que tout programmeur connait %d %f %l etc etc.
Et bien sur la question est comment représenter un % en printf alors que ca sert à indiquer le forat ?

Réponse simple, tu écris %% dans ta chaine de caractere et ca affichera un %

Donc c'est là que je rejoins ton probleme d'origine.
Les chaines que utu récupéréias étaient de la forme "%%Pages: (atend)" par exemple.

Donc une fois la converszion faite avec le c_str(), la chaine était passée dans le fprintf qui interprétae ces "%%" come un seul et unique "%" (comme expliqué plus haut).

Voila l'origine de ton probleme.
Maintenant que tu n'utilises plus fprintf pas de soucis mais si tu avais continué à l'utiliser il aurait fallu que tu parcoures une premiere fois ta chaine pour remplacer chaque "%" trouvé par "%%" et hop le tour était joué.

J'espère avoir été clair ^^

Bonne journée

Mess with the best, die like the rest
Commenter la réponse de theneoiceman
Messages postés
18
Date d'inscription
dimanche 19 septembre 2004
Statut
Membre
Dernière intervention
19 mars 2009
0
Merci
Le plus simple si tu veux toujours utiliser fprintf est de préciser le format (2nd argument) et passer ton buffer comme paramettre :

fprintf(fp, "%s", line.c_str()); 

Ainsi pas besoin de modifier line et pas de risque liés à l'utilisation de fprintf

++
Commenter la réponse de guillaume_00
Messages postés
30
Date d'inscription
dimanche 22 mai 2005
Statut
Membre
Dernière intervention
19 mars 2009
0
Merci
Merci pour vos réponses et explication, désolé pour le temps de réponse lol

Je vais poster ma source, comme prévu, mais je passe maintenant par du VB.NET, plus simple à utiliser. Je me sers de ce petit EXE pour de la conversion de plan CAO en PDF, on les enregistre en .ps, convertis en noir et blanc, puis en PDF. La couleur sur les plan sa peut porter à confusion parfois....


http://www.vbfrance.com/codes/CONVERTION-PS-NOIR-BLANC_46720.aspx

Merci ;)
Commenter la réponse de CerberusAbaka