Les chaines de caractères : Tutoriel

Sébastien Curutchet

L'ensemble du code et explications que vous trouverez dans ce document est basé sur Visual Basic 6.

Dans n'importe quel langage le type qui revient le plus souvent, ou plutôt qui est le plus manipulé est les Chaines de caractères. Beaucoup d'opérations sont réalisées sur ces chaines comme la concaténation, le découpage, le remplacement de caractères, etc.

Ce tutoriel est là pour faire un rappel de ce qui est faisable avec les String ainsi que les limites de ce type. Il est basé sur les différentes questions qui ont été posées sur le forum de developpez.com. ♪

- Titre : Les chaines de caractères : Tutoriel

- Auteur : Sébastien Curutchet

- Parution : 1 mars 2005

- Mise à jour : 14 mars 2013

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2005 Sébastien Curutchet. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Concaténation de chaines

- III. Suppression des blancs (espaces)

- IV. Rechercher une chaine dans une chaine

- V. Remplacer une chaine par une autre

- VI. Découper une chaine de caractères

- VII. Quelques trucs à savoir

- VIII. Remarque

I - Introduction

La première chose à savoir est qu'il existe 2 types de chaines de caractères en VB. Les chaines de longueur fixe et les chaines de longueur variable. Ces deux types de chaines ont une limite de capacités différentes :

- les chaines de longueur fixe peuvent aller jusqu'à 2^16 soit 64 ko ;

- les chaines de longueur variable sont limitées à 2^31 soit 2 Go.

II - Concaténation de chaines

Il existe deux méthodes pour concaténer les chaines de caractères. Vous pouvez soit utiliser l'opérateur + soit l'opérateur &. Quelle est la différence entre ces deux opérateurs ?

La différence se trouve quand vous souhaitez concaténer plusieurs types différents dans une chaine de caractères. Pour mieux comprendre, voici un exemple.

'Déclaration des variables
Dim strResultat As String

strResultat = "Test " & 1 & 2
'Le résultat est Test 12

strResultat = "Test " + 1 + 2
'Le résultat est Test 3

Si vous souhaitez utiliser le + plutôt que le & faites très attention à ce que vous souhaitez faire. De plus le & est plus rapide que le + pour la concaténation.

Le cas présenté ci-dessus est le plus simple. Vous pouvez concaténer le contenu de plusieurs variables.

'Déclaration des variables
Dim strResultat As String
Dim i As Integer
Dim str As String

i = 12
str = "Test"
strResultat = str & " " & i
'Le résultat est Test 12

Seulement il arrive, par exemple lors de la création de requête SQL, que votre ligne soit trop grande pour passer à l'écran, ce qui rend plus difficile la lecture. Vous pouvez donc écrire votre requête sur plusieurs lignes grâce au caractère _.

'Déclaration des variables
Dim strResultat As String
Dim i As Integer
Dim str As String

i = 12
str = "Test"
strResultat = str & _
" " & _
i
'Le résultat est Test 12

Cette technique a une limite, car vous ne pouvez enchaîner plus de 25 lignes de cette façon. Il existe une deuxième solution qui est aussi souvent utilisée :

'Déclaration des variables
Dim strResultat As String
Dim i As Integer
Dim str As String

i = 12
str = "Test"
strResultat = str
strResultat = strResultat & " "
strResultat = strResultat & i
'Le résultat est Test 12

III - Suppression des blancs (espaces)

En VB, il existe deux fonctions permettant de supprimer les blancs en début et fin de chaine. Ces deux fonctions sont LTrim et RTrim.

LTrim permet de supprimer les espaces en début de chaine. Par exemple :

MsgBox "-" & LTrim(" Coucou!! ") & "-"
'Affiche -Coucou!! -

Vous pouvez remarquer que l'espace après les points d'exclamation est toujours présent. Pour supprimer cet espace, vous pouvez utiliser RTrim.

MsgBox "-" & RTrim(" Coucou!! ") & "-"
'Affiche - Coucou!!-

Pour enlever l'espace en début et fin de chaine vous utiliseriez LTrim(RTrim(strMaChaine)). Ce n'est pas faux. Mais une autre fonction Trim fait exactement la même chose.

MsgBox "-" & Trim(" Coucou!! ") & "-"
'Affiche -Coucou!!-

Enlever les espaces en trop en début et fin de chaine c'est pratique, mais comment enlever ceux contenus dans la chaine. Rien de plus simple, il suffit de remplacer tous les espaces par rien. Pour cela il faut utiliser la méthode Replace que nous verrons plus tard.

IV - Rechercher une chaine dans une chaine

La rechercher d'une chaine dans un autre est réalisée par la fonction InStr.

Cette fonction permet à la fois de vérifier si la chaine recherchée est bien présente, et si oui, alors elle retourne la position de la première itération de la chaine recherchée.

La fonction InStr s'utilise de la façon suivante: InStr([PositionDeDépart],Chaine1,Chaine2,[TypeDeComparaison])

PositionDeDépart : entier indiquant à partir de quel caractère la recherche doit être réalisée (Facultatif). Par défaut c'est 1.

Chaine1 : chaine recherchée

Chaine2 : chaine sur laquelle s'effectue la recherche

TypeDeComparaison : Indique le type de comparaison à faire (Facultatif).

Nom de la constante

Valeur

Description

vbUseCompareOption

-1

Effectue la comparaison en fonction de l'état de Option Compare.

vbBinaryCompare

0

Effectue une comparaison binaire

vbTextCompare

1

Effectue une comparaison sur les caractères

vbDatabaseCompare

2

Microsoft Access uniquement. Effectue la comparaison sur les informations de la base de données

Voici un exemple afin de mieux comprendre son fonctionnement :

MsgBox InStr("atotobtoto","toto")

'Vous verrez s'afficher 2, ce qui correspond à la position à laquelle toto apparaît pour la première fois

V - Remplacer une chaine par une autre

Cette fonction est souvent utilisée dans le cas de création de requêtes. Par exemple pour remplacer les simples quotes par des doubles quotes, des virgules par des points, des blancs par rien, etc.

La fonction permettant de réaliser ce travail est la fonction Replace. Son utilisation est on ne peut plus simple.

nouvelleChaine = Replace(actuelleChaine,ChaineARemplacer,ChaineAMettreALaPlace)

L'exemple suivant va remplacer les virgules par des points :

strNew = Replace(strOld,",",".")

VI - Découper une chaine de caractères

Il arrive que vous deviez traiter une ligne d'un fichier ou autre source de données, en la découpant en fonction d'un séparateur. Une fonction VB vous permet de faire cela : Split. Cette fonction s'utilise de la manière suivante : monTab = Split(maChaine,monSéparateur).

Comme vous pouvez le voir, la fonction Split retourne un tableau (de base 0) qui contient dans chaque case les différents champs de votre chaine.

Un petit exemple pour éclaircir tout ça :

Dim monTab() As String

monTab = Split("Champ1@@@Champ2@@@Champ3","@@@")

Comme résultat vous obtiendrez un tableau à 3 cases (de 0 à 2) avec monTab(0) = « Champ1 », monTab(1)=« Champ2 », monTab(2)=« Champ3 ». Le séparateur peut être aussi long que vous le souhaitez.

ATTENTION pour ceux qui auraient déjà utilisé strtok en C : la chaine indiquant le séparateur est elle même le séparateur. Si vous faites Split(« Bonjour. Salut; ça va, »,« .;, ») vous n'obtiendrez pas « Bonjour », « Salut », « Ça va » car le séparateur est la chaine « .;, ».

Split retournant un tableau est lui-même un tableau. Donc pour récupérer le premier élément vous pouvez écrire Split(maChaine,monSep)(0), pour récupérer le n-ième élément vous faîtes Split(maChaine,monSep)(n-1), et pour récupérer le dernier élément vous faites Split(maChaine,monSep)(UBound(Split(maChaine,monSep)))

VII - Quelques trucs à savoir

La première chose à laquelle il faut faire attention c'est la taille maximale de la chaine comme je l'ai indiqué en introduction.

La deuxième est comment insérer des doubles quotes dans une chaine de caractères. Beaucoup de personnes bloquent sur ce problème. Donc maintenant plus d'excuses : Pour cela vous devez doubler les doubles quotes. Voici un petit exemple :

strNew = "Voici une double quote "". "
'Le résultat est le suivant : Voici une double quote ".

VIII - Remarque

Il est tout à fait possible qu'il y ait des erreurs dans le document. Si vous en trouvez, ou bien souhaitez un peu plus d'explication sur certains points, veuillez m'envoyer un message privé via le forum afin de mettre à jour l'ensemble de ce document. D'avance merci.