déssolé de t'avoir froissé,
mais les explications precedentes donnent des schemas, des algorythmes et tu ne semble pas comprendre la "logique" qui se trouve derriere le code Perl que l'on t'a pondu plus haut (ou dans le post precedent).
alors, oui, je me suis trompé d'un chiffre et j'ai mis ARGV[1] car pour moi (reflexe de bash et d'autres langages) ARGV[0] c'est le programme lui meme.
bref, cela ne change rien à la logique, qui consiste à :
avant la boucle for, faire le meme traitement que celui existant mais uniquement sur le premier fichier (donc ARGV[0]), il suffit de changer value par name
garder la boucle actuelle qui fait le boulot que tu souhaites, à savoir sortir les values des fichiers xml pour les mettre dans $FhResult
et si tu veux traiter 2000 fichiers, mais n'avoir toujours qu'un seul fichier de sortie,
il faut regarder les $ARG disponibles, y en a surement un pour obtenir le nombre de fichiers.
et donc faire ta boucle entre 0 et $Nombre-de-fichiers
#now let's insert the result into rrdtool databasefileRrdTool="/home/www/Graph/data_DHT22.rrd"#let's fill the command line with the#Current time (Right now), temperature and humidityrdata="N"+validateRRD(temperature)+validateRRD(humidity)subprocess.Popen(["/usr/bin/rrdtool","update",fileRrdTool,rdata])
qui indique que le fichier sera data_DHT22.rrd
que les rdata seront "N"TemperatureHumidité
pour ensuite l'ecrire dans le fichier.
en reecrivant le code ainsi, ca doit le faire
#now let's insert the result into rrdtool databasefileRrdTEMP="/home/www/Graph/data_DHT22.rrd"fileRrdHUM="/home/www/Graph/data_DHT22Y.rrd"#let's fill the command line with the#Current time (Right now), temperature and humidityrdata-temp="N"+validateRRD(temperature)rdata-hum="N"+validateRRD(humidity)subprocess.Popen(["/usr/bin/rrdtool","update",fileRrdTEMP,rdata-temp])subprocess.Popen(["/usr/bin/rrdtool","update",fileRrdHUM,rdata-hum])
et probablement, plus bas, adapter, dans la fonction rrdExport pour gerer cela
faire du code implique de comprendre ce qu'il fait
car copier coller sans comprendre, c'est prendre le risque d'installer un virus,
et puis tu n'apprends rien si tu ne fais que copier/coller betement.
ici tu as un code qui :
- ouvre le fichier resultat,
- fait une boucle pour traiter tous les fichiers passés en arguments
- va prendre les valeurs (value) et les ecrire dans le fichier de resultat
- ferme le fichier resultat
qu'est ce qui t'empeche de faire une paragraphe similaire,
que tu placerais AVANT de traiter TOUS les fichiers,
qui va traiter le fichier ARGV[1] pour n'en prendre que les "NAME" ?
mais je penses que tu as l'impression que cela fonctionne car tu vois coucou sur stdout
mais c'est directement le fils qui ecrit sur stdout, et pas le pere.
pour etre sur que ce soit le pere, il faudrait ajouter une chaine dans le fputs(buf,stdout)
pour moi il faudrait maintenant que le fils ecrive dans le "pp" puisque c'est là que le pere va lire avec fgets(buf, sizeof(buf), pp)
1-fichiers textes -> ne fonctionne pas car le fichier texte n'est pas créé par le fils
ben faur le creer avec le pere, le remplir avec le fils
puisqu'il faut le remplir avec les parametres que le fils va lire.
le fils lit ces parametres, fait l'acquisition, ecrit le resultat dans un 2e fichier.
et le pere viendra lire le fichier quand le fils aura terminé donc apres le execl()
Interface.cpp doit envoyer des paramètres d'acquisition à acq.c
et acq.c tout seul depuis la ligne de commande prend des parametres ?
parce qu'à ce compte là, faut juste lancer acq.c avec les parametres dans interface.c et recuperer ce qui en sort,
sans avoir besoin de creer des pipes, des sockets ou des fichiers;
dans ton cas, si en ligne de commande tu peux faire : acq parametre1 parametre2
ou acq --option1 parametre1 --option2 parametre2
alors dans interface.c il doit suffire de faire un retour = execl("/chemin/vers/acq", "parametre1", "parametre2");
2 possibilités, qui vont dependre de la sortie attendue.
1°) tu veux un fichier de sortie par fichier d'entrée => boucle du shell
qui avec des fichiers A.xml, B.xml, C.xml
va lancer 3 fois la commande perl parser.pl nom-du-fichier
ta commande deviens alors : for file in *.xml;do perl parser.xml $file;done
2°) avoir un seul fichier de sortie contenant le resultat de plusieurs fichiers XML => boucle dans ton perl, sur les arguments que tu lui donnes.
tu vas alors lancé le programme comme suit : perl parser.pl A.xml B.xml C.xml
et c'est dans le perl que tu fais une boucle pour lire chacun des arguments.
ne pas oublier qu'avoir un expert comptable, meme si ca coute ~800/1000€ par an (pour un expert comptable "externe" qui passe de temps en temps dans ta boite(, permet d'eviter la majoration automatique de tes revenus par les services fiscaux qui, l'absence d'expert comptable, considere que tu fraudes sur environ 25% de tes revenu.
et il veut dire quoi le .1 apres l'année et le mois de sortie ?
il veut dire "ensemble de correctifs n°1 apres la release officielle"
ce qui est aussi la definition de SP1.
alors quand il faut remplir la fiche du produit qui demande la version de l'OS, et son eventuel service pack,
ben la personne qui a remplit à preferer mettre :
OS : 14.04
Service Pack : SP1
ca fait controleur de domaine, gestion des utilisateurs, des GPO, etc
en plus ca s'installe assez facilement,
meme si en 2012, j'avais du installé une version en provenance de la suite zentyal car plus recente que la version de mon Ubuntu 12.04 de l'epoque
[^] # Re: loop
Posté par NeoX . En réponse au message Parsage sur plusieur fichier. Évalué à 2.
c'est deja un bon debut.
pourquoi tu ne veux pas traiter les données du premier fichier ?
bon en l'occurrence, il suffit de faire une boucle de 1 à la taille de $ARGV
plutot qu'un parcours du tableau @files qui contient TOUS les fichiers.
ou un peu plus sale, dans la boucle for,
lui dire de sauter le fichier si
$file = $ARGV[0][^] # Re: en changeant la destination des ecritures
Posté par NeoX . En réponse au message Faire 2 bases de données. Évalué à 2.
tu as bien retouché les lignes de
texte+=...?[^] # Re: loop
Posté par NeoX . En réponse au message Parsage sur plusieur fichier. Évalué à 2.
déssolé de t'avoir froissé,
mais les explications precedentes donnent des schemas, des algorythmes et tu ne semble pas comprendre la "logique" qui se trouve derriere le code Perl que l'on t'a pondu plus haut (ou dans le post precedent).
alors, oui, je me suis trompé d'un chiffre et j'ai mis ARGV[1] car pour moi (reflexe de bash et d'autres langages) ARGV[0] c'est le programme lui meme.
bref, cela ne change rien à la logique, qui consiste à :
valueparnamevaluesdes fichiers xml pour les mettre dans $FhResultet si tu veux traiter 2000 fichiers, mais n'avoir toujours qu'un seul fichier de sortie,
il faut regarder les $ARG disponibles, y en a surement un pour obtenir le nombre de fichiers.
et donc faire ta boucle entre 0 et $Nombre-de-fichiers
# en changeant la destination des ecritures
Posté par NeoX . En réponse au message Faire 2 bases de données. Évalué à 2.
actuellement tu as
qui indique que le fichier sera data_DHT22.rrd
que les rdata seront "N"TemperatureHumidité
pour ensuite l'ecrire dans le fichier.
en reecrivant le code ainsi, ca doit le faire
et probablement, plus bas, adapter, dans la fonction rrdExport pour gerer cela
qui devient
[^] # Re: loop
Posté par NeoX . En réponse au message Parsage sur plusieur fichier. Évalué à 2.
faire du code implique de comprendre ce qu'il fait
car copier coller sans comprendre, c'est prendre le risque d'installer un virus,
et puis tu n'apprends rien si tu ne fais que copier/coller betement.
ici tu as un code qui :
- ouvre le fichier resultat,
- fait une boucle pour traiter tous les fichiers passés en arguments
- va prendre les valeurs (value) et les ecrire dans le fichier de resultat
- ferme le fichier resultat
qu'est ce qui t'empeche de faire une paragraphe similaire,
que tu placerais AVANT de traiter TOUS les fichiers,
qui va traiter le fichier ARGV[1] pour n'en prendre que les "NAME" ?
[^] # Re: loop
Posté par NeoX . En réponse au message Parsage sur plusieur fichier. Évalué à 2.
il va falloir adapter un peu,
comme tu le dis toi meme le code renvoie actuellement la value
et c'est logique avec
si tu ne veux pas la
valuemais lenameben il suffit de changer cela
et si tu veux la value ET le name,
il faut faire 2 lignes pour creer $attr_value et $attr_name,
puis les utiliser dans le
print $FhResult# pas mieux que feth
Posté par NeoX . En réponse au message choix logiciel et imprimeur livre photo. Évalué à 3.
J'ai un imprimeur à coté de chez moi,
il peut faire tous mes tirages, depuis la carte de visite, jusqu'au poster en A0
de 1 page à 5000pages et plus.
Je n'ai donc pas d'imprimante chez moi,
je prepares mes documents en PDF, que je lui envoie par email ou que je lui amene sur clef USB.
Generalement sur place, il fait une premiere epreuve (le fameux BAT : Bon A Tirer),
et si ca me va il lance la serie.
[^] # Re: Password grub directe a l'instalation ? Etrange...
Posté par NeoX . En réponse au message Besoin d'aide sur Oscar démarrage Grub. Évalué à 2.
ben deplace la demande de mot de passe sur la ligne relative à OSCAR plutot que dans le bloc general
par exemple ici, on t'explique tout ca :
https://help.ubuntu.com/community/Grub2/Passwords
apparemment il suffit de mettre
--userssur la ligne que tu souhaites proteger.[^] # Re: revoir l'enoncé et choisir ce qui va bien
Posté par NeoX . En réponse au message Communication entre deux processus pere-fils bloquante. Évalué à 2.
tu y es presque,
mais je penses que tu as l'impression que cela fonctionne car tu vois coucou sur stdout
mais c'est directement le fils qui ecrit sur stdout, et pas le pere.
pour etre sur que ce soit le pere, il faudrait ajouter une chaine dans le
fputs(buf,stdout)pour moi il faudrait maintenant que le fils ecrive dans le "pp" puisque c'est là que le pere va lire avec
fgets(buf, sizeof(buf), pp)[^] # Re: loop
Posté par NeoX . En réponse au message Parsage sur plusieur fichier. Évalué à 2.
peut-etre que c'est simplement parce que tu definis :
$file=$argv[1],$argv[2]…
qui ne te sert à rien,
puis que tu fais ta boucle avec $i avec $i qui va lire les arguments
mais que tu executes $twig2->parsefile($file)
dans la realité l'algo de ton code devrait ressembler à ca :
Pour Indice entre 1 et 3 {
lefichier = argument[$Indice]
traitement_du_fichier
}
[^] # Re: La parole de Saint-Ignatius a été enfin écoutée
Posté par NeoX . En réponse à la dépêche Communauté Odoo : L'abbaye du Barroux développe les modules de gestion des dons. Évalué à 4.
J'ai modifié le titre comme suit :
Communauté Odoo : L'abbaye du Barroux développe les modules de gestion des dons[^] # Re: revoir l'enoncé et choisir ce qui va bien
Posté par NeoX . En réponse au message Communication entre deux processus pere-fils bloquante. Évalué à 2.
ben faur le creer avec le pere, le remplir avec le fils
puisqu'il faut le remplir avec les parametres que le fils va lire.
le fils lit ces parametres, fait l'acquisition, ecrit le resultat dans un 2e fichier.
et le pere viendra lire le fichier quand le fils aura terminé donc apres le execl()
[^] # Re: loop
Posté par NeoX . En réponse au message Parsage sur plusieur fichier. Évalué à 2.
donc si on reprend,
tu veux pouvoir taper :
perl parser.xml fichierA.xml fichierB.xml fichierC.xmlet que ca te sorte un seul fichier
resultat.txtalors il faut faire la boucle dans le perl
pour lire chacun des argv
actuellement tu remplis $file1 avec le premier argument argv[0] avec le code
my $file1 = $ARGV[0] || die 'No file1';ben il te faut faire un boucle pour lire chacun des argv[1], argv[2], argv[3]… tant qu'il y en a en fait
d'ailleurs d'apres ton code, ton resultat se trouve en 4e position de la ligne de commande argv[3]
my $FileResult = $ARGV[3] || 'result.txt';[^] # Re: loop
Posté par NeoX . En réponse au message Parsage sur plusieur fichier. Évalué à 2. Dernière modification le 13 avril 2015 à 21:57.
perl parser.pl 1.xml. 2.xml, 3.xml, 4.xml,…, n.xmldonc ca marche ?
[^] # Re: revoir l'enoncé et choisir ce qui va bien
Posté par NeoX . En réponse au message Communication entre deux processus pere-fils bloquante. Évalué à 2.
et acq.c tout seul depuis la ligne de commande prend des parametres ?
parce qu'à ce compte là, faut juste lancer acq.c avec les parametres dans interface.c et recuperer ce qui en sort,
sans avoir besoin de creer des pipes, des sockets ou des fichiers;
dans ton cas, si en ligne de commande tu peux faire :
acq parametre1 parametre2ou
acq --option1 parametre1 --option2 parametre2alors dans interface.c il doit suffire de faire un
retour = execl("/chemin/vers/acq", "parametre1", "parametre2");[^] # Re: loop
Posté par NeoX . En réponse au message Parsage sur plusieur fichier. Évalué à 2.
2 possibilités, qui vont dependre de la sortie attendue.
1°) tu veux un fichier de sortie par fichier d'entrée => boucle du shell
qui avec des fichiers A.xml, B.xml, C.xml
va lancer 3 fois la commande
perl parser.pl nom-du-fichierta commande deviens alors :
for file in *.xml;do perl parser.xml $file;done2°) avoir un seul fichier de sortie contenant le resultat de plusieurs fichiers XML => boucle dans ton perl, sur les arguments que tu lui donnes.
tu vas alors lancé le programme comme suit :
perl parser.pl A.xml B.xml C.xmlet c'est dans le perl que tu fais une boucle pour lire chacun des arguments.
# revoir l'enoncé et choisir ce qui va bien
Posté par NeoX . En réponse au message Communication entre deux processus pere-fils bloquante. Évalué à 2.
alors pourquoi ne pas faire qu'un process ecrive dans un fichier
et que l'autre process lise dans ce fichier
tu as alors 2 process independants, qui peuvent attendre silencieusement,
et quand acq.c remplit le fichier, ca declenche une action du lecteur
[^] # Re: Avoir un bon expert comptable
Posté par NeoX . En réponse au journal Moi aussi j'ai créé une entreprise !. Évalué à 2.
association de gestion qui te fournit … un expert comptable ;)
# par exemple
Posté par NeoX . En réponse au message Comment retrouver ses propres messages ?. Évalué à 4.
-> mon tableau de bord (à gauche, sous le logo du site)
ou bien
-> en cliquant sur ton pseudo en haut de ton post
[^] # Re: Avoir un bon expert comptable
Posté par NeoX . En réponse au journal Moi aussi j'ai créé une entreprise !. Évalué à 2.
ne pas oublier qu'avoir un expert comptable, meme si ca coute ~800/1000€ par an (pour un expert comptable "externe" qui passe de temps en temps dans ta boite(, permet d'eviter la majoration automatique de tes revenus par les services fiscaux qui, l'absence d'expert comptable, considere que tu fraudes sur environ 25% de tes revenu.
[^] # Re: Systemd ?
Posté par NeoX . En réponse au message Remplacer Network Manager par Wicd. Évalué à 2.
et sans systemd un simple
update-rc.d -f network-manager removedevrait supprimer les liens de demarrage automatique du service "network-manager"
il faut juste verifier son nom exact dans
/etc/init.d/# lire le cours sur execl et sur les tubes nommés
Posté par NeoX . En réponse au message Communication entre deux fichiers sous linux. Évalué à 3.
ca me parait etre l'idée de base.
tel que decrit :
- ca ressemble à un devoir à rendre dans la semaine
- sans voir le code c'est difficile de dire ou ca se bloque.
alors comme point de depart je te propose la page de man de
execlen francais : http://www.linuxfr-france.org.invalid/article/man-fr/man3/execv-3.html
en anglais : http://linux.die.net/man/3/execl
[^] # Re: Ubuntu 14.04 SP1
Posté par NeoX . En réponse au journal Le Dell xps 13 édition développeur est enfin là. Évalué à 1.
et il veut dire quoi le .1 apres l'année et le mois de sortie ?
il veut dire "ensemble de correctifs n°1 apres la release officielle"
ce qui est aussi la definition de SP1.
alors quand il faut remplir la fiche du produit qui demande la version de l'OS, et son eventuel service pack,
ben la personne qui a remplit à preferer mettre :
OS : 14.04
Service Pack : SP1
[^] # Re: Ubuntu 14.04 SP1
Posté par NeoX . En réponse au journal Le Dell xps 13 édition développeur est enfin là. Évalué à -10.
Et alors ?
la 14.04 c'est version LTS
ce que ne sont pas 14.10 et 15.04,
donc moi ca me semble logique.
# Samba4
Posté par NeoX . En réponse au message Migrer un AD Windows 2003/2008 vers linux Redhat. Évalué à 5.
Samba4 est TA solution
ca fait controleur de domaine, gestion des utilisateurs, des GPO, etc
en plus ca s'installe assez facilement,
meme si en 2012, j'avais du installé une version en provenance de la suite zentyal car plus recente que la version de mon Ubuntu 12.04 de l'epoque