Int in AnsiString



  • Ich vermute mal, dass die Felder "patID" und "recID" vom Typ Int sind.
    Eine einfache Zahl kann ein AnsiString durch Zuweisung konvertieren, aber bei einer Mischung von Text und Zahlen streikt der Compiler.



  • PAB schrieb:

    Ich vermute mal, dass die Felder "patID" und "recID" vom Typ Int sind.

    Nein, die beiden sind von Typ char*. Sonst hätte der Compiler bei der anderen Variante ja auch gestreikt. 😉🙄



  • void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      AnsiString test="Paul hat "+ IntToStr(6) +" Äpfel";
    }
    

    läuft bei mir problemlos.
    C++ Builder 5.0 Build 12.34



  • Also ich hab den BCB 6.0. Müsste ja dann auch funktionieren. Hast du's schon mal mit einem Beispiel mit der Größe von meinem probiert?
    Ich könnte mir vorstellen, dass er mit der den Absätzen nicht klar kommt, die ich zur Übersicht gemacht habe. Aber so richtig glauben, tu ich dran. (Ja ich weiss. Man tut nicht "tut" gebrauchen!:D)
    Oder vielleicht ist auch die Anzahl von Operatoren limitiert. Weiss das jemand? 😕



  • Maffe001 schrieb:

    Nein, die beiden sind von Typ char*.

    Das funktioniert nicht. Bei einer "Klartext"-Zeichenkette im Sourcecode kann der Compiler diese implizit nach AnsiString casten und so den '+'-Operator verwenden.
    Mit explizit nicht als String deklarierten Variablen geht das nicht, da musst du dem Compiler ausdrücklich sagen, dass er sie als AnsiString betrachten soll, bzw. sie zuvor umwandeln.

    char *ch;
    //...
    AnsiString test = "bla" + String(ch) + "blub";
    


  • Maffe001 schrieb:

    PAB schrieb:

    Ich vermute mal, dass die Felder "patID" und "recID" vom Typ Int sind.

    Nein, die beiden sind von Typ char*. Sonst hätte der Compiler bei der anderen Variante ja auch gestreikt. 😉🙄

    AnsiString Str;
    int Zahl = 55;
    
    Str=Zahl;  //Str = "55"
    

    Nein, hätte er nicht 😉

    Aber auch ein char* muss umgewandelt werden. Das macht der AnsiString aber nur, wenn auf der rechten Seite keine char* / Text-Mischung steht:

    AnsiString Str;
    char* testvar = "Test";
    
    Str = "Dies ist ein " + AnsiString( testvar ) + "!";
    


  • Für solche Probleme würde ich eher AnsiString::sprintf empfehlen, dies ermöglicht eine etwas flexiblere und komfortablere Verwendung/Formatierung von Strings...

    -junix



  • Ich hab natürlich nicht Deine Dialogboxen, aber folgendes läuft bei mir problemlos:

    {
    
    AnsiString DBStrg;
    AnsiString s = "Blabla";
    int i=123;
    DBStrg = "insert into ainfo values ('";
    DBStrg += s;
    DBStrg += "', '";
    DBStrg += s;
    DBStrg += "', '";
    DBStrg += s;
    DBStrg += "', '', ";
    DBStrg += IntToStr (i);
    DBStrg += ", ";
    DBStrg += IntToStr (i);
    DBStrg += ", ";
    DBStrg += IntToStr (i);
    DBStrg += ", '";
    DBStrg += s;
    DBStrg += "', current_timestamp, 0)";
    
    }
    


  • KaraHead fragt:

    Geht dasnicht auchso:

    AnsiString test="Paul hat "+IntToStr(6)+" Äpfel";
    

    Es geht so:

    AnsiString test = AnsiString("Paul hat ") + IntToStr(6) + " Äpfel";
    


  • Hallo Zusammen,
    in die Reihe gehört sicher noch das guten alte "sprintf"

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    	int			iAepfel;
    	AnsiString	astrHilf;
    
    	iAepfel	= 6;
    	astrHilf.sprintf("Paul hat %2.2d Äpfel", iAepfel);
    }
    

    Evi48



  • Was ist die __einfachste__ Variante einen Integer-Wert in einen AnsiString einzufügen?

    sprintf ist da wohl nicht die richtige Antwort für nen AnsiString... 😞



  • Offnesichtlich hast du dich noch nie wirklich mit dem Methoden des AnsiString auseinandergesetzt, wa? (o; Siehe BCB Hilfe.

    -junix



  • Einfachste Variante, und es geht 100%ig!!!

    AnsiString Str=IntToStr(123);
    

    So einfach kann es sein... Noch einfacher und bei den meisten anderen Datentypem zum Umwandeln in einen String anwendbar:

    char* chr="Zeichenkette";
    int i=123;
    AnsiString Str=AnsiString(i)+AnsiString(Chr); //"123Zeichenkette"
    

    junix schrieb:

    Offnesichtlich hast du dich noch nie wirklich mit dem Methoden des AnsiString auseinandergesetzt, wa?

    Heul doch. 😃

    EDIT: Ich frage mich allerdings, was es da 2 Seiten lang zu diskutieren gibt...



  • Windoof:
    Vielleicht hättest du die zwei Seiten Diskussion (und dabei insbesondere die ersten Beiträge) auch mal lesen sollen. Dann hättest du den Thread (hoffentlich) nicht um einen weiteren Beitrag mit zweifelhaftem Informationgehalt verlängert.



  • Hab ich, hab ich... ich wollte euch nur nochmal näher bringen, welche die einfachsten Funktionen sind. dieses sprintf() ist zwar eine AnsiString-Funktion (oder viel mehr eine Std::string-Funktion), aber nicht unbedingt die einfachste.



  • Windoof schrieb:

    Hab ich, hab ich... ich wollte euch nur nochmal näher bringen, welche die einfachsten Funktionen sind. dieses sprintf() ist zwar eine AnsiString-Funktion (oder viel mehr eine Std::string-Funktion), aber nicht unbedingt die einfachste.

    Sag mal bist du irgendwie vom Ministerium für Desinformation der USA angeheuert oder so? Vielleicht hast du da was falsch verstanden. Die Desinformation betrifft nur Amerikas Politik und Militäraktionen. Dieses kriterium ist hier nicht erfüllt, also hör auf solchen Quark daherzuplaudern. Besser nix als son blödsinn!
    Mir platzt langsam der Kragen. Siehe auch Jansens Posting.

    -junix

    P.S: Bezüglich "Heul doch" war die Aussage eher ein Hinweis, dass sprintf auch als AS Methode existiert.
    Und deine "So einfach kanns gehen" Variante wurde schon lange abgehakt.



  • Es ist doch erstaunlich, was man alles mit einer einfachen Frage bewirken kann. Eine solch rege Beteiligung hätte ich nicht erwartet. 😃

    Ich hab mir jetzt mittlerweile die Variante mit

    int Anzahl = 6;
    
    AnsiString Strg = "Paul hat " + AnsiString (Anzahl) + " Äpfel.";
    

    angewöhnt.

    Danke nochmal. 😃



  • junix schrieb:

    P.S: Bezüglich "Heul doch" war die Aussage eher ein Hinweis, dass sprintf auch als AS Methode existiert.
    Und deine "So einfach kanns gehen" Variante wurde schon lange abgehakt.

    Habe ich etwas anderes gesagt? Nein. Ich sage nur, dass AnsiString mit string verwand ist, und diese Methode, neben den anderen, übernommen hat. Ursprünglich stammt sie von std::string. Was diese Deinformation angeht: Ich habe nichts falsches gesagt, ich habe einige leute hier wiederholt, weil es scheinbar immernoch nicht klar war, welche Methoden die einfachsten sind. Aber jetzt hat sich der ghute Herr für AnsiString() entschieden, was ich auch genommen hätte, denn das kann man für fast jeden Standard-Datentypen nehmen, um ihn zu AnsiString zu konvertieren. Das mit dem "Heul doch" war nicht so persönlich gemeint, musst dich nicht gleich angegriffen fühlen, ich finde nur, dass du dich zu sehr an sprintf() verbissen hast, eben typisch C-Programmierer. War nicht böse gemeint.

    MfG Windoof



  • Hallo

    Sei wann stammt AnsiString von std::string ab ? Die sprintf Methode stammt auch nicht von da, sondern aus seligen C-Zeiten und wurde lediglich adptiert.
    std::string kennt meines Wissens nach sprintf nicht.
    Kann es sein, dass du das mit dem Typ String von Pascal her verwechselst?



  • Auf das Geblubber bezüglich sprintf und std::string etc. geh ich nicht weiter ein. Braunstein hat das ja schon erledigt und er hat recht. Es gibt kein std::string::sprintf.

    Windoof schrieb:

    Ursprünglich stammt sie von std::string. Was diese Deinformation angeht: Ich habe nichts falsches gesagt

    Doch z.B. eben das gelaber wegen std::string. Das ist bereits zuviel desinformation. Plus noch einige weitere falsche Aussagen in anderen Threads. Zuviel Desinformation auf einem Haufen.

    Windoof schrieb:

    ich habe einige leute hier wiederholt, weil es scheinbar immernoch nicht klar war, welche Methoden die einfachsten sind.

    Du hast ihm ja keine gelegenheit gelassen, dem dezenten Hinweis nachzugehen, dass sprintf ebenfalls zu AnsiString gehört?

    Windoof schrieb:

    Aber jetzt hat sich der ghute Herr für AnsiString() entschieden, was ich auch genommen hätte, denn das kann man für fast jeden Standard-Datentypen nehmen, um ihn zu AnsiString zu konvertieren.

    Kann auch grausam ins Auge gehen, aber hey. Was interessiert dich das, ne? (o; Generische Konstruktoren sind nicht ohne. Aber woher sollst du das auch wissen.

    Windoof schrieb:

    Das mit dem "Heul doch" war nicht so persönlich gemeint, musst dich nicht gleich angegriffen fühlen,

    Hab ich mich nicht. Es war nur völlig deplaziert und unnötig.

    Windoof schrieb:

    ich finde nur, dass du dich zu sehr an sprintf() verbissen hast, eben typisch C-Programmierer.

    Der immerwieder auftretende Hinweis auf sprintf hat tiefere Gründe. Hat auch nix mit "typisch C-Programmierer" zu tun. Reines C hab ich schon seit jahren nichtmehr programmiert. Der Hintergrund liegt in der Erfahrung mit grösseren projekten, speziell ab dann, wenn sie multilingual werden sollen. Da werden dir Hardcodierte Strings wie sie hier oft propagiert werden mehr als nur Kopfschmerzen bereiten. Aber wie schon oben. Trotz deinem immer wieder besserwisserischen Auftreten, kannst dus ja nicht besser wissen, da du dich mit diesen Thematiken gar nie in den Wurzeln beschäftigen musstest.
    Tip: Manchmal stösst man in grösseren Projekten mit Komponenten an Grenzen, die sich nur mit etwas mehr programmtechnischem Aufwand lösen lassen.
    Aber klick du weiter ein Bischen deine Komponenten auf das Form und nenn dich Programmierer...

    -junix


Anmelden zum Antworten