Script de conversion de nom d'astéroïdes

L'utilisation et la création des scripts.
Répondre
Alain-Maury
Messages : 87
Enregistré le : 19 juin 2009, 04:14

Script de conversion de nom d'astéroïdes

Message par Alain-Maury » 26 janv. 2019, 10:32

Le MPC, vraisemblablement programmant encore tout en fortran (le genre de gros nases qui ne sont pas encore passés à Prism :) ), avec des formats de fichiers assez strict s'est trouvé assez dépourvu il y a une paire d'années quand on a commencé à trouver beaucoup d'astéroïdes. Pour rester dans le format limité à 7 caractères, pas un de moins pas un de plus, qu'ils avaient, ils ont mis en place une dénomination compacte (voir https://www.minorplanetcenter.net/iau/i ... edDes.html ), et je m'étais dit qu'un jour je ferai un bout de script pour convertir le format normal (genre 2019AZ186) en format compact. Sous prism parce que souvent lorsque je regarde un astéroïde, c'est avec prism. Faute d'avoir les fonctions de manipulation de chaînes de caractères qu'on a dans un compilateur normal, j'ai pu quand même ruser, et le script suivant semble bien faire la bonne conversion. Il faut rentrer le nom de l'astéroïde en ne mettant pas d'espace entre l'année et les lettres et les numéros qui suivent éventuellement. Donc 2019AZ186. Ce qui donne K19AJ6Z
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

Répondre