BASE DE CONNAISSANCES

Extraction de sous-chaînes délimitées par des caractères depuis des chaînes


Date de publication : 13 Dec 2013
Date de dernière modification : 11 Mar 2024

Question

Comment extraire une chaîne de caractères, délimitée par des caractères de début et de fin spécifiques, à partir d'une chaîne de caractères plus grande.

Environnement

  • Tableau Desktop

Réponse

Les instructions suivantes décrivent comment extraire une sous-chaîne d'une longue chaîne de caractères et peuvent être consultées dans le classeur joint.
  1. Sélectionnez Analyse > Créer un champ calculé.
  2. Dans la boîte de dialogue Champ calculé qui s'ouvre :
    • Nommez le champ calculé, Dans l'exemple de classeur, le champ calculé est appelé Substring.
    • Dans le champ de formule, créez un champ calculé de ce type :
      IF CONTAINS([<Dimension>], '<Identifying Character 1>') THEN
      MID(
          [<Dimension>],
          FIND([<Dimension>],'<Identifying Character 1>') + 1,
          FIND([<Dimension>],'<Identifying Character 2>') - (FIND([<Dimension>],'<Identifying Character 1>') +1)
      )
      END
      
  3. Cliquez sur OK.
  4. Faites glisser Substring vers l'étagère Lignes.

Informations supplémentaires

  • Ce calcul n'inclut pas les caractères identifiants dans la sous-chaîne finale. Pour inclure les caractères identifiants, supprimez « +1 » dans les endroits où il apparaît dans le calcul ci-dessus.
  • La déclaration IF utilisant la condition CONTAINS([<Dimension>], '<Identifying Character 1>') filtre les chaînes qui ne contiennent pas le premier caractère identifiant. Ceci est nécessaire parce que FIND() renvoie 0 si le caractère est introuvable, ce qui est toujours une position de début valide pour MID().
  • Le « caractère identifiant 1 » se trouverait au début de la sous-chaîne souhaitée.
  • Le « caractère identifiant 2 » se trouverait à la fin de la sous-chaîne souhaitée.
  • Lorsque vous tentez de trouver la sous-chaîne entre 2 instances du même caractère (par exemple « chien » dans la chaîne « le *chien* est marron »), utilisez FINDNTH() au lieu de FIND() pour la seconde instance. Elle peut se présenter ainsi :
    • MID(
          [<Dimension>],
          FIND([<Dimension>],'<Identifying Character>') + 1,
          FINDNTH([<Dimension>],'<Identifying Character>', 2) - (FIND([<Dimension>],'<Identifying Character>') +1)
      )
      
Cet article vous a-t-il permis de résoudre le problème ?