Gambas France BETA


Pas de compte ? Incription

Formater un entier

Ce sujet est résolu.

1
AuteurMessages
Foromus#1 Posté le 30/12/2022 à 08:12:22
Bonjour à tous,

Pour les besoins de la cause, je souhaiterais utiliser un entier formaté, genre "integer arrangé".
J'ai une variable qui peut évoluer de 0 à 900, mais elle est utilisée dans un chemin, aussi, il faudrait que ladite soit systématiquement composée de 3 chiffres, quelle que soit sa valeur, c-à-d :
-) 2 => 002
-) 15 => 015
-) 101 => 101
J'ai pensé à la fonction format$, ô combien puissante du genre
Nombre = formant$(Nombre,###)
mais en haut lieu, ça ne plaît pas du tout.
Je lance donc un appel désespéré pour trouver la soluce, ce qui m'éviterait d'utiliser un contournement assez énergivore en utilisant des if suivant que ma variable contient 1, 2 ou 3 chiffres !
Merci pour votre aide.
valaquarus#2 Posté le 30/12/2022 à 12:24:35
-- Unus Ex Altera --Bonjour Foromus,
ce que tu nommes le haut lieu ne serait-ce pas le fait qu'il y a rejet entre une valeur numérique et une valeur string.
Les affichages doivent se faire avec : cstr(Nombre) = formant$(Nombre,###) et les calculs avec : nombre = cint(val(formant$(Nombre,###)).
Si tu croises les genres entre eux (string et number) ça va vite coincer.
Valaquarus
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
spheris#3 Posté le 30/12/2022 à 13:06:47
Foromus bonjour,
Un integer ne peut s'afficher comme tu le souhaites.
Il faut tout simplement le convertir en string et lui effectuer un petit traitement comme ceci :


Tu crées une méthode avec le code ci dessous :

1
2
3
4
5
6
7
8
9
10
PRIVATE FUNCTION conversion(lenombre AS INTEGER) AS STRING
SELECT CASE lenombre
CASE 0 TO 9
RETURN "00" & Str[lenombre]
CASE 10 TO 99
RETURN "0" & Str[lenombre]
CASE 100 TO 999
RETURN Str[lenombre]
END SELECT
END


Ensuite dans ton programme il te suffit d'écrire ceci :

1
2
3
DIM bob AS STRING
bob = conversion(12)
PRINT bob


pour l'exemple ci-dessus j'ai pris le nombre 12.
la commande print bob te renverra le contenu de la variable bob soit 012 qui est de type string.

Ce premier exemple fonctionne pour des valeurs comprises entre 0 et 999

;)


Edit : Allez, une variante:
je complique ou plutôt simplifie un peu !

déclare cette variable :
1
PRIVATE mystring AS String[] = ["", "00", "0", ""]


puis ta méthode de conversion modifiée comme ceci:

1
2
3
PRIVATE FUNCTION conversion(lenombre AS INTEGER) AS STRING
RETURN mystring[Len(Str(lenombre))] & Str(lenombre)
END


Enfin, l'appel à ta méthode n'a pas changée :

1
2
3
DIM bob AS STRING
bob = conversion(12)
PRINT bob


Ce deuxième exemple fonctionne aussi pour des valeurs comprises entre 0 et 999.
Sauf qu'il est modifiable très simplement.

:bounce: :bounce:


Foromus#4 Posté le 31/12/2022 à 10:47:27
Bonjour à tous,

Merci pour vos réponses !
Il y a certainement du vrai dans ce que me dit valaquarus, j'ai un peu travaillé la question et je ne suis pas trop sûr de mon coup...
Pour le code de spheris, ça marche bien, mais en voulant l'appliquer, je me rends compte que mon approche du problème n'est pas appropriée...
Suite à ma réflexion, j'envisage une autre piste, ne serait-ce que pour me faire plaisir : utiliser une gridview.
Seulement, voilà, je ne maîtrise pas vraiment...

Au passage je sollicite une autre aide, en matière d'aide, justement.
Sur le wiki en ma possession, j'ai bien une entrée pour une définition - voire des exemples - sur les commandes, je ne trouve rien sur les contrôles, en clair, je ne dois pas chercher au bon endroit. Si j'arrive à utiliser les classiques (bouton, label, etc), d'autres sont moins courants, et si j'ai déjà utilisé la gridview dans une vie antérieure, je ne sais plus trop de qui, de quoi, comment, et donc si je trouvais une explication exhaustive et pertinente, et surtout à ma portée, je pourrais alors envisager une utilisation sereine...
Je crois me souvenir de certaines choses, mais pas toutes, ne serait-ce que le numéro d'ordre de chaque ligne, je crois qu'il part de zéro, comme dans les listes, à la limite, je pourrais peut-être aussi utiliser une liste, je vais voir, quand j'aurai les ingrédients pour mener mâture réflexion.
Merci à vous !
spheris#5 Posté le 31/12/2022 à 13:57:03
Les bases de la gridview:

1) Dimensionner une grille en premier

1
2
Gridview1.columns.count = 5
gridview1.rows.count = 5


2) pour ecrire dans une cellule


pour la cellule en haut a gauche
1
gridview1[0,0].text = "Montexte"

pour celle de la ligne d'en dessous
1
gridview1[1,0].text = "Montexte"


pour mettre une image, la meme chose :
1
gridview1[0,0].Picture = Picture["cheminversmonimage"]



Pour récupérer le texte dans la cellule cliquée:

1
2
3
4
PUBLIC SUB Gridview1_click()
DIM montexte AS STRING
montexte = gridview1[gridview1.Row,gridview1.column].text
END


Plein d'autres finesses mais voilà l'essentiel.
;)

End

valaquarus#6 Posté le 31/12/2022 à 14:09:50
-- Unus Ex Altera --Bonjour Foromus,
un petit lien pour t'aider dans tes recherches : les Contrôles, un par un.
Et, un autre : Gridview
Valaquarus
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
linuxos#7 Posté le 31/12/2022 à 14:39:31
Un peu de sel, de poivre et la crevette sera... Bonjour,

La réponse est juste la:
Nombre = formant$(Nombre,"000")

Le "0" force a afficher un Zéro a la place ou il est placé (1er rang, 2eme, 3eme, etc) dans le cas ou il n'y a pas de chiffre dans le nombre.

Voici la doc:
Syntaxe de formatage d’une expression numérique Format$()
+ Imprime le signe du nombre.
- N’imprime le signe du nombre que s’il est négatif.
# N’imprime un chiffre que si nécessaire.
Le nombre est complété à gauche par des espaces pour que le nombre de caractères imprimés avant le séparateur décimal
soit supérieur ou égal au nombre de # avant le séparateur décimal.
0 Imprime toujours un chiffre, ajoute des zéros si nécessaire.
. Imprime le séparateur décimal.
, Imprime le séparateur des milliers.
% Multiplie le nombre par 100 et imprime le signe de pourcentage.
E Débute la partie exponentielle d’un nombre Float. Le signe de l’exposant est toujours imprimé.

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
Foromus#8 Posté le 1/1/2023 à 15:56:56
Bonjour à tous,

Et bonne année de surcroît...
Merci pour les renseignements.
Pour le coup de Nombre = formant$(Nombre,"000"), je pensais avoir essayé, sans succès me semble-t-il, je vais réessayer, pour voir.
Après, j'ai un peu potassé ma Gridview, je m'en suis sorti honorablement.
En réalité, j'ai fait une erreur de discernement dans la pré-étude de mon code, l'utilisation de Gridview est beaucoup plus pertinente que de m'amuser au formatage, et mon code est notablement simplifié.
Je suis très heureux de connaître la page d'aide des contrôles, j'ai eu beau chercher, je ne suis jamais arrivé à tomber dessus, là, placée en favoris, séance tenante.
Je passe donc en résolu, j'ai encore reçu + d'aide qu’espéré !
Merci à tous !
1