cout versus printf - C++ - Programmation
Marsh Posté le 17-11-2003 à 16:08:33
Code :
|
Marsh Posté le 17-11-2003 à 16:16:30
Harkonnen a écrit :
|
Emmerdant si valeur doit être au milieu de la phrase...
Marsh Posté le 17-11-2003 à 16:20:27
comme nraynaud l'a dit sur blabla@prog :
nraynaud a écrit : moi j'ai compris, pour faire de l'internationalisation, il a chaque chaine de format stockée dans plusieurs langues, il sélectionne dynamiquement la chaine de format : |
Marsh Posté le 17-11-2003 à 16:26:36
Perso je pense que je ferais comme ça:
1) je stockerais mes chaines dans toutes les langues avec un truc du style "xxxxx" pour reconnaitre l'emplacement de la valeur à insérer.
2) Je récupèrerais la chaine correspondant à la bonne langue dans une string temporaire.
3) Je ferais un replace de mon "xxxxx" par la valeur voulue dans ma string.
4) cout<<string_temporaire;
Marsh Posté le 17-11-2003 à 16:28:47
Et quand t'as deux valeurs ?
Ils ont quand même prévu un équivalent de printf qui retourne un std::string, non ? ou bien ils n'ont pas le sens pratique les gens qui font du C++ ? (non je ne trolle pas, mais bon en Delphi & C++Builder y a la fonction Format qui est bien pratique )
Marsh Posté le 17-11-2003 à 16:30:16
ReplyMarsh Posté le 17-11-2003 à 16:30:17
Code :
|
quoi?
bon Ok je sors...
EDIT: non seulement réponse à 0.3? et en plus grilled...
Marsh Posté le 17-11-2003 à 16:31:08
HelloWorld a écrit : Autant utiliser sprintf... |
faut une variable temporaire
Marsh Posté le 17-11-2003 à 16:33:14
Oups... oui, j'ai oublie de donner un exemple...
C'etait un peu comme antp l'a repris de nraynaud mais bien evidemment avec le %d en plein ;ilieu de la phrase :
const char[] fr = "le compte est de %d voitures";
const char[] en = "the count is %d cars";
...
skeye -> je pensais utiliser cette methode mais cela contraint d'utiliser un string temporaire alors que dans ce cas le printf est plus simple a utiliser.
Marsh Posté le 17-11-2003 à 16:34:02
antp a écrit : Et quand t'as deux valeurs ? |
ah oui tiens ma soluce est très laide (mais moins que celle de Harko...).
Je crois pas avoir vu d'équivalent à Format pour les string, qui existe dans les MFC par contre...
Marsh Posté le 17-11-2003 à 16:36:20
skeye a écrit : |
oui mais moi j'ai pas compris dés le début ce qu'il voulait
Marsh Posté le 17-11-2003 à 16:40:35
personne qui sait ? c'est grave quand même.
ça marche comment en java ? ça doit être une solution du même style.
Marsh Posté le 17-11-2003 à 16:42:46
Harkonnen a écrit : |
c'est sur que les trucs propres et dans la bonne langue ; en assembleur c'est un peu une hérésie.
Marsh Posté le 17-11-2003 à 16:43:21
nraynaud a écrit : personne qui sait ? c'est grave quand même. |
clair... le genre de question à la con qui plante tout le monde
qui se dévoue pour envoyer un MP à Taz ?
Marsh Posté le 17-11-2003 à 16:43:47
nraynaud a écrit : c'est sur que les trucs propres et dans la bonne langue ; en assembleur c'est un peu une hérésie. |
Marsh Posté le 17-11-2003 à 16:51:45
BB138 >> regarde ici si tu peux trouver un truc qui t'aide...
http://groups.google.com/groups?q= [...] art=0&sa=N
Marsh Posté le 17-11-2003 à 17:08:45
A priori dans ce que j'ai pu lire sur le lien indique, il n'y a pas grand chose pour remplacer le printf dans quelques situations...
Marsh Posté le 17-11-2003 à 17:16:44
Taz a écrit : oui ? |
\o/
t'as une idée pour ce topic tellement idiot que personne n'est capable de le résoudre ?
Marsh Posté le 17-11-2003 à 17:18:01
Disons le remplacer par quelque chose d'aussi simple.
Je garderai donc mon printf...
Marsh Posté le 17-11-2003 à 17:18:40
je capte pas trop, vous voulez quoi en fait ? un printf-like vraiment C++ ?
Marsh Posté le 17-11-2003 à 17:22:58
1) utilise des trucs genre gettext pour les traduction
2) j'ai toujours pas compris ton truc. j'ai 2 solutions en tête mais je sais pas si ça va : boost::format ou alors tout simplement des modificateurs de flux
Marsh Posté le 17-11-2003 à 17:28:20
boost::format ça a l'air d'être ce qu'il cherche :
http://www.boost.org/libs/format/index.htm
Marsh Posté le 17-11-2003 à 17:30:02
boost::format ?? oups... je ne connais pas...
sinon ok pour les modificateurs de flux (si tu as quelques precisions la decu)
Pour gettext, j'approfondirai des que j'aurai le temps.
Marsh Posté le 17-11-2003 à 17:32:36
ben pour les modificateurs, je parle de truc genre endl, ends, hex, boolapha, y a moyen de fabriquer ses propres trucs. et y a encore plein d'autres trucs faisables, genre
cout << Log() << "des messages";
qui te permettrait un affichage du genre
"10h15 des messages fin de log"
Marsh Posté le 17-11-2003 à 17:34:38
Merci, je crois que boost::format va vraiment faire mon bonheur !!!
Biensur ce n'est pas aussi simple qu'un bon printf mais au premier abord, j'aime bien.
Marsh Posté le 17-11-2003 à 17:36:07
maintenant qui est capable de dire pourquoi boost::format (ou tout autre bordel C++) est bien meilleur que n'importe quel printf ?
Marsh Posté le 17-11-2003 à 17:39:23
Citation : faut une variable temporaire |
Ok ok. On essai de faire un truc C en C++. Faut chercher comment faire l'équivalent selon une approche C++, et pas strictement la même chose.
en C:
Code :
|
en C++
Code :
|
Un truc du genre.
Le static marque juste l'idée que chaque fonction se charge des chaînes. Par ex, en Win32, cela revient à récupérer la string depuis une ressource à partir d'un identifiant donné.
C'est lourd à écrire, mais ça me parraît tout de même meilleur. Tu peux au passage gérer la conversion (manétaire, métrique, ...), et c'est plus facile à utiliser que d'aller trouver la bonne chaine qui faut pour le printf et de pas se gourrer dans les arguments attendus. Ca m'amène à une remarque sur pourquoi je préfère cout à printf : si demain, tu veux afficher un float à la place de ton int, faut reprendre XXX lignes de code. Pas avec le cout. Même avec un printf, ça démontre l'utilité d'une fonction spécialisée (ou il suffirait de modifier une seule ligne de printf + le paramètre attendu, ou alors surcharge).
Marsh Posté le 17-11-2003 à 17:39:46
Taz a écrit : maintenant qui est capable de dire pourquoi boost::format (ou tout autre bordel C++) est bien meilleur que n'importe quel printf ? |
ça compile plus lentement ?
le système de types statiques tout transpercé donne l'illusion aux naïfs que c'est sécure ?
ça permet de rajouter du bordel dans les includes ?
Marsh Posté le 17-11-2003 à 17:42:09
nraynaud a écrit : ça compile plus lentement ? |
très drôle. si je prends l'engagement de plus allez faire des remarques sur Java, tu retournes à ton caml ?
surtout vu la tronche de ton code ...
sinon, je fais des traductions et conseille l'emploi de gettext. ta méthode est à proscrire. surtout que tu ne connais meme pas les bases de C++ (ou C) pour localiser un minimum
Marsh Posté le 17-11-2003 à 17:42:59
HelloWorld a écrit : float à la place de ton int, faut reprendre XXX lignes de code. |
On a inventé la liaison retardée longtemps avant le bordel de la surcharge tu sais ?
Marsh Posté le 17-11-2003 à 17:46:30
Citation : On a inventé la liaison retardée longtemps avant le bordel de la surcharge tu sais ? |
T'es assez spécialiste des langages (surtout des + farfelus *), mais pas moi. La liaison retardée, je sais vaguement ce que c'est... en VB. Ca ressemble à quoi en C?
(*) Humour hein!
Marsh Posté le 17-11-2003 à 17:47:52
Taz a écrit : très drôle. si je prends l'engagement de plus allez faire des remarques sur Java, tu retournes à ton caml ? |
1) non c'est pas drole, ça ne fait plus rire. Non, je me barre pas de ce que tu sembles considérer comme ta catégorie. Et non, je ne t'interdit pas d'aller dans les catégories que tu veux.
2) mon code il t'emmerde, moi avec lui.
3) c'est pas ma méthode, c'est l'interpretation que j'avais faite du message initial. Et non, je ne connais pas les bases de la localisation, d'où ma présence ici.
Marsh Posté le 17-11-2003 à 17:49:28
HelloWorld a écrit :
|
En C tu n'as même pas envie de savoir, c'est pire que Beyrouth. En C++ c'est toutes les histoires de "virtual".
Marsh Posté le 17-11-2003 à 17:51:54
Taz a écrit : c'est ma cat |
spa si simple ! Tu l'avais laissée à l'abandon, il va falloir la reconquérir maintenant.
nraynaud > Tchetchenie
Marsh Posté le 17-11-2003 à 15:48:54
Juste une petite question:
lorsque l'on a des tableaux de texte (un tableau par message et une ligne de chacun d'entre eux represente une langue) et que l'on souhaite afficher un message contenant un nombre dans une langue, on peut faire:
mais comment fait-on simplement avec cout ?