Un meilleur job mieux payé ?

Deviens chef de projet, développeur, ingénieur, informaticien

Mets à jour ton profil pro

ça m'intéresse

FAQ PascalConsultez toutes les FAQ

Nombre d'auteurs : 10, nombre de questions : 400, dernière mise à jour : 12 septembre 2016  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 PascalGénéralités (6)
précédent sommaire suivant
 

Il existe plusieurs manières d'effectuer une pause dans un programme.

La plus simple consiste à demander à l'utilisateur d'appuyer sur une touche. Si on désire simplement un appui sur Entrée, on utilisera l'instruction ReadLn :

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
  
Begin 
  ... 
  Write('Appuyez sur Entrée : '); 
  ReadLn; 
  ... 
End;
On peut également attendre l'appui sur une touche quelconque avec l'instruction ReadKey de l'unité Crt :

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
  
Uses 
  Crt; 
Var 
  Ch: Char; 
Begin 
  ... 
  Ch := ReadKey; 
  ... 
End;
Une autre méthode pour faire une pause consiste à faire tourner une boucle de temporisation (une boucle for vide). Néanmoins cette méthode a l'inconvénient d'être dépendante de la vitesse du système sur lequel est exécutée l'application.
On lui préfèrera alors l'utilisation de la procédure Delay (Ms : Word) de l'unité Crt :

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
  
Uses 
  Crt; 
Begin 
  ... 
  { Attend 5 secondes, soit 5000 millisecondes } 
  Delay(5000); 
  ... 
End.

Mis à jour le 4 juin 2004 Eric Sigoillot

Il est souvent nécessaire de savoir détecter les erreurs que votre programme est susceptible de produire, notamment suite à une entrée imprévue par l'utilisateur.

Les erreurs les plus simples à détecter sont les erreurs d'entrée/sortie (E/S). Afin de détecter de telles erreurs, on se sert de la directive $I et de la fonction IOResult, qui renvoie le dernier code d'erreur obtenu, une valeur nulle signifiant une absence d'erreur. Il est très courant d'avoir recours à $I et de tester IOResult après chaque appel de procédure de gestion de fichiers. Mais on peut également s'en servir avec une lecture de variable au moyen de ReadLn.

  • Erreurs de lecture/écriture de fichiers 

L'exemple suivant ouvre un fichier et le referme. En temps normal, si le fichier n'existe pas, une erreur est déclenchée. Avec l'utilisation de $I, cette erreur devient silencieuse, ce qui vous permet de la gérer sans interruption incontrôlable du programme :

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  
Var 
  f : Text; 
Begin 
  ... 
  {$I-}    { On désactive les erreurs } 
  
  { On ouvre un fichier et on le referme } 
  Assign(f,'FICHIER.TXT');   
  Reset(f); 
  
  {$I+}    { On réactive les erreurs }   
  
  { Si une erreur s'est produite, on affiche un message } 
  if IOResult <> 0 then 
    begin 
      WriteLn('Le fichier n''a pas pu être ouvert !'); 
      WriteLn('Appuyez sur Entrée.'); 
      ReadLn; 
    end; 
  ... 
End.
  • Lecture d'une variable au clavier 

Il arrive que l'on veuille obtenir de l'utilisateur une valeur, un nombre par exemple. En temps normal, si l'utilisateur décide à ce moment-là de rentrer une chaîne quelconque, le programme s'interrompt de manière incongrue. L'utilisation de $I permet de se sortir de ce mauvais pas, comme le montre l'exemple suivant :

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  
Var 
  i : Integer; 
Begin 
  ... 
  {$I-}    { On désactive les erreurs d'E/S } 
  
  { On va répéter la phase d'entrée tant qu'un nombre ne sera pas entré... } 
  repeat 
    Write('Entrez un entier : '); 
    ReadLn(i); 
  until IOResult = 0; 
  
  {$I+}    { On réactive les erreurs } 
  ... 
End.

Il existe d'autres variables permettant de savoir si une opération s'est bien déroulée. N'hésitez pas à y faire appel, car elles vous éviteront de nombreuses mauvaises surprises. On peut notamment citer DosError de l'unité Dos, ou bien encore GraphResult de l'unité Graph.

Il ne faut en effet jamais oublier que l'utilisateur final est la seule personne capable de produire un bogue auquel vous n'auriez jamais pensé…

Mis à jour le 3 avril 2004 Eric Sigoillot Giovanny Temgoua

Il est très courant qu'un programme attende des paramètres, qui lui sont transmis par la ligne de commande. Par exemple, un programme CopieFic qui attend comme paramètres le nom du fichier source et le dossier de destination : CopieFic C:\Temp\Fichier1.txt D:\.

Tout d'abord, pour tester le nombre de paramètres passés au programme, il faut se servir de la fonction ParamCount : Word;. Ensuite, la fonction ParamStr (i : Integer) : String;, renvoie le i-ème paramètre sur la ligne de commande.

Remarques

  • Tous les paramètres sont des chaînes de caractères ; aussi, il faudra peut-être avoir recours à des fonctions de conversion si les paramètres attendus sont numériques.
  • Deux paramètres sont séparés par au moins un espace. Par conséquent, en appelant un programme avec TEST Ceci est un test, alors il sera compté 4 paramètres : Ceci, est, un et test.

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
  
Program Exemple; 
  
Var 
  i : Integer; 
  
Begin 
  for i := 1 to ParamCount do 
    WriteLn(ParamStr(i)); 
End.

Mis à jour le 7 mars 2004 Eric Sigoillot

Il peut parfois être utile de connaître le nom de l'EXE correspondant à votre application. Celui-ci est stocké avec les paramètres de la ligne de commande, et possède l'indice 0. On peut le récupérer avec la fonction ParamStr :

Code delphi : Sélectionner tout
1
2
3
4
5
6
  
Begin 
  ... 
  WriteLn('Nom de l''application : ',ParamStr(0)); 
  ... 
End;
ParamStr[0] renvoie le nom complet de l'application, c'est-à-dire avec le chemin d'accès complet.

Mis à jour le 5 juin 2004 droggo Eric Sigoillot

Par défaut, il est possible de quitter une application console en appuyant sur les touches Ctrl+C ou Ctrl+Break (la touche Break est aussi notée Pause). Il peut dans certains cas être intéressant de désactiver cette fonctionnalité.
Le rôle de ces touches est défini à l'aide de la variable CheckBreak présente dans l'unité Crt.

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
  
Uses 
  Crt; 
  
Begin 
  { Désactive la capture de la touche Break par TP } 
  CheckBreak := False; 
  ...
On peut tester l'appui sur Ctrl+C et Ctrl+Break avec Readkey :

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
  
Uses 
  Crt; 
  
Begin 
  ... 
  case ReadKey of 
  #3 : begin 
         WriteLn('Ctrl+Break pressé !'); 
       end; 
  end; 
  ... 
End.
Les IDE Turbo Pascal, Free Pascal et Virtual Pascal contiennent un intercepteur personnel pour Ctrl+C et Ctrl+Break. Par conséquent, pour en tester la désactivation dans votre programme, il convient de quitter l'IDE au préalable.

Remarques
  • Il est possible de passer par une redéfinition des interruptions au lieu de se servir de l'unité Crt.
  • Il ne faut pas confondre la désactivation de Ctrl+Break à l'intérieur d'un programme Pascal et la désactivation pour les opérations d'I/O, contrôlées à l'aide de SetCBreak dans l'unité Dos.

Mis à jour le 10 mai 2005 Eric Sigoillot

Pour basculer votre application mode texte en 80x50, il faut utiliser la procédure TextMode de l'unité Crt avec l'attribut Font8x8, comme ceci :

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  
Uses 
  Crt; 
  
Var  
  AncienMode : Integer; 
  
Begin 
  AncienMode := LastMode; 
  Write('Pressez Enter pour passer en 80x50 : '); 
  ReadLn; 
  TextMode(CO80 or Font8x8); 
  Write('Pressez Enter pour repasser en 80x25 : '); 
  ReadLn; 
  TextMode(AncienMode); 
  Write('Pressez Enter pour quitter : '); 
  ReadLn; 
End.
La fonction LastMode permet de déterminer le mode courant, pour pouvoir le restaurer ensuite.

Mis à jour le 5 juin 2004 Alcatîz 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 -