
Si vous trouvez une manière plus compacte d'écrire ce script, faite moi savoir...
Alain
On ne peut pas joindre de script en fichier attaché (un peu dommage, mais bon...), donc voici le script en entier... Je l'ai appelé conv_normal2compact.pgm, mais vous êtes libre de choisir le nom qui vous plaît...
REM Programme de conversion d'un nom d'astéroïde normal en désignation compacte du MPC.
REM Alain Maury - 26 Janvier 2019
REM la règle est la suivante, si l'astéroïde s'appelle 2019AZ193 la forme compacte est K19AJ3Z
REM c'est le truc complètement évident de convertir 193 en J3...
REM le AZ est mis en 4ème et 7ème colonne, la 5 et 6 sont la forme compacte de 193, c'est à dire J pour 190... et 3 pour le 3
REM Donc de 0 à 99 on met de 0 à 99. à 100, c'est A, 110 B, 120, C, 130, D, 140 E, et ainsi de suite, une fois à Z (350)
REM le script est un peu sauvage (faute d'avoir les mêmes fonctions que dans un compilateur C) mais ça marche...
REM en fait non, carrément sauvage. très barbare, mais on s'en sort quand même
print "Entrez le nom de l'asteroide sans espace"
print "formats valides: 2019AZ, 2019AZ1, 2019AZ24, 2019AZ232"
input name$
REM on s'occupe du siecle, on ne prend en compte que le 20 et le 21ème siècle. Après on sera mort.
substring name$ 1 2 siecle$
if siecle$="19" then
lettre1$="J"
else
lettre1$="K"
endif
REM la décade de l'année.
substring name$ 3 2 annee$
REM ensuite les deux lettres
substring name$ 5 1 lettre5$
substring name$ 6 1 lettre8$
REM c'est là où ça devient sauvage, faute de mieux.
substring name$ 7 1 char7$
if char7$="" then
number$="00"
else
REM on regarde si char8 existe
substring name$ 8 1 char8$
if char8$="" then
REM donc il n'y a qu'un seul chiffre
number$="0"+char7$
else
REM on regarde si char9 existe
substring name$ 9 1 char9$
if char9$="" then
REM Donc il n'y a que deux chiffres
number$=char7$+char8$
else
REM Il y a donc trois chiffres
number$=char7$+char8$+char9$
val number$ number
gosub dechiffre:
endif
endif
endif
REM tadaaa !
nomaster$=lettre1$+annee$+lettre5$+number$+lettre8$
print "designation compacte : " nomaster$
end
dechiffre:
number=number/10
frac number number2
number2=number2*10
strf number2 0 number2$
int number number1
REM et c'est là que ça commence à craindre sérieux, mais j'ai pas trouvé d'autre manière de faire
number1[10]$="A"
number1[11]$="B"
number1[12]$="C"
number1[13]$="D"
number1[14]$="E"
number1[15]$="F"
number1[16]$="G"
number1[17]$="H"
number1[18]$="J"
number1[19]$="K"
number1[20]$="L"
number1[21]$="M"
number1[22]$="N"
number1[23]$="O"
number1[24]$="P"
number1[25]$="Q"
number1[26]$="R"
number1[27]$="S"
number1[28]$="T"
number1[29]$="U"
number1[30]$="V"
number1[31]$="W"
number1[32]$="X"
number1[33]$="Y"
number1[34]$="Z"
number1[35]$="a"
number1[36]$="b"
number1[37]$="c"
number1[38]$="d"
number1[39]$="e"
number1[40]$="f"
number1[41]$="g"
number1[42]$="h"
number1[43]$="j"
number1[44]$="k"
number1[45]$="l"
number1[46]$="m"
number1[47]$="n"
number1[48]$="o"
number1[49]$="p"
number1[50]$="q"
number1[51]$="r"
number1[52]$="s"
number1[53]$="t"
number1[54]$="u"
number1[55]$="v"
number1[56]$="w"
number1[57]$="k"
number1[58]$="y"
number1[59]$="z"
number1$=number1[number1]$
number$=number1$+number2$
return