[DB-AL] Convertir un String en int

Pour les scripts écrits en Javascript (UnityScript). :!: Obsolète :!:
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Avatar de l’utilisateur
jeux007
Messages : 45
Inscription : 20 Nov 2011 23:59
Localisation : Mont de Marsan
Contact :

[DB-AL] Convertir un String en int

Message par jeux007 » 26 Oct 2016 17:14

Bonjour a tous,
voila J'ai un probléme dans un de mes scripts pour convertir un String en Int, je m'explique :
Mon script lit dans un fichier texte toute les lignes, Une ligne du fichier texte est du style : Arme_M4A1_08
Ensuite en gros mon script prend la fin de la ligne(Le 08) grâce a un Substring puis il doit le convertir en int et y rajouter un nombre. Le probléme c'est que je n'arrive pas a le convertir en int il me dit comme message d'erreur qu'il est impossible de convertir un String en Int. Voila le bout du script , Merci d'avance pour votre aide :)

Code : Tout sélectionner

function Ajout(T:String, O:String, N:int){
 var openfile = new File.OpenText( Application.dataPath + "\\Stuff.txt" );
 var tampon = new File.OpenWrite(Application.dataPath + "\\Tampon.txt");

 while(openfile){
 var line=openfile.ReadLine();

   if(line=="End"){
   tampon.Flush();
   tampon.Close();
   break;
   }
   
   if(line.IndexOf(T)!=-1 && line.IndexOf(O)!=-1){  //On est sur la bonne ligne
        if(T=="arme"){
          var nbr=int.Parse(line.Substring(10,2))+N;
          nbr=nbr.ToString();
          tampon.WriteLine(line.Substring(0,9)+nbr);
                                  }
    }else{
   tampon.WriteLine(line);
         }

                             }

                                                                 }

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: [DB-AL] Convertir un String en int

Message par Moi 1971 » 26 Oct 2016 17:22

Bonjour,
Je n'y connais pas grand chose en Javascript, mais je pense que le problème vient de cette ligne :

Code : Tout sélectionner

nbr=nbr.ToString();}
nbr est de type Int à cause de la ligne du dessus et le code essaye de la transformer en String. Il faut passer par une variable temporaire, peut-être comme ceci :

Code : Tout sélectionner

if(line.IndexOf(T)!=-1 && line.IndexOf(O)!=-1){  //On est sur la bonne ligne
        if(T=="arme"){
          var nbr=int.Parse(line.Substring(10,2))+N;
          var nbr_tmp=nbr.ToString();
          tampon.WriteLine(line.Substring(0,9)+nbr_tmp);
}

Avatar de l’utilisateur
jeux007
Messages : 45
Inscription : 20 Nov 2011 23:59
Localisation : Mont de Marsan
Contact :

Re: [DB-AL] Convertir un String en int

Message par jeux007 » 26 Oct 2016 17:26

Merci Beaucoup!! En effet tu avais raison je pensais que c'était possible de convertir directement enfin bref^^ Merci :D

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: [DB-AL] Convertir un String en int

Message par Alesk » 28 Oct 2016 09:38

Salut,

Pas besoin de variable temporaire, tu peux faire directement :

Code : Tout sélectionner

 tampon.WriteLine(line.Substring(0,9) + nbr.ToString() );
Mais là ça ne va pas additionner les nombres, juste faire une concaténation.

Donc tu veux faire quoi exactement ? Mettre les nombres bout à bout ou bien faire une addition ?

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6222
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] Convertir un String en int

Message par boubouk50 » 28 Oct 2016 10:20

Je crois que le problème de cast est résolu, Alesk. D'après le code, il veut juste récupérer le 08 pour l'incrémenter de N et le réinjecter dans la chaîne de caractères pour l'écrire dans le fichier tampon.

Code : Tout sélectionner

 if(T == "arme") {
 	tampon.WriteLine (line.Substring (0,9) + (int.Parse (line.Substring (10,2)) + N).toString ());
}
@jeux007: Si ton problème est résolu, édite le titre de ton premier post en ajoutant [RESOLU] au début.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: [DB-AL] Convertir un String en int

Message par Alesk » 29 Oct 2016 21:20

boubouk50 a écrit :Je crois que le problème de cast est résolu, Alesk. D'après le code, il veut juste récupérer le 08 pour l'incrémenter de N et le réinjecter dans la chaîne de caractères pour l'écrire dans le fichier tampon.

Code : Tout sélectionner

 if(T == "arme") {
 	tampon.WriteLine (line.Substring (0,9) + (int.Parse (line.Substring (10,2)) + N).toString ());
}
@jeux007: Si ton problème est résolu, édite le titre de ton premier post en ajoutant [RESOLU] au début.
Oui, j'avais bien compris, mais c'est sur l'objectif final que j'avais un doute.
Et là il va il y avoir un souci car si dans la ligne originale il y a un "08", le convertir en int pour lui ajouter 1, puis le reconcaténer dans la chaine fera un "9" et pas "09" ... du coup la fois suivante le nombre ne sera pas récupéré correctement car il manquera le 0 avant.
Et si la valeur dépasse 99 là il faudra chopper 3 caractères au lieu de seulement 2.

Il faut donc appliquer un formatage à la valeur numérique avant de la concaténer à la chaine. -> http://www.csharp-examples.net/string-format-int/
Et aussi s'assurer de la valeur maximale que peut prendre la variable.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6222
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] Convertir un String en int

Message par boubouk50 » 02 Nov 2016 09:47

Alesk a écrit :Oui, j'avais bien compris, mais c'est sur l'objectif final que j'avais un doute.
Et là il va il y avoir un souci car si dans la ligne originale il y a un "08", le convertir en int pour lui ajouter 1, puis le reconcaténer dans la chaine fera un "9" et pas "09" ... du coup la fois suivante le nombre ne sera pas récupéré correctement car il manquera le 0 avant.
Et si la valeur dépasse 99 là il faudra chopper 3 caractères au lieu de seulement 2.

Il faut donc appliquer un formatage à la valeur numérique avant de la concaténer à la chaine. -> http://www.csharp-examples.net/string-format-int/
Et aussi s'assurer de la valeur maximale que peut prendre la variable.
+1 Tutafait!
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Verrouillé

Revenir vers « (Js) Javascript »