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 02/05/2016, à 19:40

maman

[résolu]demande script extraire une reference et remplacer une valeur

Bonjour,
j'ai un fichier texte de 50000 lignes dans lequel j'ai des informations erronées. L'opérateur a mal effectué les saisies. Aïe aïe aïe. Je vous mets un bout du fichier pour l'entrée (1). L'entrée (2) redémarre à "> <reference> (2)" et se termine à "M END" et ça se répète.

>  <reference> (1)
18615102

>  <nombre> (1)
99

>  <stat> (1)
0

>  <test_analyse> (1)
complet

>  <origine> (1)
PARIS

$$$$

  Ref121310842D          
"des tas de lignes de chiffres en colonnes"
 
M  END

J'aurais aimé avoir un script qui me retourne le numéro de la reference (ici 18615102) si et seulement si le nombre de stat est égal à 0. S'il pouvait les lister dans le terminal ou sortir un fichier texte, peu m'importe.
Dans un deuxième temps, j'aurais aimé avec un script qui corrige cette valeur 0 et qui la remplace par 95. Peu importe si c'est un seul script qui effectue les 2 tâches ou 2 scripts différents.

Je ne suis pas familière du tout avec ça et j'ai besoin d'aide. Je remercie d'avance ceux qui voudront bien se pencher sur ma demande. smile

@+

Dernière modification par maman (Le 02/05/2016, à 22:21)


90% of teens today would die if Facebook was completely destroyed. If you are one of the 10% that would be laughing, copy and paste this to your signature.

Hors ligne

#2 Le 02/05/2016, à 20:44

pingouinux

Re : [résolu]demande script extraire une reference et remplacer une valeur

Bonsoir,
Tu peux essayer ce script en python3 (marche aussi en python2) :

$ cat recherche_manipulation_chaines.py
#!/usr/bin/python3

import sys, re

rec=re.compile('((<reference> +\(\d+\))[^\n]*\n(\d+).*?<stat>[^\n]+\n(\d+).*?M +END)',re.S)

with open(sys.argv[1],'r') as f: fic=f.read()
with open(sys.argv[2],'w') as g:

   while True :
      k=rec.search(fic)
      if(k) :
         num=k.group(2)
         ref=k.group(3)
         stat=k.group(4)
         g.write(fic[:k.start(4)])
         if stat=='0':
            print(num,ref)
            g.write('95')
            g.write(fic[k.end(4):k.end(1)])
         else:
            g.write(fic[k.start(4):k.end(1)])
         fic=fic[k.end(1):]
      else :
         g.write(fic)
         break

À appeler ainsi :

./recherche_manipulation_chaines.py fichier_original fichier_modifie

Le fichier de départ n'est pas modifié, et les références qui t'intéressent doivent apparaître sur le terminal.

Hors ligne

#3 Le 02/05/2016, à 22:20

maman

Re : [résolu]demande script extraire une reference et remplacer une valeur

Merci pingouinux, ça marche très bien. smile Je ne "lis" pas le python couramment, mais je comprends globalement la façon de faire de ton script. J'ai juste renommé le ligne "#!/usr/bin/python3" en "#!/usr/bin/python2" car j'ai python2 installé.
Je te fais la bise pour ta peine :-*


90% of teens today would die if Facebook was completely destroyed. If you are one of the 10% that would be laughing, copy and paste this to your signature.

Hors ligne

#4 Le 03/05/2016, à 06:11

pingouinux

Re : [résolu]demande script extraire une reference et remplacer une valeur

Quelle que soit la première ligne du script, tu peux forcer l'exécution en python2 ou python3

python ./recherche_manipulation_chaines.py fichier_original fichier_modifie

ou

python3 ./recherche_manipulation_chaines.py fichier_original fichier_modifie

J'ai juste adapté à ton cas un script que j'avais fait il y a longtemps pour mon usage personnel.

Hors ligne