Découpage chaîne de caractères en fonction d'un séparateur

SUGGESTED

Bonjour,

Est-ce qu'il existe une fonction permettant de découper une chaine de caractère suivant un séparateur donné(";" par exemple) et range les portions dans un tableau de chaine de caractères ?

En gros l'équivalent d'un split() qui existe dans d'autres langages.

Merci.

Top Replies

  • Bonjour

    C'est cadeau c'est mercredi

    Local Char TEST_STRING (30), TEST_CHARACTER (30), STRINGS_ARRAY(30)(10), EXTRACTED_STRING(30)
    Local Integer POSITION_IN_STRING, COUNTER, CHARACTER_FOUND_AT…

  • 0
    SUGGESTED

    Bonjour

    C'est cadeau c'est mercredi Slight smile

    Local Char TEST_STRING (30), TEST_CHARACTER (30), STRINGS_ARRAY(30)(10), EXTRACTED_STRING(30)
    Local Integer POSITION_IN_STRING, COUNTER, CHARACTER_FOUND_AT
    
    [L]TEST_STRING="chaine1;chaine2;chaine3"
    [L]TEST_CHARACTER=";"
    
    Call SUBSTRING(TEST_STRING, TEST_CHARACTER, STRINGS_ARRAY)
    If !GSERVEUR : Call OUVRE_TRACE("Test Substring") From LECFIC : Endif
    While [L]STRINGS_ARRAY([L]COUNTER)<>""
      Call ECR_TRACE ([L]STRINGS_ARRAY([L]COUNTER),0) From GESECRAN
      COUNTER+=1
    Wend
    
    If !GSERVEUR : Call FERME_TRACE() From LECFIC : Endif
    Call LEC_TRACE From LECFIC
    
    End
    
    #**
    #* Extract substrings to an array of strings based on a character
    #*
    #* @param I_STRING Char String to parse
    #* @param I_CHARACTER Char Separator
    #* @param O_ARRAY_OF_STRINGS Char Output of extracted strings
    #*!
    Subprog SUBSTRING(I_STRING, I_CHARACTER, O_ARRAY_OF_STRINGS)
    Value Char I_STRING()
    Const Char I_CHARACTER ()
    Variable Char O_ARRAY_OF_STRINGS()()
    
    Local Integer POSITION_IN_STRING, COUNTER, CHARACTER_FOUND_AT
    
    While instr(0, I_STRING, I_CHARACTER)<>0
      [L]CHARACTER_FOUND_AT=instr(0, I_STRING, I_CHARACTER)
      O_ARRAY_OF_STRINGS([L]COUNTER)=left$(I_STRING,[L]CHARACTER_FOUND_AT-1)
    
      [L]POSITION_IN_STRING=[L]CHARACTER_FOUND_AT+1
    
      I_STRING=right$(I_STRING,[L]POSITION_IN_STRING)
      COUNTER+=1
    Wend
    
    If I_STRING<>""
      O_ARRAY_OF_STRINGS([L]COUNTER)=I_STRING
    Endif
    
    End


    Si vous êtes partenaires, vous retrouverez cette fonction dans les templates Eclipse que nous fournissons sur le wiki du centre d'excellence Sage X3.
    https://www.sagecity.com/us/sage_x3/sage-x3-global/w/ccoe-tools/3012/safe-x3-studio-eclipse---code-templates-and-snippets


    Il faut s'enregistrer sur le global Hub en premier,

    https://www.sagecity.com/us/sage_x3/sage-x3-global/

    puis s'enregistrer sur le wiki du COEX. Ces espaces sont tous les deux réservés aux partenaires. L'acceptation se fait manuellement de notre côté, donc cela peut prendre un peu de temps.

  • 0 in reply to Bruno Gonzalez

    Merci pour votre réponse  , cela confirme bien que de base cette fonction n'existe pas.

  • +1 in reply to Delph
    verified answer

    Effectivement, la fonction split n'a pas d'équivalent en L4G, il faut la faire soit-même.