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 :

erreur '' n'est pas une valeur entière correcte


Sujet :

Langage Delphi

  1. #1
    Débutant
    Inscrit en
    Mars 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Points : 5
    Points
    5
    Par défaut erreur '' n'est pas une valeur entière correcte
    Bonjour je suis en ce moment en train d'essayer de créer un petit jeu du style "RPG" avec Delphi pour connaître les caractéristique des joueurs et desennemis j'utilise un fichier "INI" voici le bout de code qui ne marche pas :
    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
    procedure TZonecombat.FormShow(Sender: TObject);
    var // je définit mes variables
    FileIni : TIniFile;
    niv : Integer; //variablequi permet de savoir à quel niveau on est
    nom_clef : String;//variable qui sert à choisir la sectiondu ini en onctiondu niveau
    nom_clef_nom : String;
    nombre_1 : Integer;//contient le nombre d'ennemi du type 1
    nombre_2 : Integer;// du type 2
    nombre_3 : Integer;// et enfin 3
    nombre : Integer;//nombre total d'ennemi
    nom_1 : String;//nombre d'ennemi du type 1
    nom_2 : String;//2
    nom_3 : String;//et 3
    test : Integer;
    begin
    FileIni:=TIniFile.Create('C:\Program Files\ben corp\cache\file.ini');//je prend le fichier ini
    niv := jeu.niveau;//je récupère le niveau qui est situé sur la form 'jeu'
     
    nombre :=StrToInt(FileIni.ReadString(IntToStr(niv), 'nb_ennemi' ,''));//je recupere le nombre total d'ennemi
    nombre_1:=StrToInt(FileIni.ReadString(IntToStr(niv), 'nb_ennemi_1' ,''));//je regarde le nombre dennemi du type 1
    nom_1:=FileIni.ReadString(IntToStr(niv), 'nom_ennemi_1' ,'');//et je prend leur nom
      if  nombre_1 = nombre then begin //Si le nombre total d'ennemi est égal au nombre dennemi du type 1 alors on s'arret c'est qu'il n'y a qu'un seul type d'ennemi dans ce niveau
      Label1.Caption:= 'Vous devez tuer '+IntToStr(nombre_1)+' '+nom_1;//on met à jour le label1 : vous devez tuer x ennemies de noms machin
      end
      else begin//tout ce qui suit est identique sauf que c'est pour ajouter le nom et le nombre d'ennemi quand il y a deux ou trois type d'ennemi
       nombre_2:=StrToInt(FileIni.ReadString(IntToStr(niv), 'nb_ennemi_2' ,''));
    nom_2:=FileIni.ReadString(IntToStr(niv), 'nom_ennemi_2' ,'');
      test:= nombre_1 + nombre_2;
      if test =nombre then begin
       Label1.Caption:= 'Vous devez tuer '+IntToStr(nombre_1)+' '+nom_1+' et '+IntToStr(nombre_2)+' '+nom_2;
       end
       else   begin
       nombre_3:=StrToInt(FileIni.ReadString(IntToStr(niv), 'nb_ennemi_3' ,''));
    nom_3:=FileIni.ReadString(IntToStr(niv), 'nom_ennemi_3' ,'');
       Label1.Caption:= 'Vous devez tuer '+IntToStr(nombre_1)+' '+nom_1+', '+IntToStr(nombre_2)+' '+nom_2+' et '+IntToStr(nombre_3)+' '+nom_3;
    end;
      end;
      end;
    Voici maintenant le fichier ini :
    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
    [section caracteristiques]
    nom_personnage = Cloud
    niveau_personnage = 1
    points_de_vie = 100
    niveau = 1
     
    [1]
    nb_ennemi = 5
    nom_ennemi_1 = mosquito
    nb_ennemi_1 = 4
    nom_ennemi_2 = Mickael la tortue
    nb_ennemi_2 = 1
     
     
    [Mickael la tortue]
    defense = 17
    force = 12
    point_de_vie_max = 100
    argent = 25
    objet = potion
     
    [mosquito]
    defense = 2
    force = 15
    point_de_vie_max = 25
    argent = 5
    objet = 0
    Maintenant le problème toute mes variables qui doivent contenir des données récupéré du fichier ini sont soit égal a '' ou a 0 pour les int
    Merci de m'aider

  2. #2
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nombre :=StrToInt(FileIni.ReadString(IntToStr(niv), 'nb_ennemi' ,''));
    il vaudrait mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nombre := FileIni.ReadInteger(IntToStr(niv), 'nb_ennemi', 0);
    De plus, je pense que le fichier ini devrait plutot etre formaté comme ceci (suppression des espaces autour des =):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [1]
    nb_ennemi=5
    nom_ennemi_1=mosquito
    nb_ennemi_1=4
    nom_ennemi_2=Mickael la tortue
    nb_ennemi_2=1
    Pour comprendre l'erreur produite dans ton cas, il faut voir que l'indent 'nb_ennemi' n'est pas trouvé puisque c'est 'nb_ennemi'(espace en trop a la fin) qui aurait du etre trouvé.
    Du coup, puisque pas d'indent, pas de valeur, et vu que tu tu a mis comme valeur par défaut '', ca te revoit ''.
    Enfin, un IntToStr(''), c pas terrible et ca te dis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '' n'est pas une valeur entière
    Enfin, il faut utiliser le dual de ReadInteger(): WriteInteger() afin de bien ecrire dans le fichier ini.
    "Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
    "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
    "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    nombre_3:=StrToInt(FileIni.ReadString(IntToStr(niv), 'nb_ennemi_3' ,''));
    tu dit de mettre '' si pas de valeur donc plantage en vu

    utilise les fonction du fichier ini readinteger pour tes valeur entiere
    et ensuite encadre la recuperation de tes valeur entiere

    par exemple tu creer une petite function

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function MonObjet.litentier(const Section, Ident: String) : integer
    begin
     Try
         Result :=  FileIni.ReadInteger(Section, Ident ,0);
      ecxept
         Result := 0;
      end;
    end
    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  4. #4
    Débutant
    Inscrit en
    Mars 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    D'accord mais que doi-je mettre pour la valeur par défaut alors car je ne veux pas non plus que lorsque le perso soit au niveau 2 que ça lui prenne les ennemis du niveau 1 !
    En tout cas merci bien de votre aide je suis en train d'essayer je vous tien au courant

    j'ai mit ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    begin
    FileIni:=TIniFile.Create('C:\Program Files\ben corp\cache\file.ini');
    niv := jeu.niveau;
     
    nombre :=FileIni.ReadInteger(IntToStr(niv), 'nb_ennemi', 0);
    nombre_1:=FileIni.ReadInteger(IntToStr(niv), 'nb_ennemi_1', 0);
    nom_1:=FileIni.ReadString(IntToStr(niv), 'nom_ennemi_1' ,'joe');
      if  nombre_1 = nombre then begin
      Label1.Caption:= 'Vous devez tuer '+IntToStr(nombre_1)+' '+nom_1;
      end
    et ca me met vous devez tuer 0 joe !

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    utilise la fonction format qui est tres pratique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if nombre_1 > 0 Then
      Label1.Caption:= format( 'Vous devez tuer %d %s',[nombre_1,nom_1])
    else 
       Label1.Caption:= 'Tous le monde est mort ';
    @+ Phil

    ps :ne pas oublier le tag resolue si c'est le cas merci
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  6. #6
    Débutant
    Inscrit en
    Mars 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    C'est bon l'erreur ne venait pad d'ici c'était que la variable niv ne renvoyait pas 1 mais 0 donc plantage merci quand même beaucoup !

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

Discussions similaires

  1. '' n'est pas une valeur entière.
    Par F@bien.fd dans le forum Débuter
    Réponses: 34
    Dernier message: 30/12/2013, 08h29
  2. exception EconvertError avec le message("n'est pas une valeur correct)
    Par menoulette dans le forum Bases de données
    Réponses: 2
    Dernier message: 10/09/2013, 22h55
  3. Réponses: 3
    Dernier message: 10/11/2011, 17h28
  4. '' n'est pas une valeur en virgule flottante correcte
    Par laala.hamid dans le forum Bases de données
    Réponses: 8
    Dernier message: 22/08/2011, 11h06
  5. radiobutton erreur n'est pas une valeur entière correcte
    Par pierrot67 dans le forum Bases de données
    Réponses: 3
    Dernier message: 12/03/2006, 21h27

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