Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1669 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  compte sur l'horizontale et la verticale

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

compte sur l'horizontale et la verticale

n°2259868
Henri772
Posté le 08-06-2015 à 11:38:20  profilanswer
 

Salut a tous,
 
j'aimerai savoir comment compter sur l vertical et l'horizontal en perl ce qui me rend la tache difficile c'est parceque sur mon fichier d'entree il ya des conditions a respecter, je me resume plus clairement:
 
DATA:
 
Informations:
 
pere, Ami, Somi, Soul, Gari, Paul, piere
tata,
toto,
titi,
tete,
tutu,
 
 
la ligne avec "Informations" ne doit pas etre concidere, le nom "pere" ne doit etre concidere dans les comptage que ce soit sur la vertical comme sur l'Horizontal.
dans cet exemple le resultat devrais etre: Horizontal 6 mots et la vertical 5 mots.
 
Merci bien de votre aide

mood
Publicité
Posté le 08-06-2015 à 11:38:20  profilanswer
 

n°2259892
gilou
Modérateur
Modzilla
Posté le 08-06-2015 à 18:40:35  profilanswer
 

Tu peux t'inspirer d'un truc de ce genre:

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5.  
  6. open my $fh, "<", "test.txt";
  7. my ($h, $v) = (0, 0);
  8.  
  9. while (<$fh> ) {last if (/Informations:/)}
  10. while (<$fh> ) {
  11.  next if (/^\s*$/);
  12.  if (/^pere\b/) {
  13.    $h = 0 + grep {!/^pere$/} map {s/^\s+|\s+$//g; $_} split(/,/, $_);
  14.  } else {
  15.    $v++;
  16.  }
  17. }
  18. close($fh);
  19.  
  20. print "horizontal: $h et vertical: $v\n";


 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2259903
Henri772
Posté le 08-06-2015 à 21:00:38  profilanswer
 

Salut Gilou ,#
merci de ta proposition je pense que ton code a un Probleme comme le mien ou alors c'est moi qui n'a pas bien explique voila un exemple de DATA.
20150606 00:23:41      
default, primary, secondary, copy_directory, forced_copy_flag, always_allow_dump, type_of_dump, full_memory_dump,
d100spuptl25e0, /dev/lg_dumplv, /dev/sysdumpnull, /var/adm/ras, 1 1 fault, disallow,
doc10, 5 fault, 7 8 9 10 disallow,
doc11, 5 fault, 7 8 9 10 disallow,
doc12, 5 fault, 7 8 9 10 disallow,
doc13, 5 fault, 7 8 9 10 disallow,
doc14, 5 fault, 7 8 9 10 disallow,
doc15, 5 fault, 7 8 9 10 disallow,
doc16, 5 fault, 7 8 9 10 disallow,
doc17, 5 fault, 7 8 9 10 disallow,
doc18, 5 fault, 7 8 9 10 disallow,
doc19, 5 fault, 7 8 9 10 disallow,
doc1, /del, /dev/null, /ras, 1 0 fw-assisted, disallow,
doc20, 5 fault, 7 8 9 10 disallow,
doc21, /dev/lg_dumplv, /dev/sysdumpnull, //ras, 1 1 fw, disallow,
doc22, /dev/lg_dumplv, /dev/sysdumpnull, //ras, 1 1 fw, disallow,
doc23, /dev/lg_dumplv, /dev/sysdumpnull, //ras, 1 1 fw, disallow,
doc24, /dev/lg_dumplv, /dev/sysdumpnull, //ras, 1 1 fw, disallow,
doc25, /dev/lg_dumplv, /dev/sysdumpnull, //ras, 1 1 fw, disallow,
doc26, /dev/lg_dumplv, /dev/sysdumpnull, //ras, 1 1 fw, disallow,
doc27, /dev/lg_dumplv, /dev/sysdumpnull, //ras, 1 1 fw, disallow,
doc28, /dev/lg_dumplv, /dev/sysdumpnull, //ras, 1 1 fw, disallow,
doc29, /dev/lg_dumplv, /dev/sysdumpnull, //ras, 1 1 fw, disallow,
doc2, /dev/lg_dumplv, /dev/sysdumpnull, //ras, 1 1 fw, disallow,
doc30, /dev/lg_dumplv, /dev/sysdumpnull, //ras, 1 1 fw, disallow,
doc31, /dev/lg_dumplv, /dev/sysdumpnull, /var/adm/ras, 1 fault, fw-assisted, disallow,
doc32, /dev/lg_dumplv, /dev/sysdumpnull, /var/adm/ras, 1 fault, fw-assisted, disallow,
doc33, /dev/lg_dumplv, /dev/sysdumpnull, /var/adm/ras, 1 fault, fw-assisted, disallow,
doc34, /dev/lg_dumplv, /dev/sysdumpnull, /var/adm/ras, 1 fault, fw-assisted, disallow,
doc35, /dev/lg_dumplv, /dev/sysdumpnull, /var/adm/ras, 1 fault, fw-assisted, disallow,
doc36, /dev/lg_dumplv, /dev/sysdumpnull, /var/adm/ras, 1 fault, fw-assisted, disallow,
doc37, /dev/lg_dumplv, /dev/sysdumpnull, /var/adm/ras, 1 fault, fw-assisted, disallow,
doc38, /dev/lg_dumplv, /dev/sysdumpnull, /var/adm/ras, 1 fault, fw-assisted, disallow,
doc39, /dev/lg_dumplv, /dev/sysdumpnull, /var/adm/ras, 1 fault, fw-assisted, disallow,
doc3, /dev/lg_dumplv, /dev/sysdumpnull, /var/adm/ras, 1 fault, fw-assisted, disallow,
doc40, /dev/lg_dumplv, /dev/sysdumpnull, /var/adm/ras, 1 fault, fw-assisted, disallow,
doc41, 5 fault, 7 8 9 10 disallow,
doc42, 5 fault, 7 8 9 10 disallow,
doc43, 5 fault, 7 8 9 10 disallow,
doc44, 5 fault, 7 8 9 10 disallow,
doc45, 5 fault, 7 8 9 10 disallow,
doc46, 5 fault, 7 8 9 10 disallow,
doc47, 5 fault, 7 8 9 10 disallow,
doc48, 5 fault, 7 8 9 10 disallow,
doc49, 5 fault, 7 8 9 10 disallow,
doc4, 5 fault, 7 8 9 10 disallow,
doc50, 5 fault, 7 8 9 10 disallow,
doc51, 5 fault, 7 8 9 10 disallow,
doc52, 5 fault, 7 8 9 10 disallow,
doc53, 5 fault, 7 8 9 10 disallow,
doc54, 5 fault, 7 8 9 10 disallow,
 
de primary jusqu'a  full_memory_dump,  sont sur la meme ligne malheureusement il difficile de l'affiche comme sur mon fichier.
 default ici remplace  'pere' et en desous de 'pere' sur la meme colonne c'est le nombre de document que j'aimerai determiner.
20150606 00:23:41  est pour informations.
car lorsque j#execute le code il me renvoit hori=0 vert= 0
mon code me revoit =9 et verti = 0 ce qui n'est pas vrais .
et s'il faut se fier a ce fichier donc je t'ai pose le resultat serait
Hori= 7 et verti = 50.
Merci bien de ton aide.

n°2259904
Henri772
Posté le 08-06-2015 à 21:01:42  profilanswer
 

en voici mon code:
#!/usr/bin/perl -w
 
use strict;
use diagnostics;
use warnings;
use Text::CSV;
 
open(INPUT, "<DATA.csv" );
 
my $horiz = 0;
my $vert  = 0;
 
while (<INPUT> ) {
    next if /Informations/;
 
    my $f = 1 if /father/;
 
    $vert++ if $f;  
    my @line_array = split(/, /);
    my $array_size = scalar(@line_array);
    $array_size-- if $f;
 
    $horiz = $array_size if ($horiz < $array_size);
 
}
 
print "Horiz = $horiz \n Vert = $vert\n"

n°2259909
gilou
Modérateur
Modzilla
Posté le 08-06-2015 à 21:32:47  profilanswer
 

Ben il suffisait juste de remplacer dans mon code avec tes nouvelles données:
A) c'est plus après Informations qu'on commence le traitement mais après un truc de la forme \d+\s+\d{2}:\d{2}:\d{2} bref, des chiffres suivis d'une date
B) pere est remplacé par default
ca donne ceci:  

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5.  
  6. open my $fh, "<", "test1.txt";
  7. my ($h, $v) = (0, 0);
  8.  
  9. while (<$fh> ) {last if (/^\d+\s+\d{2}:\d{2}:\d{2}\s*$/)}
  10. while (<$fh> ) {
  11.  next if (/^\s*$/);
  12.  if (/^default\b/) {
  13.    $h = 0 + grep {!/^(default)?$/} map {s/^\s+|\s+$//g; $_} split(/,/, $_);
  14.  } else {
  15.    $v++;
  16.  }
  17. }
  18. close($fh);
  19.  
  20. print "horizontal: $h et vertical: $v\n";


Code qui sur tes données donne en sortie: horizontal: 7 et vertical: 50
(bon, au premier test sur mon code modifié, ça donnait horizontal: 8 car le blanc après la virgule finale créait un champ vide, mais en remplaçant grep {!/^default$/} par grep {!/^(default)?$/} on élimine ce problème).
 
A+,
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2259914
Henri772
Posté le 08-06-2015 à 21:43:34  profilanswer
 

Merci bien ca fonctionne parfaitement .
 
j'ai vraiment un gros probleme avec les expressions regulaire.
tu m'avais envoye des lien j'ai lu et jusque la, les mettre en pratique est toujours difficile.
 
bonne soiree a+

n°2259924
Henri772
Posté le 08-06-2015 à 22:32:11  profilanswer
 

Gilou,
je vais me permettre encore de te derrange une fois de plus.
je ne comprend pas les ligne  9, 11, et 13.
 
merci bien

n°2259925
gilou
Modérateur
Modzilla
Posté le 08-06-2015 à 23:05:41  profilanswer
 

ligne 9: while (<$fh> ) {last if (/^\d+\s+\d{2}:\d{2}:\d{2}\s*$/)}
On lit le fichier ligne a ligne while (<$fh> ) {...} et on s'arrête si on lit une ligne compose d'un nombre suivi d'une date
C'est pour sauter tout le début du fichier jusqy'a cette ligne incluse.
 
ligne 11: next if (/^\s*$/);
On saute les lignes vides ou composées de blancs (si on en trouve)
 
ligne 13: $h = 0 + grep {!/^(default)?$/} map {s/^\s+|\s+$//g; $_} split(/,/, $_);
Faut prendre ça dans l'ordre
split(/,/, $_): On découpe le ligne d'entrée, selon les virgules, en un array
map {s/^\s+|\s+$//g; $_}: On vire les espaces au début et a la fin des éléments de l'array  (on a donc un array dont les champs ont été "nettoyés" à la suite de cela)
grep {!/^(default)?$/}: on filtre l'array pour ne garder que les entrées non vides et non égales à default
0 + ... si on ajoute 0 à un array, ça renvoie le nb d'éléments de l'array.
Donc au final on a compté les champs entre virgule de la ligne initiale qui ne sont ni vides ni égaux à default.
Note: dans map {s/^\s+|\s+$//g; $_} le $_ final sert a réévaluer $_ après son nettoyage (des blancs) et le renvoyer comme valeur (pour chaque élément de l'array).
 
A+,


Message édité par gilou le 08-06-2015 à 23:06:30

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2259926
rat de com​bat
attention rongeur méchant!
Posté le 08-06-2015 à 23:06:02  profilanswer
 

La ligne 9 avance dans le fichier jusqu'à la ligne satisfaisant le regex, soit dans l'exemple 20150606 00:23:41.
La ligne 11 c'est pour ignorer les lignes blanches: Entre le début ^ et la fin $ il n'y a que zéro ou un ou plusieurs * blancs \s (espace, tab).
La ligne 13 c'est bien trop difficile pour moi...

 

edit: ok, trop lent...


Message édité par rat de combat le 08-06-2015 à 23:06:35
n°2259960
Henri772
Posté le 09-06-2015 à 11:33:30  profilanswer
 

Tres gentil de votre part
Grand Merci

mood
Publicité
Posté le 09-06-2015 à 11:33:30  profilanswer
 

n°2261138
Henri772
Posté le 25-06-2015 à 12:10:00  profilanswer
 

Henri772 a écrit :

Tres gentil de votre part
Grand Merci


 
Salut a tous j'ai un autre probleme, j'ai un code dont je ne comprend pas ce qui ce passe car il ne me donne les resultats souhaite en prennant compte du DATA que j'avais deja eu a donne plus haut .
j'aimerai qu'il me donne la liste des Parametres ca veut dire tous les noms  se trouvant devant "default" sur la horizontal  et tous les noms des systemes se trouvant en dessous de de "default" donc sur la ligne le mon "fault" apparaitrai. en principe le code donc je possede devrait tout de meme deja me donne la liste des noms se trouvant sous la vertical a "default" mais malheureusement c'est pas le cas il ne me revoi rien .regardez un peu
 

Code :
  1. use strict;
  2. use warnings;
  3. use List::Util 'any';
  4. my $FResult = 'Resulte.txt';       
  5.              
  6. open( my $Resulte, '>', $FResult )or die ("Unable to open file $FResult\n$!" );
  7. open my $Fhresult, '<', 'DATA.csv' or die $!; 
  8. my @files; 
  9. while (<$Fhresult> ) {last if (/^\d+\s+\d{2}:\d{2}:\d{2}\s*$/)}
  10. while ( <$Fhresult> ) {
  11.   next unless /\S/;     
  12.  
  13.   chomp;       
  14.  
  15.   my ($file, @fields) = split /,/; 
  16.   next if $file eq 'default';       
  17.  
  18.   push @files, $file if any { $_ eq 'fault' } @fields; 
  19. }
  20. printf $Resulte "number of files: %d\n", scalar @files; 
  21. print $Resulte "File names are:\n";  #text
  22. print $Resulte "$_\n" for @files;

n°2261236
gilou
Modérateur
Modzilla
Posté le 25-06-2015 à 21:36:50  profilanswer
 

Ça marche pas entre autres parce que les lignes que tu as données en exemple sont de la forme
doc10, 5 fault, 7 8 9 10 disallow,
doc11, 5 fault, 7 8 9 10 disallow,
doc12, 5 fault, 7 8 9 10 disallow,
doc13, 5 fault, 7 8 9 10 disallow,
doc14, 5 fault, 7 8 9 10 disallow,
Et chez moi, chacune de ces lignes n'a que 3 champs quand on fait un split sur les virgules.
Alors il manque des virgules dans ton exemple, ou ton CSV n'en est pas vraiment un?
Bon, en remplaçant la regexp de ton split:  
my ($file, @fields) = split /\s*,\s*|\s+/;  
ça pourrait coller s'il y a pas de blanc dans tes noms de documents.
 
A+,

Message cité 1 fois
Message édité par gilou le 25-06-2015 à 21:47:32

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2261249
Henri772
Posté le 26-06-2015 à 06:13:41  profilanswer
 

gilou a écrit :

Ça marche pas entre autres parce que les lignes que tu as données en exemple sont de la forme
doc10, 5 fault, 7 8 9 10 disallow,
doc11, 5 fault, 7 8 9 10 disallow,
doc12, 5 fault, 7 8 9 10 disallow,
doc13, 5 fault, 7 8 9 10 disallow,
doc14, 5 fault, 7 8 9 10 disallow,
Et chez moi, chacune de ces lignes n'a que 3 champs quand on fait un split sur les virgules.
Alors il manque des virgules dans ton exemple, ou ton CSV n'en est pas vraiment un?
Bon, en remplaçant la regexp de ton split:  
my ($file, @fields) = split /\s*,\s*|\s+/;  
ça pourrait coller s'il y a pas de blanc dans tes noms de documents.
 
A+,


 
 
Salut Gilou,
j'ai un notre script perl qui parse les fichiers c'est lui qui me revoit le DATA plus haut et j'ai remarque, lorsqu'il parse et rencontre un chiffre il ne met pas virgule apres celui ci. moi meme je sais pas ce qui se passe a ce niveau. voila ou ce passe le parsage.
voila le niveau ou ce fait le parsage, peut etre tu peus me dire a quel niveau est le probleme. Plus bas tu veras a quoi ressemble l'un des fichier qu'il est capable de parser. Merci bien
 

Code :
  1. for my $file (@files) { 
  2.     my $twig1 = XML::Twig->new(
  3.         twig_handlers => {
  4.             'Parameter' => sub {
  5.                 my $attr_value = $_->{'att'}->{'value'} // 'fault';   
  6.                 print $FhResult $attr_value . ", ";
  7.             },
  8.         },
  9.     );
  10.     print $FhResult( ( split( '_', "\n$file", 2 ) )[0] . ', ');
  11.     $twig1->parsefile($file);                                     
  12. }


 

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2.       <profile origin="get" version="2.0.1" date="2015-03-19T10:31:57Z">
  3.    <Catalog id="sysdumpdevParam" version="2.1">
  4.     <Parameter name="primary" value="/del"/>
  5.     <Parameter name="secondary" value="/dev/null"/>
  6.     <Parameter name="copy_directory" value="/ras"/>
  7.     <Parameter name="forced_copy_flag" value="1"/>
  8.     <Parameter name="always_allow_dump" value="0"/>
  9.     <Parameter name="type_of_dump" value="fw-assisted" applyType="nextboot" reboot="true"/>
  10.     <Parameter name="full_memory_dump" value="disallow"/>
  11.    </Catalog>
  12.   </profile>


Message édité par Henri772 le 26-06-2015 à 06:19:26
n°2261250
Henri772
Posté le 26-06-2015 à 06:30:58  profilanswer
 

Parlant du premier probleme donc j'ai enonce et donc tu as meme copier une partie qui ne tenait pas a savoir
 
doc10, 5 fault, 7 8 9 10 disallow,
doc11, 5 fault, 7 8 9 10 disallow,
doc12, 5 fault, 7 8 9 10 disallow,
doc13, 5 fault, 7 8 9 10 disallow,
doc14, 5 fault, 7 8 9 10 disallow,  
 
normalement mon script ne devrai pas alle jusqu'a l'interieur de ce Data il sence traite la premiere ligne d'ou "default" est ecrit et me renvoyer tous les noms de parametre se trouvant excepte "default"dans le cas se serai: primary, secondary, copy_directory, forced_copy_flag, always_allow_dump, type_of_dump, full_memory_dump.
 Ensuite alle traite ligne apres ligne en dessous de "default" garde a chaque fois le premier nom dans le cas de'espece se serai: doc10, doc11,doc12, doc13...doc54.
donc c'est un peu cela.

n°2261265
Henri772
Posté le 26-06-2015 à 10:43:33  profilanswer
 

j'ai un peut mit de temps pour te confirmer effectivement ca marche quand on remplace le regex par my ($file, @fields) = split /\s*,\s*|\s+/;  
mais normalement il devrai y avoir des virgules apres ses chiffres. comme je l'ai dit par ailleur je ne sais pas ce qui ce passe quand je parse les fichiers.

n°2261272
gilou
Modérateur
Modzilla
Posté le 26-06-2015 à 11:33:55  profilanswer
 

> print $FhResult $attr_value . ", ";
Je n'ai pas le temps de tester, alors je répond à vue, mais ça devrait être print $FhResult $attr_value, ", ";
avec une virgule et non un point.
Et si tu as alors des virgules partout en sortie, utilises
my ($file, @fields) = split /\s*,\s*/;  
Ça splittera selon les virgules et de plus ça virera les blancs autour des champs.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2261273
gilou
Modérateur
Modzilla
Posté le 26-06-2015 à 11:39:47  profilanswer
 

twig_handlers => {
            'Parameter' => sub {
                my $attr_value = $_->{'att'}->{'value'} // 'fault';    
                print $FhResult $attr_value, ", ";
            },
        }


Ça dit juste que quand on rencontre l'élément Parameter, on écrit en sortie la valeur de l'attribut value porté par cet élément, suivi d'une virgule.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2261311
Henri772
Posté le 26-06-2015 à 21:30:49  profilanswer
 

J#ai oubli de mensionne un detail lorsque le fichier de sortie est de type csv apres les chiffres, il ya pas de virgule mais lorsquIl est de Type txt la il ya les virgule apres les chiffres. comment peut on explique cela

n°2261313
Henri772
Posté le 26-06-2015 à 21:42:34  profilanswer
 

ou alors ca revient a simple logique Mathematique csv et une feuille de calcul et une virgule apres un chiffre suivi de 0 ou rien revient juste au chiffre. pour m'explique :
1,0 =1
1, =1  
donc csv supprime automatique la virgule mais est-il possible d'oblige csv d'accepte une virgule un chiffre ? c'est ca le probleme

n°2261324
gilou
Modérateur
Modzilla
Posté le 27-06-2015 à 10:05:30  profilanswer
 

Henri772 a écrit :

J#ai oubli de mensionne un detail lorsque le fichier de sortie est de type csv apres les chiffres, il ya pas de virgule mais lorsquIl est de Type txt la il ya les virgule apres les chiffres. comment peut on explique cela

Si vous ne donnez aucune info sur la manière dont chacun des formats est généré, je ne risque pas de pouvoir vous répondre, même avec l'utilisation de boules de cristal et de M.arc de café.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2261327
Henri772
Posté le 27-06-2015 à 15:34:49  profilanswer
 

Avec la virgule ou le point a ce niveau > print $FhResult $attr_value . ", ";   cela ne change malheureusement pas le resultat. d'apres mon avis comme je l'ai deja souligne je pense c'est le fait que csv est une feuille de calcul et un chiffre suivit juste d'une virgule, sans un chiffre  apres la virgule, la virgule sera automatiquement supprime

Message cité 1 fois
Message édité par Henri772 le 27-06-2015 à 15:37:17
n°2261330
gilou
Modérateur
Modzilla
Posté le 27-06-2015 à 18:26:01  profilanswer
 

Henri772 a écrit :

Avec la virgule ou le point a ce niveau > print $FhResult $attr_value . ", ";   cela ne change malheureusement pas le resultat. d'apres mon avis comme je l'ai deja souligne je pense c'est le fait que csv est une feuille de calcul et un chiffre suivit juste d'une virgule, sans un chiffre  apres la virgule, la virgule sera automatiquement supprime

A moins que vous n'ayez du code spécifique autre que le code Twig que vous avez indiqué, il n'y a aucune raison.  
D'autre part, j'ai testé le code Twig que vous avez posté, avec les données que vous avez fourni plus haut.
Il marche parfaitement, avec un . ou une , (mais la , est plus sure d'emploi dans ce contexte) et fournit une ligne correcte avec des virgules partout.
Donc manifestement, lorsque vous avez un export incorrect, ça ne semble pas passer par ce code ou bien le code que vous avez fourni est incomplet.
 
D'autre part, pour le code Twig, ceci serait bien préférable:

Code :
  1. for my $file (@files) {  
  2.    my @fields;
  3.    push @fields, (split('_', "$file", 2))[0];
  4.    my $twig1 = XML::Twig->new(
  5.        twig_handlers => {
  6.            'Parameter' => sub {    
  7.                my $attr_value = $_->{'att'}->{'value'} // 'fault';      
  8.                push @fields, $attr_value;    
  9.            },
  10.        },
  11.    );
  12.    $twig1->parsefile($file);  
  13.    print $FhResult join(',', @fields), "\n";                                    
  14. }


A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2261649
Henri772
Posté le 02-07-2015 à 13:06:26  profilanswer
 

Merci bien Gilou de ton Aide et de tes propositions

n°2261752
Henri772
Posté le 03-07-2015 à 15:03:01  profilanswer
 

Henri772 a écrit :

Merci bien Gilou de ton Aide et de tes propositions


 
Salut Gilou,
encore une aide de ta part en prenant reference au Data plus haut lorsque j'execute ce code il me fourni  
 
default, primary, secondary, copy_directory, forced_copy_flag, always_allow_dump, type_of_dump, full_memory_dump,  
 
j'aimerai qu'il ignore ou saute le mot "default" et me retourne dans cet ordre:
 
primary
secondary  
copy_directory
forced_copy_flag  
always_allow_dump
type_of_dump
full_memory_dump
 
 

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5. open my $fh, "<", "DATA.csv" ;
  6. while (<$fh> ){
  7. if ($. == 2) {
  8. print "$_\n";
  9.     }
  10. }


n°2261768
gilou
Modérateur
Modzilla
Posté le 03-07-2015 à 18:23:58  profilanswer
 

Au lieu de  
if ($. == 2) {
    print "$_\n";
}
faire
if ($. == 2) {
    s/^default,\s*//;  # on efface le début
    print "$_\n";
}
 
A+,

n°2261770
Henri772
Posté le 03-07-2015 à 18:46:32  profilanswer
 

Merci bien

n°2261866
Henri772
Posté le 06-07-2015 à 04:36:54  profilanswer
 

Bonjour Gilou,
j'ai essaye d'ameliorer le code plus bas mais lorsqu'il me revoit la liste des parametres, il ya une ligne vide plus bas qu'elle revoit aussi, comment faire pour supprimer cette ligne vide car elle me derrange. en voila un appercu de la sortie plus bas.
Merci bien

 
Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5. my ( @woerter );
  6. open my $fh, "<", "DATA.csv";
  7. while (<$fh> ) {last if (/^\d+\s+\d{2}:\d{2}:\d{2}\s*$/)}
  8. while ( <$fh> ) { 
  9. if ($. == 2) {     
  10. s/^default,\s*//;   
  11. @woerter = split ( /[ ,. ;:\(\)\/\*\"]+/ );         
  12. foreach my $parametre ( @woerter ) {         
  13. print "$parametre\n";                         
  14.     }
  15.   } 
  16. }
  17. close ($fh);
 


C:\Users\Henri\Documents\probe>perl woerterlisten.pl DATA.csv
primary
secondary
copy_directory
forced_copy_flag
always_allow_dump
type_of_dump
full_memory_dump

  

C:\Users\Henri\Documents\probe>


Message édité par Henri772 le 06-07-2015 à 04:42:34
n°2261880
Henri772
Posté le 06-07-2015 à 10:39:17  profilanswer
 

j'ai resolu le probleme avec   chomp;
bonne journee

n°2261890
gilou
Modérateur
Modzilla
Posté le 06-07-2015 à 12:01:53  profilanswer
 

J'aurais fait ceci:

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5.  
  6. my ( @woerter );
  7. open my $fh, "<", "DATA.csv";
  8. while (<$fh> ) {last if (/^\d+\s+\d{2}:\d{2}:\d{2}\s*$/)}
  9. while ( <$fh> ) {
  10.    if ($. == 2) {    
  11.     @woerter = grep {!/^(default)?\s*$/} split ( /[ ,. ;:\(\)\/\*\"]+/ );   #" split et on vire les champs vides, constitués de blanc ou celui égal a default
  12.     map {s/^\s+|\s+$//g} @woerter;  #on vire les espaces autour des champs
  13.     print join(",\n", @woerter); # on les imprime
  14.    }
  15. }
  16. close ($fh);


A+,

Message cité 1 fois
Message édité par gilou le 06-07-2015 à 12:02:39

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2261965
Henri772
Posté le 06-07-2015 à 19:41:34  profilanswer
 

Merci bien de ta propositon c'est tres Gentil
 
Bonjour Gilou,
une fois de plus j'ai un code qui fonctionne bien jusqu'ici mais avec cela il es un peu faciöe de se perdre, j'aimerai que tu m'aide a separer cela de maniere a ce que plus haut j'ai mon code perl et plus bas mon print html ainsi je pense qu'il sera facile pour qu'un de s'y retrouve facile. comme je l'ai dit le code fonctionne parfaitement j'aimerai juste d'un cote perl et de l'autre print hml. Merci bien ,  Apropos j'ai une derniere question comme faire lorsque j'ai plusieurs code-perl que j'aimerai en faire ce un seul grand-code, car plustard j'aimerai plus avoir une separation total du code html  des Code perl, et ainsi proceder par la methode d'appel. c'est un peu cela mon probleme Merci bien de ton Aide et bonne journee.
 
 

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5. use List::Util 'any';
  6. my $Filehtml = 'seite2.html';
  7. open( my $Fhhtml, '>', $Filehtml );
  8. open my $Fhresult, '<', 'DATA.csv' or die $!; 
  9. my @files; 
  10. while (<$Fhresult> ) {last if (/^\d+\s+\d{2}:\d{2}:\d{2}\s*$/)}
  11. while (<$Fhresult> ) {
  12.   next unless /\S/;     
  13.   chomp;     
  14.  
  15.   my ($file, @fields) = split /\s*,\s*|\s+/;
  16.   next if $file eq 'default';       
  17.   push @files, $file if any { $_ eq 'fault' } @fields; 
  18. }
  19. print $Fhhtml "
  20. <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">
  21. <html>
  22.     <head>
  23.         <title>SYSTEME UND PARAMETER</title>
  24.  <meta charset=\"UTF-8\"/>
  25.         <link href=\"seite1.css\" type=\"text/css\" rel=\"stylesheet\"/>
  26.     </head>
  27.     <body>
  28.        <div id=\"page\">
  29.           <div id=\"navigation\">
  30.             <div id=\"menu\">
  31.              <dl>
  32.                 <dt>Systeme</dt>
  33.                 <dd>
  34.                     <ul>\n";
  35. print $Fhhtml "<li><a href=\"http://www.erp4students.de/\">$_</a></li>\n" for @files; 
  36. print $Fhhtml "  </ul>
  37.                 </dd>
  38.              </dl>
  39.            
  40.              <dl>
  41.                 <dt>Parameter</dt>
  42.                 <dd>
  43.                     <ul>\n";
  44. my ( @woerter );
  45. open my $fh, "<", "DATA.csv";
  46. while (<$fh> ) {last if (/^\d+\s+\d{2}:\d{2}:\d{2}\s*$/)}
  47. while ( <$fh> ) { 
  48. if ($. == 2) {     
  49. chomp;
  50. s/^default,\s*//;   
  51. @woerter = split ( /[ ,. ;:\(\)\/\*\"]+/ );         
  52. foreach my $parametername ( @woerter ) {           
  53. print $Fhhtml "<li><a>$parametername</a></li>\n";
  54.                        
  55. }
  56. print $Fhhtml " </ul>
  57.                 </dd>
  58.              </dl>
  59.            
  60.           </div>
  61.    </div>   
  62.  </div>
  63.  
  64.   </body>
  65. </html>";
  66.   } 
  67. }
  68. close ($fh);
  69. close $Fhhtml;

Message cité 1 fois
Message édité par Henri772 le 07-07-2015 à 11:40:48
n°2262083
Henri772
Posté le 08-07-2015 à 11:32:06  profilanswer
 

gilou a écrit :

J'aurais fait ceci:

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5.  
  6. my ( @woerter );
  7. open my $fh, "<", "DATA.csv";
  8. while (<$fh> ) {last if (/^\d+\s+\d{2}:\d{2}:\d{2}\s*$/)}
  9. while ( <$fh> ) {
  10.    if ($. == 2) {    
  11.     @woerter = grep {!/^(default)?\s*$/} split ( /[ ,. ;:\(\)\/\*\"]+/ );   #" split et on vire les champs vides, constitués de blanc ou celui égal a default
  12.     map {s/^\s+|\s+$//g} @woerter;  #on vire les espaces autour des champs
  13.     print join(",\n", @woerter); # on les imprime
  14.    }
  15. }
  16. close ($fh);


A+,


 
Bonjour Gilou,  
Laisse tomber le probleme d'hier,  
jaimerai que tu m'aides comment faire a ce sie je tape un document il m'affiche les parametres correspondants. Sachant que nous avons deja le code ci dessus qui nous affiche les parametres. toujours en reference avec notre DATA plus haut , ceci donnerai
sie je tape d100spuptl25e0, tenant biensur compte que les noms des parametres du "default" sont les memes. je recois:
 
default                               d100spuptl25e0
primary                               /dev/lg_dumplv
secondary                          /dev/sysdumpnull
copy_directory                   /var/adm/ras
forced_copy_flag               1
always_allow_dump          1
type_of_dump                   fault
full_memory_dump           disallow
 
si je tape doc10 je recois  
 
default                               doc10
primary                              5
secondary                          fault
copy_directory                   7
forced_copy_flag               8
always_allow_dump          9
type_of_dump                   10
full_memory_dump           disallow
 
et ainsi de suite. Merci bien de ton aide a+
 

n°2262097
gilou
Modérateur
Modzilla
Posté le 08-07-2015 à 12:14:08  profilanswer
 

Je te dirai cela ce soir ou demain, je suis pris toute la journée d'aujourd'hui.
L'idée de base c'est de mémoriser les infos dans un hash qui a pour clé ton nom de document.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2262144
gilou
Modérateur
Modzilla
Posté le 08-07-2015 à 16:50:56  profilanswer
 

Henri772 a écrit :

Merci bien de ta propositon c'est tres Gentil
 
Bonjour Gilou,
une fois de plus j'ai un code qui fonctionne bien jusqu'ici mais avec cela il es un peu faciöe de se perdre, j'aimerai que tu m'aide a separer cela de maniere a ce que plus haut j'ai mon code perl et plus bas mon print html ainsi je pense qu'il sera facile pour qu'un de s'y retrouve facile. comme je l'ai dit le code fonctionne parfaitement j'aimerai juste d'un cote perl et de l'autre print hml. Merci bien ,  Apropos j'ai une derniere question comme faire lorsque j'ai plusieurs code-perl que j'aimerai en faire ce un seul grand-code, car plustard j'aimerai plus avoir une separation total du code html  des Code perl, et ainsi proceder par la methode d'appel. c'est un peu cela mon probleme Merci bien de ton Aide et bonne journee.


 

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5. use List::Util 'any';
  6.  
  7. my $html_top = <<"EOT";
  8. <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">
  9. <html>
  10.  <head>
  11.    <title>SYSTEME UND PARAMETER</title>
  12.    <meta charset=\"UTF-8\"/>
  13.    <link href=\"seite1.css\" type=\"text/css\" rel=\"stylesheet\"/>
  14.  </head>
  15.  <body>
  16.    <div id=\"page\">
  17.      <div id=\"navigation\">
  18.        <div id=\"menu\">
  19.          <dl>
  20.            <dt>Systeme</dt>
  21.            <dd>
  22.              <ul>
  23. EOT
  24. #                <li><a href=\"http://www.erp4students.de/\">$_</a></li>\n" for @files;
  25. my $html_middle = <<"EOT";
  26.              </ul>
  27.            </dd>
  28.          </dl>
  29.          <dl>
  30.            <dt>Parameter</dt>
  31.            <dd>
  32.              <ul>
  33. EOT
  34. #                <li><a>$_</a></li>
  35. my $html_bottom = <<"EOT";
  36.              </ul>
  37.            </dd>
  38.          </dl>
  39.        </div>
  40.      </div>
  41.    </div>
  42.  </body>
  43. </html>
  44. EOT
  45.  
  46. my $input_file = 'DATA.csv';
  47. my (@woerter, @files);
  48.  
  49. # On parse DATA.csv et on range dans @woerter et @files les infos utiles
  50. open(my $Fhresult, '<', $input_file);
  51. while (<$Fhresult> ) {
  52.  last if (/^\d+\s+\d{2}:\d{2}:\d{2}\s*$/);
  53. }
  54. while (<$Fhresult> ) {
  55.  if ($. == 2) {
  56.    chomp;
  57.    s/^default,\s*//;
  58.    @woerter = split ( /[ ,. ;:\(\)\/\*\"]+/ );  #" (commentaire juste pour que ça soit mieux visualisé sur hfr)
  59.    next;
  60.  }
  61.  next unless /\S/;
  62.  chomp;
  63.  my ($file, @fields) = split /\s*,\s*|\s+/;
  64.  push @files, $file if any { $_ eq 'fault' } @fields;
  65. }
  66. close($Fhresult);
  67.  
  68. #On imprime le tout comme un document html
  69. my $output_file = 'seite2.html';
  70. open(my $Fhhtml,   '>', $output_file );
  71. print $Fhhtml $html_top;
  72. print $Fhhtml "                <li><a href=\"http://www.erp4students.de/\">$_</a></li>\n" for @files;
  73. print $Fhhtml $html_middle;
  74. print $Fhhtml "                <li><a>$_</a></li>\n" for @woerter;
  75. print $Fhhtml $html_bottom;
  76. close($Fhhtml);


J'ai repris ton code juste en le réordonnant afin  
1) d'imprimer tout dans le fichier html d'un coup
2) de parser une seule fois et non pas deux le fichier source
3) faudra améliorer la génération de tes liens: <a href=\"http://www.erp4students.de/\"> -> <a href=\"http://www.erp4students.de/.......\">
 
A+,


Message édité par gilou le 08-07-2015 à 18:27:54

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2262157
gilou
Modérateur
Modzilla
Posté le 08-07-2015 à 19:15:08  profilanswer
 

Henri772 a écrit :


 
Bonjour Gilou,  
Laisse tomber le probleme d'hier,  
jaimerai que tu m'aides comment faire a ce sie je tape un document il m'affiche les parametres correspondants. Sachant que nous avons deja le code ci dessus qui nous affiche les parametres. toujours en reference avec notre DATA plus haut , ceci donnerai
sie je tape d100spuptl25e0, tenant biensur compte que les noms des parametres du "default" sont les memes. je recois:
 
default                               d100spuptl25e0
primary                               /dev/lg_dumplv
secondary                          /dev/sysdumpnull
copy_directory                   /var/adm/ras
forced_copy_flag               1
always_allow_dump          1
type_of_dump                   fault
full_memory_dump           disallow
 
si je tape doc10 je recois  
 
default                               doc10
primary                              5
secondary                          fault
copy_directory                   7
forced_copy_flag               8
always_allow_dump          9
type_of_dump                   10
full_memory_dump           disallow
 
et ainsi de suite. Merci bien de ton aide a+
 


 

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5. use List::Util 'any';
  6.  
  7. my $input_file = 'DATA.csv';
  8. my (@headers, %docs);
  9.  
  10. open(my $Fhresult, '<', $input_file);
  11. while (<$Fhresult> ) {
  12.  last if (/^\d+\s+\d{2}:\d{2}:\d{2}\s*$/);
  13. }
  14. while (<$Fhresult> ) {
  15.  if ($. == 2) {
  16.    chomp;
  17.    s/^default,\s*//;
  18.    @headers = split ( /[ ,. ;:\(\)\/\*\"]+/ );  #" (commentaire juste pour que ça soit mieux visualisé sur hfr)
  19.    next;
  20.  }
  21.  next unless /\S/;
  22.  chomp;
  23.  my ($file, @fields) = split /\s*,\s*|\s+/;
  24.  $docs{$file} = [@fields] if any { $_ eq 'fault' } @fields;
  25.  # ou bien? $docs{$file} = [@fields]; si on veut tout
  26. }
  27. close($Fhresult);
  28.  
  29. foreach my $doc (keys %docs) {
  30.  print "$doc:\n";
  31.  foreach (0..$#headers) {
  32.    printf("%18s : %s\n", $headers[$_], $docs{$doc}->[$_]);
  33.  }
  34.  print "\n";
  35. }


 
En sortie:

....................................
doc51:
           primary : 5
         secondary : fault
    copy_directory : 7
  forced_copy_flag : 8
 always_allow_dump : 9
      type_of_dump : 10
  full_memory_dump : disallow
 
doc39:
           primary : /dev/lg_dumplv
         secondary : /dev/sysdumpnull
    copy_directory : /var/adm/ras
  forced_copy_flag : 1
 always_allow_dump : fault
      type_of_dump : fw-assisted
  full_memory_dump : disallow
 
doc46:
           primary : 5
         secondary : fault
    copy_directory : 7
  forced_copy_flag : 8
 always_allow_dump : 9
      type_of_dump : 10
  full_memory_dump : disallow
.....................................


 
A toi d'adapter pour avoir un dialogue interactif avec juste un seul résultat au lieu de tout lister.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2262170
Henri772
Posté le 08-07-2015 à 22:48:26  profilanswer
 

Wooo Gilou c'est extremement gentil de ta part .
mes sinceres remerciments

n°2262209
Henri772
Posté le 09-07-2015 à 13:11:34  profilanswer
 

Bonjour une fois de plus merci pour ton aide j'ai une question sur le dernier code: pardon ces ligne je ne comprend pas  
foreach parcours la liste c'est le 0..$#headers que je ne comprend pas et en suite la ligne printf.
 
foreach (0..$#headers) {
       printf("%18s : %s\n", $headers[$_], $docs{$doc}->[$_]);

n°2262214
Henri772
Posté le 09-07-2015 à 14:15:54  profilanswer
 

s'il te plait ou insere mon split pour un decoupage en plusieurs fichiers
c'est a dire lors qu'il me revoit les donnes d'un document il les ecrit  sur un fichier f1 le decoupe et le sauvegarde et passe a l'autre document ecrit les donnes sur le second fichier f2 le decoupe et sauvegade et ainsi de suite jusqu'a ce qu'il me renvoi les fichiers des de chaque document.

n°2262215
gilou
Modérateur
Modzilla
Posté le 09-07-2015 à 14:18:26  profilanswer
 

> foreach (0..$#headers)  
Ben la liste @header a pour indice de début 0 et indice de fin $#headers
Donc on parcourt les indices de la liste. (ie on va parcourir la liste en faisant varier l'indice de ses éléments)
> $headers[$_]
C'est l'élément de liste @header d'indice $_,ie la valeur courante du foreach (0..$#headers)
> $docs{$doc}->[$_]
%doc est un hash dont les clés sont les noms des documents et les valeurs des références a des listes, dont l'indice varie lui aussi, par construction, de 0 à $#headers.
$docs{$doc} est la référence au la liste associée au document $doc
$docs{$doc}-> on déréférence (on a donc la liste)
$docs{$doc}->[$_] on a la valeur de la liste d'indice $_
 
Note: j'aurais pu écrire @{$docs{$doc}}[$_] à la place de $docs{$doc}->[$_]. Avec cette notation, le déréférencement de $docs{$doc} en liste est explicite: @{$docs{$doc}}
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2262216
gilou
Modérateur
Modzilla
Posté le 09-07-2015 à 14:26:49  profilanswer
 

Henri772 a écrit :

s'il te plait ou insere mon split pour un decoupage en plusieurs fichiers
c'est a dire lors qu'il me revoit les donnes d'un document il les ecrit  sur un fichier f1 le decoupe et le sauvegarde et passe a l'autre document ecrit les donnes sur le second fichier f2 le decoupe et sauvegade et ainsi de suite jusqu'a ce qu'il me renvoi les fichiers des de chaque document.

C'est pas très clair.
Tu veux dire qu'un truc comme ceci:

doc51:
           primary : 5
         secondary : fault
    copy_directory : 7
  forced_copy_flag : 8
 always_allow_dump : 9
      type_of_dump : 10
  full_memory_dump : disallow
 
doc39:
           primary : /dev/lg_dumplv
         secondary : /dev/sysdumpnull
    copy_directory : /var/adm/ras
  forced_copy_flag : 1
 always_allow_dump : fault
      type_of_dump : fw-assisted
  full_memory_dump : disallow
 
doc46:
           primary : 5
         secondary : fault
    copy_directory : 7
  forced_copy_flag : 8
 always_allow_dump : 9
      type_of_dump : 10
  full_memory_dump : disallow

se retrouverait dans 3 fichiers?
Faut faire un truc comme:
foreach my $doc (keys %docs) {
  open my $fh, ">", 'un nouveau nom a chaque tour.txt',
  print $fh "$doc:\n";
  foreach (0..$#headers) {
    printf($fh "%18s : %s\n", $headers[$_], $docs{$doc}->[$_]);
  }
  print $fh "\n";
  close $fh;
}
 
A+,
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2262222
Henri772
Posté le 09-07-2015 à 15:30:35  profilanswer
 

gilou a écrit :

C'est pas très clair.
Tu veux dire qu'un truc comme ceci:

doc51:
           primary : 5
         secondary : fault
    copy_directory : 7
  forced_copy_flag : 8
 always_allow_dump : 9
      type_of_dump : 10
  full_memory_dump : disallow
 
doc39:
           primary : /dev/lg_dumplv
         secondary : /dev/sysdumpnull
    copy_directory : /var/adm/ras
  forced_copy_flag : 1
 always_allow_dump : fault
      type_of_dump : fw-assisted
  full_memory_dump : disallow
 
doc46:
           primary : 5
         secondary : fault
    copy_directory : 7
  forced_copy_flag : 8
 always_allow_dump : 9
      type_of_dump : 10
  full_memory_dump : disallow

se retrouverait dans 3 fichiers?
Faut faire un truc comme:
foreach my $doc (keys %docs) {
  open my $fh, ">", 'un nouveau nom a chaque tour.txt',
  print $fh "$doc:\n";
  foreach (0..$#headers) {
    printf($fh "%18s : %s\n", $headers[$_], $docs{$doc}->[$_]);
  }
  print $fh "\n";
  close $fh;
}
 
A+,
 


 
 
une fois de plus merci , mais au niveau de   foreach (0..$#headers)  je n'ai pas cette essaye , pouvait-on ecrire  foreach (@headers) {
                                                                                                                                                                                                printf($fh "%18s : %s\n", $headers[$_], $docs{$doc}->[$_]);
                                                                                                                                                                                                        }
 
en ce qui concerne les fichiers de sortie j'aimerai qu'il me revois du genre :
fichier1:

doc51:
           primary : 5
         secondary : fault
    copy_directory : 7
  forced_copy_flag : 8
 always_allow_dump : 9
      type_of_dump : 10
  full_memory_dump : disallow


fichier2:


doc39:
           primary : /dev/lg_dumplv
         secondary : /dev/sysdumpnull
    copy_directory : /var/adm/ras
  forced_copy_flag : 1
 always_allow_dump : fault
      type_of_dump : fw-assisted
  full_memory_dump : disallow


fichier3:


doc46:
           primary : 5
         secondary : fault
    copy_directory : 7
  forced_copy_flag : 8
 always_allow_dump : 9
      type_of_dump : 10
  full_memory_dump : disallow


 
en plusieurs et ainsi de suite.
 
 
Salut, je me permet de te derrange une fois de plus comment faire a ce que ce code me renvoit chaque document sur un fichier de sortie, exactement comme en haut de ce message.
 

Code :
  1. use warnings;
  2.     use autodie;
  3.     use List::Util 'any';
  4.    
  5.     my $input_file = 'DATA.csv';
  6.     my (@headers, %docs, $fh);
  7.    
  8.     open(my $Fhresult, '<', $input_file);
  9.     while (<$Fhresult> ) {
  10.      last if (/^\d+\s+\d{2}:\d{2}:\d{2}\s*$/);
  11.     }
  12.     while (<$Fhresult> ) {
  13.      if ($. == 2) {
  14.        chomp;
  15.        s/^default,\s*//;
  16.        @headers = split ( /[ ,. ;:\(\)\/\*\"]+/ );  #" (commentaire juste pour que ça soit mieux visualisé sur hfr)
  17.        next;
  18.      }
  19.      next unless /\S/;
  20.      chomp;
  21.      my ($file, @fields) = split /\s*,\s*|\s+/;
  22.      $docs{$file} = [@fields] if any { $_ eq 'fault' } @fields;
  23.      # ou bien? $docs{$file} = [@fields]; si on veut tout
  24.     }
  25.     close($Fhresult);
  26.    
  27.     #foreach my $doc (keys %docs) {
  28.      #print "$doc:\n";
  29.      #foreach (0..$#headers) {
  30.       # printf("%18s : %s\n", $headers[$_], $docs{$doc}->[$_]);
  31.      #}
  32.      #print "\n";
  33.     #}
  34. foreach my $doc (keys %docs) {
  35.   open my $fh, '>',"fh.txt"; #'un nouveau nom a chaque tour.txt',
  36.   print $fh "$doc:\n";
  37.   foreach (0..$#headers) {
  38.     printf($fh "%18s : %s\n", $headers[$_], $docs{$doc}->[$_]);
  39.   }
  40.   print $fh "\n";
  41.   close $fh;
  42. }


Message édité par Henri772 le 11-07-2015 à 13:09:51
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  compte sur l'horizontale et la verticale

 

Sujets relatifs
Intégration de compte client dans site e-commercescripte connexion a un compte web automatiquement
Compiler puis envoyer une appli (gratuite) sur un compte AppleStoreProblème Ressource/Config/Log4j pas pris en compte
compte bancaire sous java[objective-c/ios] Provisioning sans compte dev
.NET & Oracle - Compte expiréJ'attends la suppression de mon compte.
Lancer un auto-scrol - Défillement verticale automatique[PowerShell] Compte le nombre de ligne d'un fichier
Plus de sujets relatifs à : compte sur l'horizontale et la verticale


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR