frage zu ansistring.printf
-
Ich habe ein problem mit der ptintf funktion im AnsiString
also ich lese aus einer Ini den zu formartierenden String aus
Beispiel : Text=Beispiltext mit einem String %s und einem Integer %ddiesen speichere ich in einem AnsiString
AnsiString IniText = ini->ReadString("text", "text", "");jetzt will ich natürlich noch die werte einsetzen
AnsiString formattext; int zahl=10; AnsiString Message="Nur ein String"; formattext.printf(IniText.c_str(), Message, Zahl);Ich bekomme zwar keinen Fehler aber in formattext bleibt der Text unverändert also genauso wie er in der ini steht.
Kann mir jemand sagen wie ich es hinbekomme die Werte in den Text zu bekommen ?
Der hintergrund warum ich den Text nicht direkt angebe ist das mein Programm Multilingual werden soll und die Ini dann einfach nur übersetz wird und das Programm die texte auslesen kann.
-
String str; str.printf("%s %d", "bla", 55); Caption = str;Funktioniert einwandfrei. Bist du sicher, dass du in IniText tatsächlich die (korrekten) Formatanweisungen stehen?
-
Wenn ich es genauso schreibe wie Du, also die Formatanweisung direkt im Funktionsaufruf
AnsiString str; str.printf("bla %s bla %d", text, integer);Funktioniert es ja auch.
Aber wie oben bereits geschrieben. Lese ich den Formatstring aus meiner Ini aus, und ja ich bin mir sicher die richtigen Formatanweisungen benutzt zu haben. (%s oder %d)
Wenn ich aber den ausgelesenen String bzw die Variable mit dem String als Formatstring angebe
AnsiString str, text; ... text=ini->ReadString("bla", "blabla", ""); //dies ist ein Text mit %s und einer Zahl %d ... str.printf(text.c_str(),nachricht, integer);dann gehts nicht mehr.
Ich muss den String einlesen da er ja wie erwähnt zur lokalisierung dienen soll.
Wäre ja blöde wenn die Anwendung in Englisch ist und der Text in der EMail die ich aus dem Programm öffnen kann in deutsch.
-
String format = "%s %d"; String txt = "bla"; int zahl = 43; String str; str.printf(format.c_str(), txt, zahl); Caption = str;Funktioniert genauso. Ich variiere meine Frage mal: hast du kontrolliert, dass in IniText tatsächlich die (korrekten) Formatanweisungen stehen?
-
Ja ich habe gerade selber nochmal einwenig meine Funktion variiert und mal nicht meinen originalen String verwendet.
Mit ist aufgefallen das ich in richtigen String noch %0A benutze.
%0A bewirkt im email Body einen Zeilenumbruch. Ich denke einfach mal das es damit zusammen hängt da printf diese wohl interpretiert und nicht die richtigen werte eintragen kann.Ich müsste also in der ini ein anderes Zeichen als Zeilenumbruch einfügen. Diese denn ausparsen und anschliessend mit dem Umbruch ersetzen.
Ich nutze für den Mail aufruf : ShellExecute. Mit einem normalen Umbruch \r\n hat es nicht geklappt und %0A steht im Html als umbruch.
Ich muss sowieso nochmal schauen wie ich in der Ini einen Umbruch einfügen kann. Dort speichere ich z.B. auch Fehlermeldungen für die Übersetzungen ab. Allerdings wird ein \r\n in einer ShowMessage dargestellt und nicht als Umbruch interpretiert. Kommt wohl daher das ReadString ein \r\n mit einem Escape versieht und als Darzustellende Zeichen ansieht.
-
Hast du jetzt nur laut gedacht oder wolltest du uns etwas mitteilen oder fragen?
Denn so richtig Sinn macht dein letzter Beitrag zumindest für Aussenstehende nicht.