Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    strstr () in a while-loop

    SDK Help
    0
    5
    620
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      Helper
      last edited by

      THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

      On 08/04/2003 at 07:11, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   7.303 
      Platform:   Windows  ;   
      Language(s) :   C.O.F.F.E.E  ;

      ---------
      Hi !
      I want to parse a string and therefore seek any ">" in it. But unfortunately, these C.O.F.F.E.E. lines don't work:
      var MyString = "<tag>text</tag>";
      var pos = 0;
      var chpos = 0;
      while (strchr (MyString,"<[0]",pos) != -1){
      chpos = strchr (MyString,"<[0]",pos) ;
      println (tostring(chpos));
      pos = chpos;
      }
      The while loop turns into an infinite loop and the value of pos/chpos remains at 0, which is the first position of "<" in the given string.
      I guess, C.O.F.F.E.E. forgets to update the pos/chpos-variables and this might be caused by using referenced values instead of copies. 
      Does anyone have a clue to solve this ?
      thanx

      1 Reply Last reply Reply Quote 0
      • H
        Helper
        last edited by

        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

        On 08/04/2003 at 10:08, xxxxxxxx wrote:

        Why are you searching for "<[0]"?
        It will never find that string in the MyString variable.
        Shouldn't you just be searching for "<"?
        Or, at the very least "<"[0], if this is, at least, valid.
        Also, you said you were looking out for ">" but you never search for it.

        Rui Batista

        1 Reply Last reply Reply Quote 0
        • H
          Helper
          last edited by

          THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

          On 08/04/2003 at 11:33, xxxxxxxx wrote:

          Sorry, i had to write the code above ex cognito, so it was a bit misleading...
          But my problem remains... here is the corrected code, which still causes an infinite loop instead of printing all occurences of "<"...
          Btw, you have to use "<"[0] to search for "<" with strchr (), because it expects an unicode char... I had the same problem using strstr () instead.....

          var MyString = "<tag>text</tag>";
          var pos = 0;
          var chpos = 0;

          while (strchr (MyString,"<"[0], pos) != -1){
          chpos = strchr (MyString,"<"[0], pos) ;
          println (tostring(chpos));
          pos = chpos;
          }
          I appreciate your help a LOT !
          thanx....

          1 Reply Last reply Reply Quote 0
          • H
            Helper
            last edited by

            THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

            On 08/04/2003 at 11:47, xxxxxxxx wrote:

            Just use this:

              
            while (strchr (MyString,"<"[0], pos) != -1){   
            chpos = strchr (MyString,"<"[0], pos) ;   
            println (chpos);   
            pos = chpos+1;   
            }  
            

            You were starting the search always from the same place, hence the infinite loop. With pos=chpos+1; you will start on the next character.
            Also, you don't need the tostring to print chpos.
            Was this what you needed?

            Rui Batista

            1 Reply Last reply Reply Quote 0
            • H
              Helper
              last edited by

              THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

              On 08/04/2003 at 13:13, xxxxxxxx wrote:

              Thanx a lot Rui...
              That was really a stupid mistake, but after having written some dozen lines of code, one can hardly free his mind to eliminate such errors...

              1 Reply Last reply Reply Quote 0
              • First post
                Last post