Utilisation de la méthode "Split"

Image illustrant : Utilisation de la méthode Split
  1. Accueil
  2. Web
  3. F.A.Q
  4. Utilisation de la méthode "Split"

cet article manque des description

Comme vous le savez peut-être déjà, les chaînes en Ruby sont ce qu'on appelle des objets de première classe qui utilisent un certain nombre de méthodes pour les requêtes et la manipulation.

L'une des actions de manipulation de chaîne les plus élémentaires consiste à diviser une chaîne en plusieurs sous-chaînes. Cela serait fait, par exemple, si vous avez une chaîne comme "foo, bar, baz" et que vous voulez les trois chaînes "foo", "bar" et "baz" . La méthode split de la classe String peut accomplir cela pour vous.

L'utilisation de base de "Split"

L'utilisation la plus basique de la méthode split consiste à diviser une chaîne en fonction d'un seul caractère ou d'une séquence statique de caractères. Si le premier argument de split est une chaîne, les caractères de cette chaîne sont utilisés comme délimiteur de séparateur de chaîne, tandis que dans les données délimitées par des virgules, la virgule est utilisée pour séparer les données.

#!/usr/bin/env ruby
str = "foo,bar,baz"
met str.split(",")
$ ./1.rb
foo
bar
baz

Ajoutez de la flexibilité avec des expressions régulières

Il existe des moyens plus simples de délimiter la chaîne . L'utilisation d'une expression régulière comme délimiteur rend la méthode split beaucoup plus flexible.

Encore une fois, prenons par exemple la chaîne "foo, bar,baz" . Il y a un espace après la première virgule, mais pas après la seconde. Si la chaîne "," est utilisée comme délimiteur, un espace existera toujours au début de la chaîne "bar". Si la chaîne ", " est utilisée (avec un espace après la virgule), elle ne correspondra qu'à la première virgule car la deuxième virgule n'a pas d'espace après elle. C'est très limitatif.

La solution à ce problème consiste à utiliser une expression régulière comme argument délimiteur au lieu d'une chaîne. Les expressions régulières vous permettent de faire correspondre non seulement des séquences statiques de caractères, mais également des nombres indéterminés de caractères et des caractères facultatifs.

Écrire des expressions régulières

Lorsque vous écrivez une expression régulière pour votre délimiteur, la première étape consiste à décrire en mots ce qu'est le délimiteur. Dans ce cas, l'expression "une virgule qui pourrait être suivie d'un ou plusieurs espaces" est raisonnable.

Il y a deux éléments dans cette regex : la virgule et les espaces facultatifs. Les espaces utiliseront le quantificateur * (étoile ou astérisque), ce qui signifie "zéro ou plus". Tout élément qui précède cela correspondra à zéro ou plusieurs fois. Par exemple, l'expression régulière /a*/ correspondra à une séquence de zéro ou plusieurs caractères 'a'.

#!/usr/bin/env ruby
str = "foo, bar,baz"
met str.split( /, */ )
$ ./2.rb
foo
bar
baz

Limiter le nombre de divisions

Imaginez une chaîne de valeur séparée par des virgules telle que "10,20,30,This is a arbitraire string" . Ce format est composé de trois chiffres suivis d'une colonne de commentaires. Cette colonne de commentaires peut contenir du texte arbitraire, y compris du texte avec des virgules. Pour éviter que split ne divise le texte de cette colonne, nous pouvons définir un nombre maximum de colonnes à diviser.

Remarque : cela ne fonctionnera que si la chaîne de commentaire avec le texte arbitraire est la dernière colonne du tableau.

Pour limiter le nombre de fractionnements que la méthode split effectuera, transmettez le nombre de champs dans la chaîne en tant que deuxième argument à la méthode split, comme ceci :

#!/usr/bin/env ruby
str = "10,20,30,Ten, Twenty and Thirty"
met str.split( /, */, 4 )
$ ./3.rb
10
20
30
Dix, vingt et trente

Exemple de bonus !

Et si vous vouliez utiliser la  division  pour obtenir tous les éléments sauf le tout premier ?

C'est en fait très simple :

first,*rest = ex.split(/,/)

Connaître les limites

La méthode fractionnée a des limites assez importantes.

Prenez par exemple la chaîne  '10,20,"Bob, Eve et Mallory",30' . Ce qui est prévu, ce sont deux nombres, suivis d'une chaîne entre guillemets (pouvant contenir des virgules), puis d'un autre nombre. Split ne peut pas séparer correctement cette chaîne en champs.

Pour ce faire, le scanneur de chaîne doit être  stateful , ce qui signifie qu'il peut se rappeler s'il se trouve à l'intérieur d'une chaîne entre guillemets ou non. Le scanner divisé n'est pas avec état, il ne peut donc pas résoudre des problèmes comme celui-ci.

Regarder maintenant : utiliser correctement les virgules

Volume 0%
02:52
00:33
03:16
 
Partager Tutoriel

Mots clés dans : Utilisation de la méthode "Split"

Expression régulière

Autres Tutoriels sur (Expression régulière,) ...