Bonjour,
je voudrais tester qu'une variable est un nombre décimal (avec un point comme séparateur décimal) compris entre -90 et 90. En cas de succès l'étape suivante sera de la convertir en degré - minute - seconde.
Mes recherches m'ont amené à considérer la commande bc -l mais je n'y arrive toujours pas.
Une bonne âme aurait-elle la gentillesse de me donner un coup de main ?
Merci d'avance
# locale et mathematiques
Posté par NeoX . Évalué à 1.
je dis surement une connerie, mais ta locale est surement en francais
le . n'est donc pas un separateur unité.dixieme
il faut donc, soit passer en locale anglaise/americaine,
soit changer tes . en ,
# J'ai fini par trouver
Posté par Vincent Gay (site web personnel) . Évalué à 2.
si $Latitude contient autre chose qu'un nombre $Comp sera vide, sinon la comparaison se fera et retournera 1 si vrai et 0 si faux
pour le reste c'est facile
Bon, mon codage de débutant va faire sourire ici, mais ça marche (enfin, me semble-t-il)
Si quelqu'un veut proposer mieux…
Au fait : bc se fout visiblement des locales
[^] # Re: J'ai fini par trouver
Posté par Marotte ⛧ . Évalué à 2.
C'est clair.
Et je pense que c'est pas plus mal.
# Mais pourquoi diable le shell?
Posté par Michaël (site web personnel) . Évalué à 1.
Le langage de programmation du SHELL sert à décrire des procédures de haut niveau en termes de processus. Est-ce que tu as de bonnes raisons de faire ta conversion au niveau du shell? Sinon inclus cette procédure dans un programme externe écrit avec un autre langage.
Le shell n'est résolument pas fait pour mainpuler explicitment des données: ce qu'il sait bien faire c'est faire transiter des données opaques (fichiers) d'un processus à l'autre.
[^] # Re: Mais pourquoi diable le shell?
Posté par Vincent Gay (site web personnel) . Évalué à 2.
Oui, sans doute, mais je ne suis pas un programmeur et j'ai la flemme d'appendre un langage qui me servirait 2 fois par an et dont j'oublierai tout d'une fois sur l'autre… J'ai essayé une fois de me mettre à perl, je ne sais même plus dire "hello world" :)
Et puis finalement, ça ne marche pas si mal le bash, la preuve
[^] # Re: Mais pourquoi diable le shell?
Posté par Michaël (site web personnel) . Évalué à 4.
C'est une assez bonne raison! :)
Pour enrichir ton vocabulaire je te suggère te regarder le Perl Cookbook: il est rempli d'exemples que tu peux copier et éditer, plutôt pratique si tu n'as qu'une pratique sporadique! (Si tu spikes ingliche.)
http://docstore.mik.ua/orelly/perl/cookbook/index.htm
Voilà d'ailleurs un exemple de procédure Perl qui fait ce que tu veux
convertDecimalToDegMinSec
:http://jaystile.wordpress.com/2009/02/21/perl-converting-decimal-to-degrees-minutes-seconds-and-vice-versa/
Je ne peux pas deviner à quoi ressemble ton traitement, mais si tu as une boucle où tu convertis beaucoup de ces nombresx tu as intérêt à l'écrire avec un filtre perl. De façon générale c'est toujours bien d'organiser ses programmes shell en termes de flux de données (c'est-à-dire, écrire des fonctions fonctionnant comme des filtres). Malheureusement ce n'est pas toujours hyper intuitif, mais j'ai écrit un petit exemple un peu détaillé là:
https://linuxfr.org/forums/programmationshell/posts/le-plus-petit#comment-1383883
[^] # Re: Mais pourquoi diable le shell?
Posté par Vincent Gay (site web personnel) . Évalué à 1.
Merci pour le tuyau, je vais regarder
[^] # Re: Mais pourquoi diable le shell?
Posté par Michaël (site web personnel) . Évalué à 2.
Le problème n'est pas tant que ça marche ou pas, mais plutôt que le shell est employé à contre nature. Le jour où tu voudras faire évoluer ton programme, tu le paieras au prix fort, parceque le shell n'est pas du tout adapté à l'écriture de programmes.
# Changer shell
Posté par calandoa . Évalué à 2.
Bash ne gère que les entiers. Utilise zsh, qui sait gérer les flottants de manière native.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.