Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/11/2011, à 15:03

Wolf

[R]Ptit script pour generer un fichier dependant d'un autre ..

Bonjour,
Je suis pas un fortiche en programmation même si j'ai quelques notions.
J'aimerais savoir quel langage serait le plus judicieux pour réaliser la chose suivante :
générer un fichier de cette forme là : fichierfinal

toto33-xx-z
toto33-xx-z
.....

ou "xx" est diffèrent mais pas le reste.

Le xx serait récupérer depuis un fichier que j'aurais remplis de manière la plus simple : serie de chiffres à la ligne.

Exemple : fichiersource : fichier contenant des chiffres : 7874214571

fichier que j'aimerais générer après la moulinette (dans l'exemple) : fichierfinal

toto33-78-z
toto33-74-z
toto33-21-z
toto33-45-z
toto33-71-z

(ou mieux, l'avoir dans le presse-papier en gardant bien la forme "à la ligne, mais ça peut être en v2 ça).

Est-ce compliqué à réaliser ? Vers quoi s'orienter ?

Merci smile

Dernière modification par Wolf (Le 25/03/2016, à 10:51)


"On a pas besoin de leurs dollars. Juste des rêves et sa guitare".

Hors ligne

#2 Le 18/11/2011, à 15:22

sputnick

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

N'importe quel langage genre python, ruby, perl mais le shell (bash) devrais suffire si tu des besoins basiques sur des fichiers qui font pas 40 GO.

Je prends en spec que tes chiffres ne sont pas séparés comme dans ton exemple, ça serais plus facile séparés avec des espaces ou des retours à la lignes

#!/bin/bash

# on recupere la ligne de chiffres (dans mon exemple, la 1°)
stuff="$(head -n1 "$1")"

# on compte le nombre de caractères de la variable stuff
len=$(wc -c <<< "$stuff") 

# on itère sur chaque paire de caractères de la variable stuff
for ((c=1, d=2; d < len; c+=2, d+=2)); do
    echo "toto33-$(cut -c$c,$d <<< "$stuff")z" >> fichierfinal
done

cat fichierfinal

Dernière modification par sputnick (Le 18/11/2011, à 16:59)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#3 Le 18/11/2011, à 15:31

Nemesis

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

#!/bin/ksh
if [ $# -lt 3 ]
then
        echo "usage: `basename $0` <fichier source> <modele> <fichier final>"
        exit 1
fi

source=$1
modele=$2
result=$3

cp $source $source.tmp
cat /dev/null > $result

while [ `cat $source.tmp | wc -c` -gt 1 ]
do
        cp $source.tmp $source.tmp2
        nb=`cat $source.tmp2 | sed -n 's/^\([0-9]\{2\}\)\([0-9]*\)$/\1/p'`
        cat $source.tmp2 | sed -n 's/^\([0-9]\{2\}\)\([0-9]*\)$/\2/p' > $source.tmp
        echo $modele | sed "s/-xx-/-$nb-/g" >> $result
done

cat $result
rm $source.tmp $source.tmp2

Grillé hmm
Pour ma défense j'avais l'inclusion dans le template en plus ^^
Par contre j'ai jamais pensé à variabiliser mes cut... Plus simple qu'avec des sed en fait ^^

Dernière modification par Nemesis (Le 18/11/2011, à 15:36)

Hors ligne

#4 Le 18/11/2011, à 15:32

Wolf

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

Merci !
J'analyse ça et je te dis ce que j'ai compris / ce que ça donne !


"On a pas besoin de leurs dollars. Juste des rêves et sa guitare".

Hors ligne

#5 Le 18/11/2011, à 15:33

redo_fr

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

Salut,

en python, ça pourrait donner

#! /usr/bin/env python

import sys

ligne = sys.argv[1]

fichier = open('/tmp/fichier.lst','w')

for index in range(0,len(ligne),2):
  fichier.write( "toto33-%s-z\n" % (ligne[index:index+2],) )

fichier.close()

Dernière modification par redo_fr (Le 18/11/2011, à 15:36)


Il n'y a pas de mauvais outils, il n'y a que de mauvais ouvriers
- papy -
Personnellement, je crois que faire des procès est un signe que les affaires vont mal. Je ne dis pas que Microsoft va mal, ce n'est qu'un signe, pas un indicateur...
- Linus Torvalds -

Hors ligne

#6 Le 18/11/2011, à 15:50

sputnick

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

Code mis à jour pour formater la sortie avec toto* et rediriger vers fichierfinal


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#7 Le 18/11/2011, à 15:58

Wolf

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

J'essai tout ça et je vous fait un feetback smile


"On a pas besoin de leurs dollars. Juste des rêves et sa guitare".

Hors ligne

#8 Le 18/11/2011, à 16:06

Wolf

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

@sputnick : Merci, cela fonctionne nickel !!!
Maintenant, avec la V2, y'a moyen de copier le résultat aussi dans le presse-papier (en conservant le retour charriot ?)


"On a pas besoin de leurs dollars. Juste des rêves et sa guitare".

Hors ligne

#9 Le 18/11/2011, à 16:10

sputnick

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

Oui,

./script | xsel

à la place de xsel tu peut installer aussi xclip, tout deux fonctionneront wink


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#10 Le 18/11/2011, à 16:21

Nemesis

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

sputnick a écrit :

Code mis à jour pour formater la sortie avec toto* et rediriger vers fichierfinal

tu as mis le nombre à la fin au lieu de le mettre au milieu, non?

Hors ligne

#11 Le 18/11/2011, à 16:26

Wolf

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

Excellent !!
Merci à tous de votre aide !
Je pense que j'aurais galérer tout seul !!!
Génial !
Votre aide à embellie ma journée ^^'


"On a pas besoin de leurs dollars. Juste des rêves et sa guitare".

Hors ligne

#12 Le 18/11/2011, à 16:33

sputnick

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

Merci Wolf :þ

@Nemesis, j'ai repris soigneusement l'exemple de sieur Wolf wink


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#13 Le 18/11/2011, à 16:44

Nemesis

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

sputnick a écrit :

@Nemesis, j'ai repris soigneusement l'exemple de sieur Wolf wink

Je dois fatiguer alors.
echo "toto33-z$(cut -c$c,$d <<< "$stuff")", ça ne produit pas toto33-z78 au lieu de toto33-78-z ?

Hors ligne

#14 Le 18/11/2011, à 16:57

sputnick

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

Oui, c'est moi qui suis pas réveille, mais c'est pas très important, la modification est tout à fait triviale et ne change en rien l'algo wink


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#15 Le 18/11/2011, à 17:03

Nemesis

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

En effet wink

Hors ligne

#16 Le 18/11/2011, à 17:11

Wolf

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

Nemesis a écrit :
sputnick a écrit :

@Nemesis, j'ai repris soigneusement l'exemple de sieur Wolf wink

Je dois fatiguer alors.
echo "toto33-z$(cut -c$c,$d <<< "$stuff")", ça ne produit pas toto33-z78 au lieu de toto33-78-z ?

Ne vous inquiétez pas, j'ai modifié en conséquence ..
Et j'ai aussi réussit à comprendre le script. J'évite les bêtes copier / coller, cela ne m'apporte rien d'intéressant ^^


"On a pas besoin de leurs dollars. Juste des rêves et sa guitare".

Hors ligne

#17 Le 27/03/2012, à 13:27

Wolf

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

sputnick a écrit :
# on itère sur chaque paire de caractères de la variable stuff
for ((c=1, d=2; d < len; c+=2, d+=2)); do
    echo "toto33-$(cut -c$c,$d <<< "$stuff")z" >> fichierfinal
done

Bonjour,
Pourrais-tu, s'il te plait, me détailler cette partie du script, notamment la ligne :

for ((c=1, d=2; d < len; c+=2, d+=2)); do

Merci.


"On a pas besoin de leurs dollars. Juste des rêves et sa guitare".

Hors ligne

#18 Le 27/03/2012, à 13:52

sputnick

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

Salut,

bien sur, pas de souci :

la premiere explication :

(( ))

est la forme arithmétique de bash

La base :

for (( <initialisation de(s) variable(s)> <condition> <modification de(s) variable(s)> ))

ce genre de boucles d’itération, s’appelle for C-style puisqu'empruntée au langage C, une plus basique :

for ((i=0; i<10; i++)); do echo $i; done

donc notre boucle

for ((c=1, d=2; d < len; c+=2, d+=2))

en est une version plus avancé de la simple :

on initialise c à 1 et d à 2
on vérifie que la valeur de d est inférieur à len (inutile de vérifier les 2 variables même si c'est possible)
si c'est le cas
    on incrémente la variable c et d de 2 à chaque tour de boucle
    on refais un tour de boucle...
si c'est pas le cas
    on sort de la boucle (elle s’arrête)

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#19 Le 27/03/2012, à 14:16

Wolf

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

Merci big_smile
Grâce à tes explications, j'ai pu modifier le code pour faire le script en version V2 big_smile
En gros, sur la ligne n° 1 sont écrit les chiffres qui seront utilisé pour la boucle sur deux décimales : toto-12-prout.
Et sur la ligne n°3, c'est pour 3 décimales (ce que je viens de créer en partant de ton fichier source) : toto-123-prout.

Youpi big_smile


"On a pas besoin de leurs dollars. Juste des rêves et sa guitare".

Hors ligne

#20 Le 27/03/2012, à 15:57

pingouinux

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

Salut,
Comme l'a dit sputnick au #2, si les nombres sont séparés par des espaces ou des sauts de ligne, c'est beaucoup plus facile, et on ne se préoccupe pas de la longueur des nombres.

$ cat fichiersource
78 74 21
45 71 258

$ for n in $(cat fichiersource); do echo "toto33-$n-z"; done
toto33-78-z
toto33-74-z
toto33-21-z
toto33-45-z
toto33-71-z
toto33-258-z

Dernière modification par pingouinux (Le 27/03/2012, à 15:57)

Hors ligne

#21 Le 02/03/2016, à 11:59

Wolf

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

Bonjour,
Je déterre ce topic ...
J'utilise toujours ce petit script que vous m'avez largement aidé à réaliser.
Néanmoins, concernant la sortie finale, n'est-il pas possible d'avoir un tri ?
Ce qui donnerai :
fichier source  : 47851687

fichier final :

toto33-16-z
toto33-47-z
toto33-85-z
toto33-87-z

Merci smile


"On a pas besoin de leurs dollars. Juste des rêves et sa guitare".

Hors ligne

#22 Le 02/03/2016, à 12:40

pingouinux

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

Bonjour,
Il faut que tu supposes que les nombres ont 2 chiffres, si tu veux les distinguer.

printf "toto33-%s-z\n" $(grep -o '..' fichiersource|sort -n)

Hors ligne

#23 Le 24/03/2016, à 13:35

Wolf

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

pingouinux a écrit :

Bonjour,
Il faut que tu supposes que les nombres ont 2 chiffres, si tu veux les distinguer.

printf "toto33-%s-z\n" $(grep -o '..' fichiersource|sort -n)

Bonjour,
Oui, c'est bien le cas.
2 nombres car cela va de 61 à 99.

Puis 3 nombres allant de 100 à 115.

Donc c'est jouable ?


"On a pas besoin de leurs dollars. Juste des rêves et sa guitare".

Hors ligne

#24 Le 24/03/2016, à 13:47

pingouinux

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

Le mieux est que tu donnes un exemple de fichier d'entrée, mais s'il y a un mélange de nombres à 2 et 3 chiffres, sans séparation entre eux, je ne vois pas.

Hors ligne

#25 Le 24/03/2016, à 14:01

Wolf

Re : [R]Ptit script pour generer un fichier dependant d'un autre ..

Voici le fichier d'entré.

fichier "comptes" :

6178699189

107115103

"On a pas besoin de leurs dollars. Juste des rêves et sa guitare".

Hors ligne