How to format a string



  • On 01/07/2013 at 10:34, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   R13-R14 
    Platform:   Windows  ;   
    Language(s) :     C++  ;

    ---------
    Writing C++ plugins for C4D, how do you format a string?
    I want to do this:

    "The file %1 exists, do you want to overwrite?", dialogFileName.GetFileString()
    

    But haven't found a way to do it in C++.



  • On 01/07/2013 at 10:48, xxxxxxxx wrote:

    Take a look at MessageDialog() - there are several overrides. But to do this you will need to use a resource string (good practice anyway). Of course, it's only good for short messages, but that's often all that's needed.



  • On 01/07/2013 at 10:52, xxxxxxxx wrote:

    c4d offers string format functionality for loading strings from the resource with geloadstring.



  • On 01/07/2013 at 10:54, xxxxxxxx wrote:

    There are a couple of ways to do this.

    Here is the first one.

      
      String = "The file " + dialogFileName.GetFileString() + " exists, do you want to overwrite?";  
    

    Another way is to use something like  snprintf() but it is not a C4D way to do this :)

      
        
        
          char buffer [128];
          int cx = snprintf ( buffer, 128, "The file %1 exists, do you want to overwrite?", str );
    
      
      //TODO:  Add better way to do this...  
    


  • On 01/07/2013 at 11:33, xxxxxxxx wrote:

    Originally posted by xxxxxxxx

    c4d offers string format functionality for loading strings from the resource with geloadstring.

    Bingo!
    That's the one for me, thanks.

    Originally posted by xxxxxxxx

    Take a look at MessageDialog() - there are several overrides. But to do this you will need to use a resource string (good practice anyway).

    Yes, I always use resource strings. 
    Great tip! Just using the ID - fantastic.



  • On 02/07/2013 at 11:53, xxxxxxxx wrote:

    Here's a quick-n-dirty "printf()" type function - just make sure that you don't overflow the buffer :)...

      
    //-------------------------------------------------------------  
    // GePrintF()  
    //-------------------------------------------------------------  
    void GePrintF(const CHAR *format,...)  
    {  
     va_list arp;  
     CHAR buf[1024];  
      
     va_start(arp,format);  
     vsprintf(buf,format,arp);  
     GePrint(buf);  
     va_end(arp);  
    }  
    

Log in to reply