IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Écriture littérale d'un nombre en langue arabe


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Points : 29
    Points
    29
    Par défaut Écriture littérale d'un nombre en langue arabe
    Bonjour à tous !

    Voilà je voudrais savoir si quelqu'un peut m'aider à modifier cette fonction, qui permet d'obtenir la forme littérale d'un nombre en français, afin d'obtenir la même chose mais en arabe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    Const QuoiEntier = 'Dinars';
    Const QuoiDecimales = 'Centime';
     
     
    var
      Txt, PartieEntiere, PartieDecimale, TxtEntier :String;
      TxtUnites:array[0..19] of String= ('', 'un', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept', 'huit', 'neuf', 'dix',
        'onze', 'douze', 'treize', 'quatorze', 'quinze', 'seize', 'dix-sept', 'dix-huit', 'dix-neuf');
      TxtDizaines : Array[0..10] of String= ('', '', 'vingt', 'trente', 'quarante', 'cinquante', 'soixante', 'soixante', 'quatre-vingt', 'quatre-vingt', 'Cent');
      TxtMilliers : Array[0..4] of String= ('', '', 'Mille', 'Million', 'Milliard');
     
    Procedure Centaine(Valeur:integer);
    function NombreTexte(Chiffre:Currency):String;
    function iif(a: boolean; b,c: String):String;
    function StrRight(s: string; nb: Integer): string;
    function StrLeft(s: string; nb: Integer): string;
     
    implementation
     
    function iif(a: boolean; b,c: String):String;
    begin
        if a then iif := b
        else iif := c
    end;
     
    function StrRight(s: string; nb: Integer): string;
    begin
      StrRight := iif(nb >= Length(s), s, copy(S, Length(s) - nb + 1, nb));
    end;
     
    function StrLeft(s: string; nb: Integer): string;
    begin
      StrLeft := iif(nb >= Length(s), s, copy(S, 1, nb));
    end;
     
     
    Procedure Centaine(Valeur:integer);
    var CentaineNb,DizaineNb,UnitesNb :Integer;
        Lien:String;
    begin
    //Extraction des trois chiffres
    CentaineNb := Valeur div 100;
    DizaineNb  := (Valeur - CentaineNb * 100) div 10;
    UnitesNb   := Valeur - CentaineNb * 100 - DizaineNb * 10;
    //Pour les valeurs 10 à 19, 70 à 79 et 90 à 99
    If (DizaineNb = 1) Or (DizaineNb = 7) Or (DizaineNb = 9) Then
        UnitesNb := UnitesNb + 10;
    //Le séparateur : -, et ou espace
    Case UnitesNb of
        1:Lien := ' et ';
       11:  If DizaineNb = 7 Then
                Lien := ' et '
            Else
                Lien := '-';
       Else
            Lien := '-';
    end;
    If UnitesNb = 0  Then Lien := '';
    If DizaineNb = 1 Then Lien := '';
     
    //Les dizaines en lettres
    If DizaineNb > 0 Then
        Txt := TxtDizaines[DizaineNb] + Lien + TxtUnites[UnitesNb] + ' '
    Else
        Txt := TxtUnites[UnitesNb] + ' ';
     
    //Les centaines en lettres
    if CentaineNb =1 then Txt := ' cent ' + Txt else if CentaineNb > 1 then
        If (DizaineNb > 0) Or (UnitesNb > 0) Then
            Txt := TxtUnites[CentaineNb] + ' Cent ' + Txt
        Else
            Txt := TxtUnites[CentaineNb] + ' Cents' + Txt;
    end;
     
    function NombreTexte(Chiffre:Currency):String;
    var j,i:integer; TxtDecimales,Valeur,reel:String;
          TrancheNb : Array[1..5] of String;
    begin
       reel:=FormatFloat('###0.00',Chiffre);
       PartieEntiere:=inttostr(trunc(strtofloat(Reel)));
       PartieDecimale:=FloatToStr(round((StrToFloat(Reel)-strToInt64(PartieEntiere))*100));
       for i:=1 to 5 do
           TrancheNb[i]:='';
       j := 1;
       While (Length(PartieEntiere) > 0) do
       begin
          TrancheNb[j]  := StrRight(PartieEntiere, 3);
          PartieEntiere := StrLeft(PartieEntiere, Length(PartieEntiere) - Length(TrancheNb[j]));
          j := j + 1;
       end;
       //------------>>>>>>>>>> Conversion en texte de chaque tranche de la partie entière
       TxtEntier := '';
       For i := j DownTo 1 do
       begin
          If TrancheNb[i] <> '' Then
          begin
            Centaine (strtoint(TrancheNb[i]));
            If Txt <> ' ' Then
            begin
                if (Txt ='un ') and (i=2) then Txt:='';
                TxtEntier := TxtEntier + Txt + TxtMilliers[i];
            end;
       //------------>>>>>>>>>>> Ajout du s à million et milliard
            If (i >= 3) And (Txt <> 'un') And (Txt <> ' ') Then
                TxtEntier := TxtEntier + 's '
            Else
                TxtEntier := TxtEntier + ' ';
          end;
          If StrRight(TxtEntier, 2) = '  ' Then TxtEntier := StrLeft(TxtEntier, length(TxtEntier) - 1);
       end;
       If StrLeft(TxtEntier, 1) = ' ' Then TxtEntier := StrRight(TxtEntier, length(TxtEntier) - 1);
     
       If (StrRight(TxtEntier, 3) = 'ns ') Or (StrRight(TxtEntier, 3) = 'ds ') Then TxtEntier := TxtEntier + 'de ';
     
       //----Si le nombre égale zéro
       If (TxtEntier = '  ') Or (TxtEntier = ' ') Or (TxtEntier = '') Then TxtEntier := 'zéro ';
     
       //----Introduction du s à l'unité de mesure si la valeur du nombre dépasse 1,99
       TxtEntier := TxtEntier + QuoiEntier + IIf(StrToInt(iif(Valeur='','0',valeur)) > 1.99, 's', '');
     
       //---->>>> Conversion en texte de la partie décimale du nombre
       TxtDecimales := '';
       If PartieDecimale <> '' Then
       begin
          Txt := '';
          Centaine (StrToInt(PartieDecimale));
          if trim(Txt)='' then Txt:='zero ';
          TxtDecimales := ' et ' + Txt + QuoiDecimales + IIf(Txt <> '', 's', '');
       end;
       TxtEntier[1]:=chr(ord(TxtEntier[1])-32);
       result := TxtEntier + TxtDecimales
    end;
    end.

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Google Trad pour traduire les chaînes , ça le fait pas ?

    'un', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept', 'huit', 'neuf', 'dix',
    'onze', 'douze', 'treize', 'quatorze', 'quinze', 'seize', 'dix-sept', 'dix-huit', 'dix-neuf'
    واحد '،' اثنين '،' ثلاثة '،' أربعة '،' خمسة '،' ست '،' سبتمبر '،' ثمانية '،' الجديد '،' عشرة '
    **** "أحد عشر"، "اثني عشر '،' ثلاثة عشر '،' أربعة عشر '،' خمسة عشر '،' ستة عشر '،' سبعة عشر '،' ثمانية عشر '،' تسعة عشر"

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Google Trad pour traduire les chaînes , ça le fait pas ?
    Ce n'est pas ce que j'attendais.

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Bonjour ! Je ne connais pas l'arabe mais je serais surpris qu'une simple substitution de chaînes fasse l'affaire.

    En revanche, en tapant dans Google "number to arabic words" ou "number to arabic text", on trouve des codes sources écrits dans d'autres langages, dont il doit être possible de s'inspirer.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    J'ai trouvé un programme en C# qui a l'air bien fait. J'aurais volontiers essayé d'en faire une version Delphi mais il me manque des connaissances (quoique le code paraisse assez simple). Voici le lien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (* http://asmaqureshi.blogspot.fr/2013/05/how-to-convert-numbers-to-arabic-word.html *)
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  6. #6
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    ce code en vb parait plus simple à transcrire en Delphi :

    https://www.planet-source-code.com/v...4218&lngWId=10

    Fichier NumberToWords.vb dans l'archive

  7. #7
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    ce code en vb parait plus simple à transcrire en Delphi
    Effectivement, je l'avais regardé aussi, mais quel que soit l'éditeur dans lequel je l'ouvre, je n'ai pas les caractères arabes qui s'affichent, mais des caractères latins accentués.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

Discussions similaires

  1. XML XSL et la langue Arabe !!
    Par nizarsm dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 22/03/2006, 17h58
  2. Prise en charge de la langue arabe
    Par yousseffst dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 13/03/2006, 11h33
  3. [WD9] Importation DB Access en langue arabe
    Par brizi dans le forum WinDev
    Réponses: 1
    Dernier message: 28/02/2006, 11h45
  4. problème langue arabe
    Par infoseb dans le forum Oracle
    Réponses: 2
    Dernier message: 17/10/2005, 17h44
  5. accents et langue arabe et chinoise
    Par localhost dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 25/02/2005, 13h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo