[PERL] table de hash de tableaux d'un tableau
Ochman
Messages postés
9
Date d'inscription
Statut
Membre
Dernière intervention
-
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
Bonjour
Je suis nouveau sur le forum.
Je suis actuellement en stage de fin de première année de bts IRIS.
Dans le cadre de ce projet, je suis ammené a vérifier le bon déroulement de la compilation d'assemblages.
j'ai un programme perl qui lance une commande d'assemblage, celle ci s'exécute identifie chaque source de l'assemblage, les compiles, crée les packetages .epkg , les installes avant de compiler l'assemblage en lui même et d'en créer le packetage.
cette commande renvoie sur STDOUT et SDTERR un ensemble d'informations que je traite ligne a ligne afin de savoir quelle source est traitée de quel assemblage ( avec les différentes versions) et a quel stade en est le traitement.
je souhaiterai créer un tableau qui comporterait les assemblages principaux en values (dont le nom est contenu par des variables et dont le nombre est variable d'une exécution a l'autre du programme perl)
et je souhaiterais que ces values renvoient à des tableaux repertoriant les sources en values (dont le nom est contenu par des variables et dont le nombre est variable d'une exécution a l'autre du programme perl) et que ces values renvoient a une table de hash dont les clefs seraient les suivantes avec les values suivantes représentant lesdiférents stades:
Assembly => Not Engaged / Engaged / Ok
Build => Not Engaged / Engaged / Ok
Package => Not Engaged / Engaged / Ok
Install => Not Engaged / Engaged / Ok
je ne sais pas si je suis tres clair :
-------------------EXEMPLE------------------------------------------
si je compile le projet calculette 1.0 (sources : calc1.0 mult1.0 et add1.0) et calculette 1.1 (sources : calc1.1 mult1.0 et add1.0 soust1.0)
on aurait un @Assemblies
[0] | calculette_1.0
[1] | calculette_1.1
et
seraient crées
un @calculette_1.0
[0] | mult_1.0
[1] | add_1.0
[2] | calc_1.0
un @calculette_1.1
[0] | mult_1.0
[1] | add_1.0
[2] | soust_1.0
[3] | calc_1.1
et les tables de hash
%mult_1.0
Assembly => Ok
Build => Ok
Package => Ok
Install => Ok
%add_1.0
Assembly => Ok
Build => Ok
Package => Engaged
Install => Not Engaged
et ect avec toutes les sources (ici sept)
l'idée est que je puisse par la suite dans le programme accéder a l'information en disposant des éléments suivant :
quelle est l'état du packaging de la source add1.0 de l'assemblage calc1.10 (ici "Engaged)
####################################
En plus simple et en résumé je souhaite accéder à une valeur qui dépend de trois paramètres (assemblage, source, stade)
sachant que le nombre d'assemblages varie leur nom aussi, idem pour les sources seul le nom et les valeurs des stades reste les même d'un éxécution a l'autre.
je dispose de variable contenant les noms des assemblages des sources et les versions et je ne voit pas comment créer des tableaux et des tables de hash dynamiquement
Merci de votre aide
Je suis nouveau sur le forum.
Je suis actuellement en stage de fin de première année de bts IRIS.
Dans le cadre de ce projet, je suis ammené a vérifier le bon déroulement de la compilation d'assemblages.
j'ai un programme perl qui lance une commande d'assemblage, celle ci s'exécute identifie chaque source de l'assemblage, les compiles, crée les packetages .epkg , les installes avant de compiler l'assemblage en lui même et d'en créer le packetage.
cette commande renvoie sur STDOUT et SDTERR un ensemble d'informations que je traite ligne a ligne afin de savoir quelle source est traitée de quel assemblage ( avec les différentes versions) et a quel stade en est le traitement.
je souhaiterai créer un tableau qui comporterait les assemblages principaux en values (dont le nom est contenu par des variables et dont le nombre est variable d'une exécution a l'autre du programme perl)
et je souhaiterais que ces values renvoient à des tableaux repertoriant les sources en values (dont le nom est contenu par des variables et dont le nombre est variable d'une exécution a l'autre du programme perl) et que ces values renvoient a une table de hash dont les clefs seraient les suivantes avec les values suivantes représentant lesdiférents stades:
Assembly => Not Engaged / Engaged / Ok
Build => Not Engaged / Engaged / Ok
Package => Not Engaged / Engaged / Ok
Install => Not Engaged / Engaged / Ok
je ne sais pas si je suis tres clair :
-------------------EXEMPLE------------------------------------------
si je compile le projet calculette 1.0 (sources : calc1.0 mult1.0 et add1.0) et calculette 1.1 (sources : calc1.1 mult1.0 et add1.0 soust1.0)
on aurait un @Assemblies
[0] | calculette_1.0
[1] | calculette_1.1
et
seraient crées
un @calculette_1.0
[0] | mult_1.0
[1] | add_1.0
[2] | calc_1.0
un @calculette_1.1
[0] | mult_1.0
[1] | add_1.0
[2] | soust_1.0
[3] | calc_1.1
et les tables de hash
%mult_1.0
Assembly => Ok
Build => Ok
Package => Ok
Install => Ok
%add_1.0
Assembly => Ok
Build => Ok
Package => Engaged
Install => Not Engaged
et ect avec toutes les sources (ici sept)
l'idée est que je puisse par la suite dans le programme accéder a l'information en disposant des éléments suivant :
quelle est l'état du packaging de la source add1.0 de l'assemblage calc1.10 (ici "Engaged)
####################################
En plus simple et en résumé je souhaite accéder à une valeur qui dépend de trois paramètres (assemblage, source, stade)
sachant que le nombre d'assemblages varie leur nom aussi, idem pour les sources seul le nom et les valeurs des stades reste les même d'un éxécution a l'autre.
je dispose de variable contenant les noms des assemblages des sources et les versions et je ne voit pas comment créer des tableaux et des tables de hash dynamiquement
Merci de votre aide
A voir également:
- [PERL] table de hash de tableaux d'un tableau
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Dans le fichier, générez ce tableau automatiquement (tableau croisé dynamique ou table de pilote) à partir des quatre premières colonnes. - Guide
- Imprimer un tableau excel - Guide
8 réponses
Salut,
je ne sais pas si je suis tres clair :
Ici tu as raison :-)) ce n'est pas vraiment claire
cette commande renvoie sur STDOUT et SDTERR un ensemble d'informations que je traite ligne a ligne
J'ai besoin de savoir ce que tu as sur STDOUT et STDERR, et ce que tu dois obtenir comme résultat final
Merci.
je ne sais pas si je suis tres clair :
Ici tu as raison :-)) ce n'est pas vraiment claire
cette commande renvoie sur STDOUT et SDTERR un ensemble d'informations que je traite ligne a ligne
J'ai besoin de savoir ce que tu as sur STDOUT et STDERR, et ce que tu dois obtenir comme résultat final
Merci.
stderr est redirigée vers sdtout et le tout est lié a EBUILD
Extrait de ce que j'ai a traiter
mon algo de traitement des lignes (extrait)
Ensuite les sous fonctions traitent l'affichage écran pour que l'utilisateur ai un "résumé" de ce qui s'est passé lors de la compilation. afin de savoir dans quel ordre se sont déroulées les étapes d'assemblage et si elles se sont bien déroulées .
je souhaite par la suite pour d'autres fonctionnalité de ce programme pouvoir accéder à l'état d'avance ment de chacune de ces étapes (Engaged, Not Egaged, Ok)en fonction de trois paramètres :
_l'étape d'avancement concernée (assembly, build, package, install)
_le ficher source (versionné) auquel il correspond
_l'assemblage auquel le fichier source appartient
my $Comand = "ebuild -b $BuildDir -B release -n $Prog -v $Version 2>&1" ; #the ebuild comand witch will build and install the project print "\nRunning: $Comand\n"; if ( ! open EBUILD, "$Comand |") { .... }
Extrait de ce que j'ai a traiter
checking for strip... strip checking for nm... nm checking if make is GNU make... yes checking for dependency tracking method... gcc configure: creating ./config.status config.status: creating Makefile OK add--1.0: running build (cd build && make) make[1]: Entering directory `/home/expand/Desktop/ExpandLauSeb/Expand/log/sources/add--1.0/projects/add/unix/build' ./bk-deps g++ -c -o add10_add.o -I../../../../cpp/pinclude -I../../../../cpp/include -DUNIX -DLINUX -fPIC -DPIC -O3 -Wall -Wno-sign-compare -D_UNIX ../../../../cpp/src/add.cpp
mon algo de traitement des lignes (extrait)
if ( ! open EBUILD, "$Comand |") #execute the comand $Comand and link ebuild sdtout with the EBUILD filehandle { die "Cannot open the ebuild filehandle : $!"; } my $ctxt = {}; while ( defined($Line = <EBUILD>)) { chomp($Line); if ( $Line =~ /^building assembly/i ) #call the handle witch manage the assembling { handle_what_it_assembly($ctxt, $Line); } if ( $Line =~ /running build$/i ) #call the handle witch manage the building { handle_building($ctxt, $Line); } if ( $Line =~ /running package$/i ) #call the handle witch manage the packaging { handle_packaging($ctxt, $Line); } if ( $Line =~ /^Installing packages/i ) #call the handle witch look at the package wich is installed { handle_installing($ctxt, $Line); } if ($Line =~ /^OK$/i ) #store the result of the build in a hash table($BuildReport) { handle_build_ok($Line); } if ( $Line =~ /Package successfully installed/i ) #print the install result g { handle_success_inst($Line); } if ($Line =~ /error/i) #call the handle witch manage the errors { handle_error($Line); } if ($Line =~ /^EBUILD : FAILED$/i) #call the handle witch manage the builds failures { handle_build_FAILED($ctxt,$Line); } $ctxt->{MostPreviousLine} = $ctxt->{PreviousLine}; #store the previous and the most previous lines $ctxt->{PreviousLine} = $Line; } close EBUILD; #close the filehandle LOGFILE
Ensuite les sous fonctions traitent l'affichage écran pour que l'utilisateur ai un "résumé" de ce qui s'est passé lors de la compilation. afin de savoir dans quel ordre se sont déroulées les étapes d'assemblage et si elles se sont bien déroulées .
je souhaite par la suite pour d'autres fonctionnalité de ce programme pouvoir accéder à l'état d'avance ment de chacune de ces étapes (Engaged, Not Egaged, Ok)en fonction de trois paramètres :
_l'étape d'avancement concernée (assembly, build, package, install)
_le ficher source (versionné) auquel il correspond
_l'assemblage auquel le fichier source appartient
D'accord, tu me montre ton algo, mais il utilise des fonctions dont je n'ai pas le code
Ce que j'avais besoin ce n'était pas ton algo mais ce que tu veux obtenir en sortie.
Donc j'ai l'entrée (en fin une partie)
checking for strip... strip
checking for nm... nm
checking if make is GNU make... yes
checking for dependency tracking method... gcc
configure: creating ./config.status
config.status: creating Makefile
OK
add--1.0: running build
(cd build && make)
make[1]: Entering directory `/home/expand/Desktop/ExpandLauSeb/Expand/log/sources/add--1.0/projects/add/unix/build'
./bk-deps g++ -c -o add10_add.o -I../../../../cpp/pinclude -I../../../../cpp/include -DUNIX -DLINUX -fPIC -DPIC -O3 -Wall -Wno-sign-compare -D_UNIX ../../../../cpp/src/add.cpp
mais pas la sortie
En bref il me faut un cas concret :-) de sortie pour un cas concret d'entrée.
Merci.
Ce que j'avais besoin ce n'était pas ton algo mais ce que tu veux obtenir en sortie.
Donc j'ai l'entrée (en fin une partie)
checking for strip... strip
checking for nm... nm
checking if make is GNU make... yes
checking for dependency tracking method... gcc
configure: creating ./config.status
config.status: creating Makefile
OK
add--1.0: running build
(cd build && make)
make[1]: Entering directory `/home/expand/Desktop/ExpandLauSeb/Expand/log/sources/add--1.0/projects/add/unix/build'
./bk-deps g++ -c -o add10_add.o -I../../../../cpp/pinclude -I../../../../cpp/include -DUNIX -DLINUX -fPIC -DPIC -O3 -Wall -Wno-sign-compare -D_UNIX ../../../../cpp/src/add.cpp
mais pas la sortie
En bref il me faut un cas concret :-) de sortie pour un cas concret d'entrée.
Merci.
le truc c'est que ça va etre dur de te décrire ce que fait chacune des fonction parce que c'est un oeu compliqué a expliquer le tout du tout donc jvai essayer de t'aiclairer en te donnant ce que je souhaite que fasse en plus les fontions :
dans une variable $prog j'ai le nom de l'assemblage a compiler et sa version dans $Version;
handle_what_it_assembly -> me stocke dans une variable le nom de la source en train d'être traitée ainsi que sa version elle dit a l'utilisateur que l'assemblage de cette source de cette version a démaré
j'aimerai quelle me stocke dans une table de hash la valeur "Engaged" pour l'étape Assembly et "Not Engaged" pour les étapas build package et install de cette meme source de cette meme version
handle_building ->elle dit a l'utilisateur que la compilation de cette source de cette version a démaré
j'aimerai quelle stocke dans une table de hash la valeur "Engaged" a la place de "not Engaged" pour l'étape Build
handle_packaging->elle dit a l'utilisateur que la création des packets de cette source de cette version a démaré
j'aimerai quelle stocke dans une table de hash la valeur "Engaged" a la place de "not Engaged" pour l'étape Package
handle_installing->elle dit a l'utilisateur que l'installation du packet cette source de cette version a démaré
j'aimerai quelle stocke dans une table de hash la valeur "Engaged" a la place de "not Engaged" pour l'étape Installed
handle_build_ok->elle dit a l'utilisateur que la dernière étape engagée était un succès, cad que si (pour la source et la version concernée) l'étape assembly est "Engaged" et l'étape build est "not Engaged" elle met l'étape assembly a "ok" a la place de "Engaged"
handle_success_inst->fait la meme chose que handle_build_ok mais avec l'étape install (elle est différente a détecter)
handle_build_failed et error ne nous interressent pas ici
merci de m'aider je sais que je suis pas tres clair mais c'est que je m'y perd un peu dans le programme en ce moment ;)
edit: pour l'instant tout sort a l'écran par l'intermédiaire du shell et ce traitement se fait ligne a ligne, des qu'un ligne est traitée le programme affiche le résultat mais ne le stocke pas je souhaite stocker toutes les étapes afin de pouvoir les traiter plus tard ou dans d'autres fonctions du programme.je vai uploaded un exemple de fichier contenant stderr et stdout et le rendu que j'ai actuellement
http://ochmanboss.free.fr/Screenshot.png -> sortie de mon programme
http://ochmanboss.free.fr/LogFileOK.txt -> EBUILD (stderr et stdout)
dans une variable $prog j'ai le nom de l'assemblage a compiler et sa version dans $Version;
handle_what_it_assembly -> me stocke dans une variable le nom de la source en train d'être traitée ainsi que sa version elle dit a l'utilisateur que l'assemblage de cette source de cette version a démaré
j'aimerai quelle me stocke dans une table de hash la valeur "Engaged" pour l'étape Assembly et "Not Engaged" pour les étapas build package et install de cette meme source de cette meme version
handle_building ->elle dit a l'utilisateur que la compilation de cette source de cette version a démaré
j'aimerai quelle stocke dans une table de hash la valeur "Engaged" a la place de "not Engaged" pour l'étape Build
handle_packaging->elle dit a l'utilisateur que la création des packets de cette source de cette version a démaré
j'aimerai quelle stocke dans une table de hash la valeur "Engaged" a la place de "not Engaged" pour l'étape Package
handle_installing->elle dit a l'utilisateur que l'installation du packet cette source de cette version a démaré
j'aimerai quelle stocke dans une table de hash la valeur "Engaged" a la place de "not Engaged" pour l'étape Installed
handle_build_ok->elle dit a l'utilisateur que la dernière étape engagée était un succès, cad que si (pour la source et la version concernée) l'étape assembly est "Engaged" et l'étape build est "not Engaged" elle met l'étape assembly a "ok" a la place de "Engaged"
handle_success_inst->fait la meme chose que handle_build_ok mais avec l'étape install (elle est différente a détecter)
handle_build_failed et error ne nous interressent pas ici
merci de m'aider je sais que je suis pas tres clair mais c'est que je m'y perd un peu dans le programme en ce moment ;)
edit: pour l'instant tout sort a l'écran par l'intermédiaire du shell et ce traitement se fait ligne a ligne, des qu'un ligne est traitée le programme affiche le résultat mais ne le stocke pas je souhaite stocker toutes les étapes afin de pouvoir les traiter plus tard ou dans d'autres fonctions du programme.je vai uploaded un exemple de fichier contenant stderr et stdout et le rendu que j'ai actuellement
http://ochmanboss.free.fr/Screenshot.png -> sortie de mon programme
http://ochmanboss.free.fr/LogFileOK.txt -> EBUILD (stderr et stdout)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je crois que on s'est mal compris
Je n'ai pas besoin de savoir ce qu'elle font tes fonctions, quoique ça me donne une idée de la façon dont tu traites ton problème
Ce que j'ai besoin c'est de résultat que tu dois obtenir et pas comment tu penses l'obtenir.
Donc un cas concret et pas les variables que tu crées pour traiter ton problème.
Merci.
Je n'ai pas besoin de savoir ce qu'elle font tes fonctions, quoique ça me donne une idée de la façon dont tu traites ton problème
Ce que j'ai besoin c'est de résultat que tu dois obtenir et pas comment tu penses l'obtenir.
Donc un cas concret et pas les variables que tu crées pour traiter ton problème.
Merci.
ce que je doit obtenir c'est le moyen d'accéder (a nimporte quel moment de l'éxécution du programme ) a un listing de ce qui c'est passé pour chaque assemblage, cad que par exemple a un moment si j'ai besoins de reprendre toutes ces information pour les stocker dans une base de donnée sql afin d'effectuer des statistique de compilation pour afficher sur une page web.Donc je veu pouvoir stocker toutes les informations de compilation de l'assemblage dans des variables pour les rendre facilement accecible. afin de pouvoir les traiter.