C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

printf <-> streams

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Babak Pourat
Guest





PostPosted: Fri Sep 03, 2004 11:48 am    Post subject: printf <-> streams Reply with quote



Hallo,
Ich habe folgendes Problem:

in dem Projekt das ich übernommen habe liegen die Fehlermeldungen als
char-Felder inclusive Formatierungszeichen für Printf in verschiedenen
Sprachen vor( Sie kommen eigentlich aus einer Datenbank ).

Sinngemäss:

#include <cstdio>

const char* GetFileErrorStr(char c){
switch(c){
case 'e':
return "File %s not found.n";
case 'd':
return "Datei %s nicht gefunden.n";
}
}

int main(){
std::printf(GetFileErrorStr('e'), "test.tst");
std::printf(GetFileErrorStr('d'), "test.tst");
return 0;
}

Wenn ich eine ähnliches mit iostreams implementiern will, muss ich die
Fehlermeldungen zerhacken oder nach irgendwelchen Sonderzeichen parsen wo
ich zusätzliche Werte einfüge oder ..., auf jeden Fall sehe ich ad hoc keine
so elegante Lösung wie mit printf und den Formatstrings.

Wie löst ihr solche Probleme?

Danke

Babak

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Michael Piefel
Guest





PostPosted: Fri Sep 03, 2004 12:31 pm    Post subject: Re: printf <-> streams Reply with quote



Am Fri, 03 Sep 2004 13:48:49 +0200 schrieb Babak Pourat:
Quote:
Wenn ich eine ähnliches mit iostreams implementiern will, muss ich die
Fehlermeldungen zerhacken oder nach irgendwelchen Sonderzeichen parsen wo
ich zusätzliche Werte einfüge oder ..., auf jeden Fall sehe ich ad hoc
keine so elegante Lösung wie mit printf und den Formatstrings.

a) Es spricht nicht so viel gegen printf(), wie immer wieder gerne
behauptet wird. Man sollte nicht nur aus Prinzip umstellen.

b) Für C++ gibt’s natürlich boost::format, das das gewünschte leistet.

Ciao,
Micha

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Falk Tannhäuser
Guest





PostPosted: Fri Sep 03, 2004 12:53 pm    Post subject: Re: printf <-> streams Reply with quote



Babak Pourat wrote:
Quote:

#include <cstdio

const char* GetFileErrorStr(char c){
switch(c){
case 'e':
return "File %s not found.n";
case 'd':
return "Datei %s nicht gefunden.n";
}
}

int main(){
std::printf(GetFileErrorStr('e'), "test.tst");
std::printf(GetFileErrorStr('d'), "test.tst");
return 0;
}

Wenn ich eine ähnliches mit iostreams implementiern will, muss ich die
Fehlermeldungen zerhacken oder nach irgendwelchen Sonderzeichen parsen wo
ich zusätzliche Werte einfüge oder ..., auf jeden Fall sehe ich ad hoc keine
so elegante Lösung wie mit printf und den Formatstrings.

Sieht aus, als ob boost::format für dich gemacht wäre! Das scheint mir die Vorteile von printf mit denen der
iostreams (Erweiterbarkeit auf benutzerdefinierte Typen, Typsicherheit) zu
vereinen; und es lässt sich meines Wissens sogar der Fall behandeln,
dass der Satzbau und damit möglicherweise die Reihenfolge der auszugebenden
Felder von Sprache zu Sprache variiert.
Disclaimer: Habe noch nicht die Gelegenheit gehabt, das ganze selbst zu
benutzen und zu testen.

MfG
Falk

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Thu Sep 09, 2004 9:49 am    Post subject: Re: printf <-> streams Reply with quote

"Babak Pourat" <pourat (AT) autronic (DOT) melchers.de> wrote


Quote:
in dem Projekt das ich übernommen habe liegen die Fehlermeldungen als
char-Felder inclusive Formatierungszeichen für Printf in verschiedenen
Sprachen vor( Sie kommen eigentlich aus einer Datenbank ).

Das ist ehe gewöhnlich. In Open Systems ist printf sogar erweitert,
damit die Parameter nicht unbedingt in derselben Reihenfolge vorkommen
müssen.

Quote:
Sinngemäss:

#include
const char* GetFileErrorStr(char c){
switch(c){
case 'e':
return "File %s not found.n";
case 'd':
return "Datei %s nicht gefunden.n";
}
}

int main(){
std::printf(GetFileErrorStr('e'), "test.tst");
std::printf(GetFileErrorStr('d'), "test.tst");
return 0;
}

Wenn ich eine ähnliches mit iostreams implementiern will, muss ich die
Fehlermeldungen zerhacken oder nach irgendwelchen Sonderzeichen parsen
wo ich zusätzliche Werte einfüge oder ..., auf jeden Fall sehe ich ad
hoc keine so elegante Lösung wie mit printf und den Formatstrings.

In der Tat. Es gibt aber mindestens zwei Implementierungen, die schon
zur Verfügung stehen:

- Bei mir gibt es GB_Format, der 100% Kompatable mit dem printf von
Open Systems ist. Wie printf unterstutzt er aber kein wchar_t.
Dagegen ist er auch kein Template, und lässt sich mit fast allen
gängigen Compiler compilieren.

- Bei Boost gibt es auch eine Klasse format, die in vielen Hinweisen
meine ähnlich ist. Es gibt zwar einige Formattierungsoptionen, die
sie nicht unterstützt, aber die sind auch nicht unbedingt so
interessant -- alles wichtiges ist wohl da. Leiter überlädt sie den
Operator % in einer Art, die die Lesbarkeit des Codes mindert. Aber
der bedeuteste Unterschied ist, dass sie ein Template ist, der auch
mit wchar_t funktionniert. Und aber deshalb sich nicht mit z.B. Sun
CC (dem von mir meist benutzten Compiler) compilieren lässt.

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.