Bonjour,
Je sollicite votre concours pour obtenir dans le programme ci-dessous en retour à l’appel de la fonction ‘RECHERCHE’, la nouvelle valeur de la variable ‘RetChr’ à savoir ‘Rouge’ qui au départ est initialisée avec 'Blanc'. J’ai portant utilisé l’instruction ‘awk -v RetAwk=$RetChr‘ qui est préconisée pour redéfinir une variable dans ces conditions mais apparemment cela ne fonctionne pas comme ça. Pourquoi ?
Plus généralement, je souhaiterais récupérer sous la forme d’une structure de variables, un peu comme en langage ‘C’, les éléments qui ont été mis dans le tableau ‘TabPoste’ lors à l’exécution de la fonction ‘RECHERCHE’.
D’avance merci pour votre aide.
JBM-33 -
Ci-dessous les données du problème :
Le programme :
Résultat lors de l’exécution du programme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 #!/bin/ksh #------------------------------------------------------------------------------ # Récupération du nom de fichier. #------------------------------------------------------------------------------ BASEDIR=`pwd` FICHIER_LISTE=$BASEDIR/liste_des_fichiers_à_dédoublonner.lst FICHIER_CHECH=B1DEC.AZ.EM0PS29.ECHANGE1.B1DJOD09 echo "\nNom du fichier recherché : $FICHIER_CHECH." #------------------------------------------------------------------------------ # Nombre d'enregistrements valides contenu dans le fichier. #------------------------------------------------------------------------------ NB_ENREG=`cat $FICHIER_LISTE | cut -c 1 | grep -v \# | wc -l | tr -d " "` echo "Nombre d'éléments dans la liste : $NB_ENREG." echo "Le Répertoire et nom du fichier : $FICHIER_LISTE." RetChr=Blanc echo "Valeur de RetChr : "$RetChr"." #------------------------------------------------------------------------------ # Boucle sur le fichier des noms de fichiers à plat. #------------------------------------------------------------------------------ RECHERCHE() { TABENREG= awk -v RetAwk=$RetChr -F"~" ' BEGIN{ OFS="~" system(" echo \"\n Début de fonction 'RECHERCHE'.\" ") CodeRetour=0 } !/^#/ { for (IndChamp=1 ; IndChamp<=NF ; IndChamp++) { TabPoste[NR,IndChamp]=$IndChamp if (TabPoste[NR,IndChamp] == "'$FICHIER_CHECH'") { print "\n * Pour contrôle, affichage du "NR"ème enregistrement traité." print " * Pour l enregistrement n° "NR", "NF" champs sont présents : " print " - Le fichier : '$FICHIER_CHECH' est présent sur le champ["NR","IndChamp"]." } if (TabPoste[NR,2] == "'$FICHIER_CHECH'" && IndChamp == 3) { print " . Pour ce fichier le nom générique est : "TabPoste[NR,3]"." } if (TabPoste[NR,2] == "'$FICHIER_CHECH'" && IndChamp == 4) { print " . Pour ce fichier l identifiant de la caisse est : "TabPoste[NR,4]"." } if (TabPoste[NR,2] == "'$FICHIER_CHECH'" && IndChamp == 5) { print " . Pour ce fichier le nom du traitement séquenceur est : "TabPoste[NR,5]"." } if (TabPoste[NR,2] == "'$FICHIER_CHECH'" && IndChamp == 6) { print " . Pour ce fichier le nom de la Caisse d Épargne est : "TabPoste[NR,6]"." } if (TabPoste[NR,2] == "'$FICHIER_CHECH'" && IndChamp == 7) { print " . Pour ce fichier l identifiant du processus utilisateur est : "TabPoste[NR,7]"." } if (TabPoste[NR,2] == "'$FICHIER_CHECH'" && IndChamp == 8) { print " . Pour ce fichier l item du processus utilisateur est : "TabPoste[NR,8]"." } if (TabPoste[NR,2] == "'$FICHIER_CHECH'" && IndChamp == 9) { print " . Pour ce fichier les critères et positions du tri sont : "TabPoste[NR,9]"." CodeRetour=1 } } } END { print "\n * FIN de la boucle : "NR" enregistrements lus.\n" RetAwk = "Rouge" print "\n . Dans la boucle de RECHERCHE, valeur de la variable RetChr : '$RetChr'." print " . Dans la boucle de RECHERCHE, valeur de la variable RetAwk : "RetAwk".\n" if (CodeRetour == 1) { exit 2 } else { exit 0 } } ' $FICHIER_LISTE } #------------------------------------------------------------------------------ # Appel de la fonction RECHERCHE. #------------------------------------------------------------------------------ RECHERCHE RetJob=$? echo "\n* Valeur de l'indicateur de recherche : "$RetJob".\n" echo " Contenu de la variable 'RetChr' après l'exécution de la fonction 'RECHERCHE' : "$RetChr".\n" echo " Ici je souhaiterai obtenir la nouvelle valeur affectée à la variable 'RetChr' dans la fonction 'RECHERCHE'," echo " c'est à dire 'Rouge' puisqu'il y a eu redéfinition de celle-ci par l'instruction 'awk -v RetAwk=\$RetChr'...\n" #------------------------------------------------------------------------------ # Fin du programme. #------------------------------------------------------------------------------
Contenu du fichier en entrée :Nom du fichier recherché : B1DEC.AZ.EM0PS29.ECHANGE1.B1DJOD09.
Nombre d'éléments dans la liste : 11.
Le Répertoire et nom du fichier : /prod01/dwh/appli/composant_ORACLE/liste_des_fichiers_à_dédoublonner.lst.
Valeur de RetChr : Blanc.
Début de fonction RECHERCHE.
* Pour contrôle, affichage du 9ème enregistrement traité.
* Pour l enregistrement n° 9, 9 champs sont présents :
- Le fichier : B1DEC.AZ.EM0PS29.ECHANGE1.B1DJOD09 est présent sur le champ[9,2].
. Pour ce fichier le nom générique est : x1DJOD09.
. Pour ce fichier l identifiant de la caisse est : B.
. Pour ce fichier le nom du traitement séquenceur est : PTRM_IMMB.
. Pour ce fichier le nom de la Caisse d Épargne est : CEB.
. Pour ce fichier l identifiant du processus utilisateur est : s7dece1.
. Pour ce fichier l item du processus utilisateur est : s7dece1.
. Pour ce fichier les critères et positions du tri sont : -k 4,5 -k 7,7.
* FIN de la boucle : 9 enregistrements lus.
. Dans la boucle de RECHERCHE, valeur de la variable RetChr : Blanc.
. Dans la boucle de RECHERCHE, valeur de la variable RetAwk : Rouge.
* Valeur de l'indicateur de recherche : 2.
Contenu de la variable 'RetChr' après l'exécution de la fonction 'RECHERCHE' : Blanc.
Ici je souhaiterai obtenir la nouvelle valeur affectée à la variable 'RetChr' dans la fonction 'RECHERCHE',
c'est à dire 'Rouge' puisqu'il y a eu redéfinition de celle-ci par l'instruction 'awk -v RetAwk=$RetChr'...
~N1DEC.AZ.EM0PS12.ECHANGE1.L1DJOBA3~x1DJOBA3~L~CONT~CEBN~s7dece1~s7dece1~-k 4,4
~B1DEC.AZ.EM0PS12.ECHANGE1.B1DJOBA3~x1DJOBA3~B~CONT~CEB~s7dece1~s7dece1~-k 4,4
~D1DEC.AZ.EM0PS12.ECHANGE1.E1DJOBA3~x1DJOBA3~E~CONT~CEAN~s7dece1~s7dece1~-k 4,4
~D1DEC.AZ.EM0PS12.ECHANGE1.F1DJOBA3~x1DJOBA3~F~CONT~CEPA~s7dece1~s7dece1~-k 4,4
~C1DEC.AZ.EM0PS12.ECHANGE1.C1DJOBA3~x1DJOBA3~C~CONT~CEIDFP~s7dece1~s7dece1~-k 4,4
~N1DEC.AZ.EM0PS12.ECHANGE1.H1DJOBA3~x1DJOBA3~H~CONT~CEHN~s7dece1~s7dece1~-k 4,4
~D1DEC.AZ.EM0PS12.ECHANGE1.G1DJOBA3~x1DJOBA3~G~CONT~CEPC~s7dece1~s7dece1~-k 4,4
~N1DEC.AZ.EM0PS29.ECHANGE1.L1DJOD09~x1DJOD09~L~PTRM_IMMB~CEBN~s7dece1~s7dece1~-k 4,5 -k 7,7
~B1DEC.AZ.EM0PS29.ECHANGE1.B1DJOD09~x1DJOD09~B~PTRM_IMMB~CEB~s7dece1~s7dece1~-k 4,5 -k 7,7
~D1DEC.AZ.EM0PS29.ECHANGE1.E1DJOD09~x1DJOD09~E~PTRM_IMMB~CEAN~s7dece1~s7dece1~-k 4,5 -k 7,7
~D1DEC.AZ.EM0PS29.ECHANGE1.F1DJOD09~x1DJOD09~F~PTRM_IMMB~CEPA~s7dece1~s7dece1~-k 4,5 -k 7,7
Partager