StringField indice 0
Publié : mer. 26/mars/2014 11:24
Hello,
StringField est une fonction très intéressante, cependant, il est dommage que l'affectation des indices commence à 1 alors que le même type de fonction dans d'autres langages commence souvent à 0 ce qui est parfois utile.
Dans ma petite pendulette, je met le jour en lettres en utilisant la très classique fonction DayOfWeek.
StringField permet de faire l'affectation rapide, sauf que dimanche = 0
et StringField commence à 1
J'ai donc fait une bidouille (moche)
, c'est à dire mettre Dimanche en dernière position et mettre un if pour réaffecter 0 au 7 ieme élément (je m'explique sans doute mal)
Ça marche, mais esthétiquement c'est laid
J'avais aussi fait avant, ceci:
Techniquement satisfaisant, mais ça prend pas mal de place pour juste affecter 7 et 12 valeurs
Il y a aussi la façon old school
Facile à lire, mais moche
Dans certains langages, comme Perl, on peut faire ceci
et hop, c'est plié: le premier est à l'indice 0, etc (et si on veut commencer à 1 il suffit de laisser une valeur nulle au début)
Ce type de remplissage de tableau serait bien, car ça va vite.
Avoir une syntaxe de ce type serait super, mais c'est peut-être beaucoup à programmer ?
D'où ma suggestion: ajouter un paramètre optionnel à StringField pour lui indiquer de commencer à 0 et non pas 1
Resultat$ = StringField(Chaine$, Index, Delimiteur$)
Donnerait quelque-chose comme ça:
Resultat$ = StringField(Chaine$, Index, Delimiteur$ [, 0])
En mettant le dernier paramètre comme optionnel, on assure la compatibilité ascendante.
Cela dit, je ne sais pas si c'est facile à réaliser ou très complexe pour éventuellement peu de demandes. (j'ai vu pas mal de sources où il faut bidouiller pour utiliser l'indice 0)

StringField est une fonction très intéressante, cependant, il est dommage que l'affectation des indices commence à 1 alors que le même type de fonction dans d'autres langages commence souvent à 0 ce qui est parfois utile.
Dans ma petite pendulette, je met le jour en lettres en utilisant la très classique fonction DayOfWeek.
StringField permet de faire l'affectation rapide, sauf que dimanche = 0

J'ai donc fait une bidouille (moche)

Code : Tout sélectionner
JourSem = DayOfWeek(Date()) : If JourSem = 0 : JourSem = 7 : EndIf
DateJour$ = StringField("Lundi , Mardi , Mercredi , Jeudi , Vendredi , Samedi, Dimanche", JourSem, ",") +
Day(Date()) +
StringField(" Janvier , Février , Mars , Avril , Mai , Juin , Juillet , Août , Septembre , Octobre , Novembre , Décembre ", Month(Date()), ",") +
Year(Date())
Debug "Date du jour: " + DateJour$

J'avais aussi fait avant, ceci:
Code : Tout sélectionner
Global Dim JourTXT$( 7)
Global Dim MoisTXT$(12)
DataSection
JourSemaine: : Data.s "Dimanche ", "Lundi ", "Mardi ", "Mercredi ", "Jeudi ", "Vendredi ", "Samedi"
Mois: : Data.s " Janvier ", " Février ", " Mars ", " Avril ", " Mai ", " Juin ", " Juillet ", " Août ", " Septembre ", " Octobre " , " Novembre ", " Décembre "
EndDataSection
Restore JourSemaine : For i = 0 To 6 : Read.s JourTXT$(i) : Next i
Restore Mois : For i = 1 To 12 : Read.s MoisTXT$(i) : Next i

Il y a aussi la façon old school
Code : Tout sélectionner
JourTXT(0) = "Dimanche"
JourTXT(1) = "Lundi"
etc

Dans certains langages, comme Perl, on peut faire ceci
Code : Tout sélectionner
my @Jour = ( "Dimanche", "Lundi", "Mardi", ... )
Code : Tout sélectionner
my @Jour = ( "", "Lundi", "Mardi", ... )
Code : Tout sélectionner
JourTxt$() = ("Dimanche", "Lundi", ...)
Avoir une syntaxe de ce type serait super, mais c'est peut-être beaucoup à programmer ?
D'où ma suggestion: ajouter un paramètre optionnel à StringField pour lui indiquer de commencer à 0 et non pas 1
Resultat$ = StringField(Chaine$, Index, Delimiteur$)
Donnerait quelque-chose comme ça:
Resultat$ = StringField(Chaine$, Index, Delimiteur$ [, 0])
En mettant le dernier paramètre comme optionnel, on assure la compatibilité ascendante.
Cela dit, je ne sais pas si c'est facile à réaliser ou très complexe pour éventuellement peu de demandes. (j'ai vu pas mal de sources où il faut bidouiller pour utiliser l'indice 0)
