TypeOf() avec un paramétre sans Data Type

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

TypeOf() avec un paramétre sans Data Type

Message par falsam »

En JavaScript la fonction TypeOf() renvoie le datatype de la donnée figurant en paramètre.

Par exemple si je debug typeof("test") le résultat sera String. Notez que je ne passe pas une variable.

Vous pouvez voir ce que ça donne en cliquant sur ce lien.
:arrow: http://jsfiddle.net/falsam/xg3acvqs/

En PureBasic ce n'est pas possible. On doit passer obligatoirement un paramètre avec un datatype.

J'ai cherché une solution de contournement mais hélas .... rien.

Peut être que parmi vous quelqu'un a une idée à me proposer. D'avance merci.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: TypeOf() avec un paramétre sans Data Type

Message par falsam »

Finalement j'ai trouvé en passant par une macro faisant appel à une fonction qui va retourner #PB_Integer ou #PB_Float ou #PB_String.

Mise à jour du 12 Septembre : Ajout #PB_Float

Code : Tout sélectionner

; GetTypeOf(Value)
; Contributor falsam 
;
; PB 4.31 -> 4.40
;

Procedure _GetTypeOf(numstr.s)
  Protected Result, Pattern.s = "^[-+]?[0-9]*\.?[0-9]+$"
  Protected RegEx = CreateRegularExpression(#PB_Any, Pattern)
  If RegEx
    Result = MatchRegularExpression(RegEx, numstr)
    FreeRegularExpression(RegEx)
    If result
      If CountString(numstr, ".") = 1
        ProcedureReturn #PB_Float
      Else
        ProcedureReturn #PB_Integer
      EndIf
    Else
      ProcedureReturn #PB_String
    EndIf
  EndIf
EndProcedure

Macro Quote
  ""
EndMacro

Macro GetTypeOf(Value=)
  _GetTypeOf(Quote + Value + Quote)
EndMacro

Debug GetTypeOf("test") ;String
Debug GetTypeOf("10")   ;Integer
Debug GetTypeOf("10.10");Float
Debug GetTypeOf(10)     ;Integer
Debug GetTypeof(10.10)  ;Float
Debug GetTypeof(-10.10) ;Float
Si vous avez mieux en plus court, bien évidement que je suis preneur.
Dernière modification par falsam le sam. 12/sept./2015 22:39, modifié 8 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Brayane
Messages : 54
Inscription : jeu. 27/août/2015 14:08

Re: TypeOf() avec un paramétre sans Data Type

Message par Brayane »

Jolie code Falsam, bien joué :wink:

Je pense qu'il est peut être possible d'améliorer mais c'est vraiment bien vue ça :wink:
Merci à toi au passage :)
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: TypeOf() avec un paramétre sans Data Type

Message par Micoute »

J'apprécie aussi beaucoup.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: TypeOf() avec un paramétre sans Data Type

Message par Ollivier »

Falsam a écrit :Si vous avez mieux en plus court, bien évidement que je suis preneur.
enlève un '+ quote'

Le problème c'est vérifier ce que donne "10", s'il te file un entier, c'est que c'est loopé...
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: TypeOf() avec un paramétre sans Data Type

Message par falsam »

Ollivier a écrit :enlève un '+ quote'
Effectivement ça fonctionne aussi. Ce système de macro m'étonnera toujours.
Ollivier a écrit :Le problème c'est vérifier ce que donne "10", s'il te file un entier, c'est que c'est loopé...
Pas de loupé puisque la fonction retourne bien un string il me semble (Avec ou sans Quote supplémentaire.)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: TypeOf() avec un paramétre sans Data Type

Message par Ollivier »

Quand j'ai vu les limitations de mix de type, j'ai préféré ignorer cette opération.

C'est pour cette même cause que tu as laissé quelque chose à droite.

En maîtrisant le bug (ou la limitation) tu t'es permis de l'abstraire.

5.22 LTS x86 Ok aussi.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: TypeOf() avec un paramétre sans Data Type

Message par falsam »

Je suppose que tu as essayé non ? et ça te donne un integer
Dernière modification par falsam le ven. 11/sept./2015 23:22, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: TypeOf() avec un paramétre sans Data Type

Message par falsam »

Spock a écrit :ben c'est pas trop normal , puisque c'est entre guillemets
Surement, mais moi ça me convient bien.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: TypeOf() avec un paramétre sans Data Type

Message par Ollivier »

Il y a 5 tests à faire :

1) "zzz"
2) "10"
3) zzzi (variable entier)
4) zzzs (var chaîne)
5) 10

2 combinaisons de résultats (chaîne & entier) par test,
Ça fait 32 combinaisons,
soit 32 rings pour vous mettre sur la Gée.

Vu, comme c'est parti, là, déjà, vous avez squatté chacun un ring, soit une combinaison, presque une demi-page.

J'estime donc, en proportion, ce sujet à 16 pages, si l'on ne vous bride pas. Alors je vais ptêt faire l'hôpital qui se fout de la charité, mais trouver une solution de conciliation: focalisons sur la technique.

Une question simple : faut-il 32 macros pour obtenir toutes les solutions de fonctionnement de ce procédé?
Si oui, lesquelles?

Pour vous donner une idée, moi, il me faut une semaine pour trouver ça actuellement en usant du Net.

Autant le faire soi-même, mais là je n'ai pas le temps, il est 1 h du mat. Et je n'aurai pas le temps après.

Donc, penchez-vous sur ça: quelles formes peuvent-elles avoir ces macros? Sont-elles possibles?

En tout cas, bon week.

(PS: Je n'ai pas pensé au dollar '$' qui est une extension de la combinaison 4.)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: TypeOf() avec un paramétre sans Data Type

Message par falsam »

@Ollivier: Ma problématique de base était juste de savoir si le résultat est String ou Integer en n'ayant que ce type d'exemple

Code : Tout sélectionner

GetTypeOf("Mon application") ;String of course
GetTypeOf(10) ;Integer
GetTypeOf(-10);Integer
GetTypeOf(10.10);Integer
GetTypeOf(-10.10);Integer
GetTypeOf("10") ;Integer
Tes tests 3 et 4 sont hors propos car tu me demandes de tester des variables hors ce n'est pas l'objet de la question initiale de ce topic. L'instruction TypeOf() est dans ce cas plus approprié.
Ollivier a écrit :Pour vous donner une idée, moi, il me faut une semaine pour trouver ça actuellement en usant du Net.
Tu te poses trop de question et tu compliques inutilement une question qui à la base était simple mais peut être mal lu vu l'heure tardive :wink:
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: TypeOf() avec un paramétre sans Data Type

Message par falsam »

Mise à jour : L'instruction Debug n'avait rien à faire dans la macro GetTypeOf(). Code mise à jour.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Brayane
Messages : 54
Inscription : jeu. 27/août/2015 14:08

Re: TypeOf() avec un paramétre sans Data Type

Message par Brayane »

Salut,

Code : Tout sélectionner

Debug GetTypeOf("test") ;String
Debug GetTypeOf("10")   ;Integer -> Integer ???????, pas plutôt String ?
Debug GetTypeOf(10)     ;Integer
Debug GetTypeof(10.10)  ;Integer
Debug GetTypeof(-10.10) ;Integer

Abc$ = "Azer"
Def = 123

Debug GetTypeOf(Abc$) ;String
Debug GetTypeOf(Def)  ;Integer

Debug GetTypeOf("Azer" + Str(32) + "Edf") ;String

Jfk$ = "147.258"
Debug GetTypeOf(Str(10 + 25 * 45 / 85 + Val(Jfk$))) ; -> Integer ???????, pas plutôt String ?
; Debug GetTypeOf(10 + 25 * 45 / 85 + Val(Jfk$)) ; Ici fonctionne pas
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: TypeOf() avec un paramétre sans Data Type

Message par Ollivier »

Suite à MàJ:

Code : Tout sélectionner

Debug GetTypeOf("test") ;String (a)
Debug GetTypeOf("10") ;Integer (b)
Debug GetTypeOf(10) ;Integer (c)
Debug GetTypeof(10.10) ;Integer (d)
Debug GetTypeof(-10.10) ;Integer (e)
Lignes (d) et (e) non conformes.
Suggestion a écrit : expression : (a)
number : (b) (c) (d) (e)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: TypeOf() avec un paramétre sans Data Type

Message par falsam »

Brayane a écrit :Debug GetTypeOf(Str(10 + 25 * 45 / 85 + Val(Jfk$))) ; -> Integer ???????, pas plutôt String ?
Non le contenu est bien un integer bien que encadré par des apostrophes. Voir mon exemple Debug GetTypeOf("10") qui retourne lui aussi un integer.
Brayane a écrit :; Debug GetTypeOf(10 + 25 * 45 / 85 + Val(Jfk$)) ; Ici fonctionne pas
Ben non ça ne fonctionne pas.

Je l'ai signalé dans mon premier message, j'ai cherche une solution de contournement pour répondre à une demande simple. Cette solution de contournement s'apparente pour moi à une rustine en espérant qu'un jour la fonction native TypeOf() répondra à ma question initiale.

Désolé que cette solution ne s'adapte pas forcément à ta demande de calcul.

:idea: Je me sert de ce code pour évaluer des choses simples comme un string (Exemple GetTypeOf("test") )et non pas un integer déguisé en string (Exemple GetTypeOf("10") ) et pour évaluer des simple integer (Exemple GetTypeOf(10) )
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre