FAQ PascalConsultez toutes les FAQ

Nombre d'auteurs : 10, nombre de questions : 401, dernière mise à jour : 5 novembre 2017  Ajouter une question

 

Bienvenue dans la F.A.Q. Pascal !

Celle-ci rassemble les réponses aux questions les plus fréquemment posées sur le langage Pascal et tous ses outils de programmation. Si elle n'a pas pour vocation de répondre à toutes les interrogations possibles, elle reste une bonne base de connaissances sur le Pascal, et ne demande qu'à être enrichie par vos expériences personnelles.

Nous vous invitons à proposer vos propres questions/réponses directement dans la FAQ ou, si vous souhaitez apporter une modification à une question/réponse existante, à la poster dans le fil de discussion renseigné ci-dessous.

Nous vous souhaitons une bonne lecture !

L'équipe Pascal.

Commentez


SommaireLe langage PascalLes chaînes de caractères de type string (8)
précédent sommaire suivant
 

Les chaînes de caractères de type string du Pascal peuvent être assimilées à des tableaux de caractères. Comme pour ces derniers, il est possible de les indexer en précisant à la fin la position du caractère auquel on souhaite accéder, le premier caractère portant l'index 1.

Ainsi, si on considère la chaîne s : String, pour connaître le 5e caractère, on écrira s[5] (de type Char).

L'exemple suivant affiche une chaîne en séparant chaque caractère par un tiret :

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
  
Var 
  s : String; 
  i : Byte; 
Begin 
  s := 'ABCDEF'; 
  
  for i := 1 to Length(s) do 
    Write(s[i], '-'); 
End;

Mis à jour le 23 mars 2004 Eric Sigoillot

Le Pascal est doté en standard de la fonction Length (S : String) : Byte pour connaître la longueur d'une chaîne :

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
  
Var 
  S : String; 
Begin 
  S := ''; 
  while Length(S) < 10 do S := S + '!'; 
End;

Mis à jour le 7 mars 2004 Eric Sigoillot

Une première solution est d'utiliser la fonction Concat (s1, s2, ..., sn : String) : String pour ajouter plusieurs chaînes de caractères entre elles :

Code Delphi : Sélectionner tout
1
2
3
4
5
6
  
Var 
  s : String; 
Begin 
  s := Concat('Ceci ', 'est ', 'un ', 'exemple.'); 
End;
Une seconde solution est d'utiliser l'opérateur + pour ajouter plusieurs chaînes. Le résultat est exactement identique à Concat :

Code Delphi : Sélectionner tout
1
2
3
4
5
6
  
Var 
  s : String; 
Begin 
  s := 'Ceci ' + 'est ' + 'un ' + 'exemple.'; 
End;

Mis à jour le 23 mars 2004 Eric Sigoillot

Pour connaître la position d'une sous-chaine (qui peut s'avérer n'être qu'un seul caractère) dans une chaîne, il faut se servir de la fonction Pos (SousChaine, Chaine : String) : Byte;.
La valeur retournée est l'indice du début de la sous-chaîne dans la chaîne. Si la sous-chaîne n'est pas trouvée, alors Pos renverra 0.

Code delphi : Sélectionner tout
1
2
3
4
5
6
  
Var 
  i : Byte; 
Begin 
  i := Pos('def','abcdefgh');    { i = 4 } 
End;
Pos ne renvoie que la position de la première occurrence. Si la sous-chaîne apparaît plusieurs fois, alors les autres occurrences seront ignorées. Pour remédier à ce problème, il faut soit supprimer le début de la chaîne, soit créer sa propre fonction de recherche.

Mis à jour le 23 mars 2004 Eric Sigoillot

Pour copier une partie d'une chaîne, on se sert de la fonction Copy (S : String; Debut, Len : Byte), où Debut indique le caractère à partir duquel on souhaite copier la chaîne et Len le nombre de caractères à copier :

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
  
Var 
  s : String; 
Begin 
  s := Copy('ABCDEF',2,3);  
  { s = 'BCD' } 
End;

Mis à jour le 23 mars 2004 Eric Sigoillot

Pour supprimer tout ou partie d'une chaîne, on se sert de la procédure Delete (var S : String; Debut, Len : Byte), où Len indique le nombre de caractères à supprimer en commençant à la position Debut :

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
  
Var 
  s : String; 
Begin 
  s := 'ABCDEF'; 
  Delete(s,2,3);    { s = 'AEF' } 
End;

Mis à jour le 23 mars 2004 Eric Sigoillot

Pour convertir une chaîne en nombre, il faut utiliser la procédure Val (S : String; var n; var e : Integer) :

  • S est la chaîne à convertir. Pour qu'il n'y ait pas d'erreur, il faut que celle-ci contienne un nombre, qu'il soit entier (décimal ou hexadécimal), ou à virgule ;
  • n est la variable qui contiendra le nombre converti. Ce peut être un entier (ShortInt, Byte, Integer, Word, Longint), ou bien un réel (Real, Single, Double, Extended, Comp) ;
  • e est le code d'erreur. Si la chaîne S contient bien un nombre et que n est du type attendu, alors e vaut 0. Sinon, e correspond à la position de la première erreur dans la chaîne s.

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  
Var 
  i : Integer;  
  w : Word; 
  r : Real; 
  e : Integer; 
  
Begin 
  Val('123',i,e);       { i = 123  ; e = 0 } 
  Val('1.23',r,e);      { r = 1.23 ; e = 0 } 
  Val('1.2E3',r,e);     { r = 1200 ; e = 0 } 
  Val('-123',w,e);      { w = ?    ; e = 1 } 
  Val('1.23',i,e);      { i = ?    ; e = 2 } 
  Val('12a',i,e);       { i = ?    ; e = 3 } 
  Val('$12A',i,e);      { i = $12A ; e = 0 } 
End.

Mis à jour le 7 mars 2004 Eric Sigoillot

Pour convertir un nombre en chaîne, il faut utiliser Str(n:Width:Decimals; var S: String) :

  • n est un nombre, entier ou réel ;
  • S est la chaîne accueillant le résultat de la conversion ;
  • Width représente la taille minimale de la chaîne résultante, avec un alignement à droite. Si Width = 0, alors il n'est pas pris en compte ;
  • Decimals représente le nombre de chiffres après la virgule qui doivent être utilisés pour la conversion d'un nombre réel.

Width et Decimalssont des paramètres facultatifs. Toutefois, si vous désirez indiquer Decimals, vous devez nécessairement mettre Width.

Par défaut, la conversion d'un nombre réel s'effectue en utilisant la notation mmmmmmmmmmmmmmE±xxxx, où mmmmmmmmmmmmmm est la mantisse et xxxx l'exposant (par exemple, 12.3 = 1.23000000000000E+0001).
Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
  
Var 
  s : string; 
  
Begin 
  Str(123,s);        { s = '123' } 
  Str(1.23,s);       { s = '1.23000000000000E+0001' } 
  Str(1.23:6:2,s);   { s = '  1.23' } 
  Str(1.23:0:3,s);   { s = '1.230' } 
End.

Mis à jour le 7 mars 2004 Eric Sigoillot

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

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 © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Responsables bénévoles de la rubrique Pascal : Gilles Vasseur - Alcatîz -