L’autre jour j’avais envie de générer des termes du genre : s1e01 s1e02 ... s1e12 s2e02 … s2e12 s3e01 s3e02 … s3e12 (me demandez pas ce que j’étais en train de faire ça va m’énerver).
Je voulais même des termes un peu plus généraux que ça. Suivant un schéma du type : ceciXXcelaYYYtruc (etc). Où ceci cela et truc sont du texte et XX et YYY sont des énumérations. Avec largeur fixe ou pas. Et bien entendu, il me faut le produit cartésien des XX avec les YYY (sinon c’est pas drôle).
À ce niveau de généralité, j’ai sorti du saloir mon python3 pour coder tout ça. Et puis je me suis souvenu qu’il faut toujours réfléchir avant de coder(*). J’ai donc éteint mon ordinateur.
Je me suis demandé notamment comment j’allais spécifier ma ligne de commande ? Au but de quelques minutes, j’ai aboutit à quelque chose comme : ceci{0..17}cela{099..102}truc (etc). Même avec mon module préféré docopt ça risque d’être un peu tendu. Et le code derrière, sans être monstrueux, va nécessiter un peu de soin et d’attention.
Ah oui mais au fait j’utilise bash. Et en bash il se trouve que ceci{0..17}cela{099..102}truc ça génère pile exactement la séquence que je veux. Y compris le produit cartésien des énumérations (sinon c’est pas drôle). Y compris la largeur variable, comme pour la première énumération. Y compris la largeur fixe, comme pour la seconde énumération.
Tu me crois pas ? Essaye !
$ echo ceci{8..13}cela{099..102}truc
Ou alors:
$ for T in ceci{8..13}cela{099..102}truc; do echo "$T"; done
Moralité 1 : spécifier c’est programmer.
Moralité 2 : pour réfléchir il faut éteindre l’ordinateur.
(*) Sauf quand on est bourré.
C'est marrant moi ,c'est le contraire: pour allumer l'ordinateur je dois réfléchir
RépondreSupprimer