Souhaitez-vous participer à la création d'un jeu vidéo inspiré de Stardew Valley, ou le tester lorsque la version bêta sera disponible ? Remplissez notre sondage ou inscrivez-vous à notre lettre d'information (en bas de page)
1

C# - Tester une valeur et faire une boucle

le  8-12-2017 à 07:01 #
Bonjour les toiliens (ça faisait tellement longtemps...)

J'ai attaqué il y a quelques jours le C# pour essayer d'améliorer un bot Discord. (Je vous préviens, à partir de là ça va être très long)

Voici le fichier qui regroupe toutes les informations du pokémon : pokemon_list7.json
voici le fichier qui les "pick" : SearchPokemon.cs
voici le fichier qui les affiche : PokemonSearchCommands.cs
Initialement, le bot affiche ceci:

Voilà ce que j'essaie d'obtenir à peu près:


Je sais que pour rajouter "Evolutionnary Line" il va falloir que je fasse une boucle vu que les "prevo" ou "evo" dans le premier fichier ne sont pas listées pour chaque pokémon (En gros, Dracaufeu n'a qu'une seule prevo qui est reptincelle dans le fichier alors que pourtant reptincelle en a aussi une.)
Pour Egg Groups il faut que je test si la valeur est nulle (on affiche "Aucun") ou pas.
Pour la couleur de la boite ".WithOkColor()" affiche forcément du vert "Ok = Vert" mais je n'arrive pas à récupérer la couleur qui est pourtant stockée dans le fichier. Faire style "S'il y a une couleur tu la prends, sinon tu mets en vert".

Voilà ce que j'ai essayé de faire:

PokemonSearchCommands.cs ~ligne 41


Alors oui c'est très simple... je voulais juste pour commencer tester la valeur "evo" voir si elle est nulle ou non et l'afficher mais même ça je suis pas capable car j'ai cette erreur:

Modules/Searches/PokemonSearchCommands.cs(48,22): error CS0117: 'string' does not contain a definition for 'join' [/root/NadekoBot/NadekoBot.Core/NadekoBot.Core.csproj]
Modules/Searches/PokemonSearchCommands.cs(50,7): error CS0103: The name 'Console' does not exist in the current context [/root/NadekoBot/NadekoBot.Core/NadekoBot.Core.csproj]


Pour la boucle afin de faire "Evolutionnary Line" je pensais faire un truc du style:
prevos=True

while prevos
{
if poke.prevolution!='':
// ajouté à la liste
else:
prevos=False


Un coup de main serait le bienvenue

(Modifié par Pierrou le 08-12-2017 à 07:02)

(Modifié par Pierrou le 08-12-2017 à 07:11)

Ajout du 08-12-2017 à 12:41:

Bon j'ai réussi à faire les tests tout ça mais je bloque sur la boucle

PasteBin

J'ai testé ça mais j'ai l'erreur

Modules/Searches/PokemonSearchCommands.cs(76,28): error CS1012: Too many characters in character literal [/root/NadekoBot/NadekoBot.Core/NadekoBot.Core.csproj]

Re: C# - Tester une valeur et faire une boucle
le  8-12-2017 à 14:08 #
Je ne connais rien à ton truc mais je te pose ma question idiote

que se passe t'il si la condition
if (p.Prevo == null || !p.Prevo.Any())
n'est jamais satisfaite ?
Re: C# - Tester une valeur et faire une boucle
le  8-12-2017 à 17:06 #

le  8-12-2017 à 14:08, @rokag3 :
que se passe t'il si la condition
if (p.Prevo == null || !p.Prevo.Any())
n'est jamais satisfaite ?

Il passe dans le else et concatène une chaine. La terminaison de la boucle est assurée par le foreach, qui prend les éléments d'un tableau un par un.

L'erreur en rouge indique qu'il ne trouve pas string.Join ni Console, il manquait des using ?

Dans le fichier hébergé sur Pastebin tu déclares var prevo = ""; mais ensuite tu fais référence à une variable prevos. Il est possible que ce soit ce qui cause ton erreur.

Note qu'il n'est pas interdit de commenter son code et de donner des noms significatifs aux variables
Je crois que tu as confondu p et p2 à un moment donné aussi (mais est il vraiment utile de le dédoubler ?)

(Modifié par ben le 08-12-2017 à 17:12)
Re: C# - Tester une valeur et faire une boucle
le  8-12-2017 à 18:21 #
Il passe dans le else et concatène une chaine. La terminaison de la boucle est assurée par le foreach, qui prend les éléments d'un tableau un par un.


en effet il concatène mais si il ne remplit pas la condition if (p.Prevo == null || !p.Prevo.Any()) alors prevos = "Aucune";n'est jamais réalisé et la chaîne vas continuer à grandir je ne connais pas les procédés d'allocation mémoire mais cela risque de poser problème non.?

En cherchant sur la doc

// CS1012.cs
class Sample
{
static void Main()
{
char a = 'xx'; // CS1012 donc si prevos a été déclaré comme char l'erreur est là
char a2 = 'x'; // OK
System.Console.WriteLine(a2);
}
}


Modules/Searches/PokemonSearchCommands.cs(76,28): error CS1012: Too many characters in character literal [/root/NadekoBot/NadekoBot.Core/NadekoBot.Core.csproj]

https://msdn.microsoft.com/en-us/library/185szk2f(v=vs.90).aspx

Too many characters in character literal
An attempt was made to initialize a char constant with more than one character.
CS1012 can also occur when doing data binding. For example the following line will give an error:
<%# DataBinder.Eval(Container.DataItem, 'doctitle') %>
Try the following line instead:
<%# DataBinder.Eval(Container.DataItem, "doctitle") %>
The following sample generates CS1012:



Des VariablesParlantesSontEffectivementUneBonneIdee

(Modifié par rokag3 le 08-12-2017 à 18:24)
Re: C# - Tester une valeur et faire une boucle
le  8-12-2017 à 19:31 #
En fait le code ne devrait pas compiler avec une variable non déclarée. Je pense qu'on a pas la bonne version.
Re: C# - Tester une valeur et faire une boucle
le 11-12-2017 à 00:01 #
En effet, le code se compile pas lorsque j'ai ce genre d'erreurs : Modules/Searches/PokemonSearchCommands.cs(76,28): error CS1012: Too many characters in character literal [/root/NadekoBot/NadekoBot.Core/NadekoBot.Core.csproj]

Bon après de nombreux essais je suis arrivé à un résultat satisfaisant !



Merci tout de même pour votre aide je risque fort de vous redemander de l'aide car je commence à peine à coder en C#...




Ces discussions pourraient vous intéresser également:


La boucle qui se boucle qu'une seule fois
Tester son niveau de "piratage"
tester connexion fichier access depuis un vb
Boucle en batch
problème de boucle (