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

Langage Delphi Discussion :

Conversion de chaîne en entier


Sujet :

Langage Delphi

  1. #1
    Membre régulier Avatar de SkYsO
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 217
    Points : 122
    Points
    122
    Par défaut Conversion de chaîne en entier
    Bonjour,

    J'aimerais savoir si vous aviez un algo qui me convertirait une chaine de caractère en entier. Mais je ne veux pas un entier genre le code ascii.

    Plutôt du genre :

    A=1
    Z=26
    AA=26+1=27
    BA=26+26+1=53

    Bref une qui me calculerait un indice par rapport aux lettres données

    J'ai déjà la fonction inverse


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function numerique_vers_alphabetique(nombre : integer) : string;  var entier, reste : integer;
        tempo : string;
    begin
      entier := nombre div 26;
      reste := nombre mod 26;
      if reste = 0 then entier := entier-1;
      if entier > 0 then tempo := numerique_vers_alphabetique(entier);
      if reste > 0 then chaine := chaine + chr(reste+64)
      else chaine := chaine + 'Z';
      result := chaine;
    end;
    Voilà si quelqu'un à déjà traité une fonction de ce genre (sûrement toute simple) il me ferait gagné du temps

    merci à tous

  2. #2
    Membre du Club

    Inscrit en
    Janvier 2005
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 48
    Points : 61
    Points
    61
    Par défaut
    Tout ça ressemble à une simili base 27 sans zéro (chiffres de A=1 à Z=26)

    A priori tu devrais pouvoir t'en sortir un trafiquant ce qui suit

    Valeur du digit= ((Code ASCII - 64) X 26) puissance(Position du digit à partir de la droite -1)
    En parcourant la chaine if suffit d'additionner le resultat de toutes les lettres.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 68
    Points : 78
    Points
    78
    Par défaut
    A certaines optimisations et contrôles près, ça doit ressembler à ça :

    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
     
    function  alpha_to_num (chaine : string) : longint;
    var
    	i : integer;
    	mult : longint;
    	res : longint;
    	a : longint;
    begin
    	mult:= 1;
    	res:= 0;
    	for i:= length(chaine) downto 1 do
    	begin
    		res:= res + mult * ( ord (chaine[i]) - ord ('A') + 1);
    		mult:= mult *26;
    	end;
    	result:= res;
    end;

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 31
    Points : 27
    Points
    27
    Par défaut
    Bonjour!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    uses Math;
     
    function AlphaToEntier(alpha:string):Integer;
    var i:integer;
        p:extended;
    begin
      p:=0;
      if length(alpha)<>0 then
        for i:=length(alpha) downto 1 do
          p:=p+(ord(upcase(alpha[i]))-64)* power(26,length(alpha)-i);
      result:=Round(p);
    end;

  5. #5
    Membre régulier Avatar de SkYsO
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 217
    Points : 122
    Points
    122
    Par défaut
    merci beaucoup les gars

    Bonne continuation

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Conversion chaîne vers entier signé 8 bits
    Par SesechXP dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/09/2006, 14h29
  2. conversion chaîne vers entier
    Par pepper18 dans le forum C++
    Réponses: 2
    Dernier message: 31/03/2006, 16h36
  3. [Crystal reports Version 8.x] Conversion Type chaîne en date
    Par Audrey Stelle dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 22/10/2005, 14h58
  4. Réponses: 3
    Dernier message: 28/09/2003, 10h46

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