Traduire une date en texte

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 235 fois - Téléchargée 35 fois

Contenu du snippet

Ce code traduire toutes les dates valides entre 1995 et 2005 saisies jj mm aaaa et les restituent en texte.

Source / Exemple :


program LIREDATE;

uses
  Forms;

VAR  date : STRING[10];
      jour : STRING[2];
      mois : STRING[2];
      annee : STRING[4];
      transa, transm, transj : string;
begin
  WRITELN('inscrivez la date a convertir sous forme jj mm aaaa');
  READLN (date);
  jour :=COPY(date,1,2);
  mois :=COPY(date,4,5);
  annee :=COPY(date,7,8);
  Begin{traduction de l'annee}

  IF annee = '1995' then
  transa := 'mille neuf cent quatre-vingt quinze'
  ELSE
    IF annee = '1996' then
    transa := 'mille neuf cent quatre-vingt seize'
  ELSE
    IF annee = '1997' then
    transa := 'mille neuf cent quatre-vingt dix-sept'
  ELSE
    IF annee = '1998' then
    transa := 'mille neuf cent quatre-vingt dix-huit'
  ELSE
    IF annee = '1999' then
    transa := 'mille neuf cent quatre-vingt dix-neuf'
  ELSE
    IF annee = '2000' then
    transa := 'deux mille'
  ELSE
    IF annee = '2001' then
    transa := 'deux mille un'
  ELSE
    IF annee = '2002' then
    transa := 'deux mille deux'
  ELSE
    IF annee = '2003' then
    transa := 'deux mille trois'
  ELSE
    IF annee = '2004' then
    transa := 'deux mille quatre'
  ELSE
    IF annee = '2005' then
    transa := 'deux mille cinq'
  ELSE writeln('l''annee est incorrecte');
  End;{fin de la traduction de l'annee}

  Begin{traduction du mois}
  IF mois = '01' then
  transm := 'janvier'
  ELSE
    IF mois = '02' then
    transm := 'fevrier'
  ELSE
    IF mois = '03' then
    transm := 'mars'
  ELSE
    IF mois = '04' then
    transm := 'avril'
  ELSE
    IF mois = '05' then
    transm := 'mai'
  ELSE
    IF mois = '06' then
    transm := 'juin'
  ELSE
    IF mois = '07' then
    transm := 'juillet'
  ELSE
    IF mois = '08' then
    transm := 'aout'
  ELSE
    IF mois = '09' then
    transm := 'septembre'
  ELSE
    IF mois = '10' then
    transm := 'octobre'
  ELSE
    IF mois = '11' then
    transm := 'novembre'
  ELSE
    IF mois = '12' then
    transm := 'decembre'
  ELSE writeln('le mois est incorrect');
  end;{fin de la traduction du mois}

  Begin
  IF jour = '01' then
  transj := 'premier'
  ELSE
    IF jour = '02' then
    transj := 'deux'
  ELSE
    IF jour = '03' then
    transj := 'trois'
  ELSE
    IF jour = '04' then
    transj := 'quatre'
  ELSE
    IF jour = '05' then
    transj := 'cinq'
  ELSE
    IF jour = '06' then
    transj := 'six'
  ELSE
    IF jour = '07' then
    transj := 'sept'
  ELSE
    IF jour = '08' then
    transj := 'huit'
  ELSE
    IF jour = '09' then
    transj := 'neuf'
  ELSE
    IF jour = '10' then
    transj := 'dix'
  ELSE
    IF jour = '11' then
    transj := 'onze'
  ELSE
    IF jour = '12' then
    transj := 'douze'
  ELSE
    IF jour = '13' then
    transj := 'treize'
  ELSE
    IF jour = '14' then
    transj := 'quatorze'
  ELSE
    IF jour = '15' then
    transj := 'quinze'
  ELSE
    IF jour = '16' then
    transj := 'seize'
  ELSE
    IF jour = '17' then
    transj := 'diz-sept'
  ELSE
    IF jour = '18' then
    transj := 'dix-huit'
  ELSE
    IF jour = '19' then
    transj := 'dix-neuf'
  ELSE
    IF jour = '20' then
    transj := 'vingt'
  ELSE
    IF jour = '21' then
    transj := 'vingt et un'
  ELSE
    IF jour = '22' then
    transj := 'vingt-deux'
  ELSE
    IF jour = '23' then
    transj := 'vingt-trois'
  ELSE
    IF jour = '24' then
    transj := 'vingt-quatre'
 ELSE
    IF jour = '25' then
    transj := 'vingt-cinq'
 ELSE
    IF jour = '26' then
    transj := 'vingt-six'
 ELSE
    IF jour = '27' then
    transj := 'vingt-sept'
 ELSE
    IF jour = '28' then
    transj := 'vingt-huit'
 ELSE{Prb annee bisextille}
   IF jour = '29' then
      IF mois = '02' then
        IF annee = '1996' then
        transj :='vingt-neuf'
        else if annee = '2000' then
        transj :='vingt-neuf'
        else if annee = '2004' then
        transj :='vingt-neuf'
        else writeln('le jour est incorrect')
    else transj :='vingt-neuf'
 ELSE
  IF jour = '30' then
    IF mois = '02' then
    writeln ('le jour est incorrect')
    Else transj := 'trente'
 ELSE{Prb mois a 31 jours}
  IF jour = '31' then
    IF mois = '02' then
    Writeln('le jour est incorrect')
    Else if mois = '04' then
    Writeln('le jour est incorrect')
    Else if mois = '06' then
    Writeln('le jour est incorrect')
    Else if mois = '09' then
    Writeln('le jour est incorrect')
    Else if mois = '11' then
    Writeln('le jour est incorrect')
    Else transj :='trente et un'
  ELSE writeln('le jour est incorrect');
  end;{fin de la traduction du mois}
  WRITELN (transj, ' ', transm, ' ', transa);
  Readln;
  end.

Conclusion :


C'est une vraie usine a gaz mais c'est de mon niveau

A voir également

Ajouter un commentaire Commentaires
Messages postés
32
Date d'inscription
vendredi 14 février 2003
Statut
Membre
Dernière intervention
2 décembre 2009

Salut,

pour simplifier ton code, il y aurait peut-être un petit truc a faire.
En entête te déclarer deux constantes de tableau de type string dans lequel tu initialises tes mois et tes jours comme suit:

const Tbl_Jour: array[1..6] of String = ('Un', 'Deux', 'Trois', 'Quatre', 'Cinq', 'Six');

const Tbl_Mois: array[1..6] of String = ('Janvier', 'Fevrier', 'Mars', 'Avril', 'Mai', 'Juin');

Je ne l'ai pas fais pour tous les mois et jours, ceci est seulement un exemple..

Par la suite, tu prends ton chiffre indiquant le jour et tu le converti en integer pour pouvoir aller chercher la bonne position dans le tableau.

var Jour :Integer;

Jour := StrToInt(COPY(date,1,2)); //tu peux plugger la fonction directement entre les crochet du tableau [] comme j'ai fais pour le mois.

Et tu utilise ce chiffre pour aller chercher la valeur string dans le tableau à la position du chiffre.

ShowMessage(Tbl_Jour[Jour] + ' ' + Tbl_mois[StrToInt(COPY(date,4,5))]);

Il devrais afficher la valeur du tableau en position Jour, ainsi qu'un espace et le mois.

Il est aussi possible de rendre l'année plus générique, mais j'ai pas le gout de tout me tapper cà ce soir. Vive la paresse. Cependant, je crois que sa donne une petite idée pour simplifier le code au niveau des mois et des jours.
______
Patrick
Messages postés
3
Date d'inscription
mercredi 12 mars 2003
Statut
Membre
Dernière intervention
28 novembre 2006

Et aussi utiliser du "case of" plutot que des "if" dans tous les sens
Messages postés
235
Date d'inscription
vendredi 25 avril 2003
Statut
Membre
Dernière intervention
26 juillet 2010

Ca marche, mais dommage que tu n'utilises pas les fonctionnalités de Delphi: Afficher des messages, saisir la date dansun edit...Quelles version utilises tu?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.