Henri a écrit 153 commentaires

  • [^] # Re: Il manque des trucs

    Posté par  . En réponse au message Une erreur donc je ne comprend pas . Évalué à -10.

    Merci de la remarque Neox

  • [^] # Re: Il manque des trucs

    Posté par  . En réponse au message Une erreur donc je ne comprend pas . Évalué à -10.

    tu as raison, je#'apprand a apprendre j'ai bien dit que ce code a fonctionne au paravant avec cettes donne
    j'ai change les donne et les donnes sont identique au autre mais je suis surpri que cela ne marche,
    et si bien je publi tout le code tu verras que j'ai declare la variable Colums1 plus haut donc quand quelqu'un envois des mot deplace pareil j'aurai encore attendu qu'il me dise de publie tout mon script.
    en Programmation c'est la moindre des chose declarer au prealable une variable si l'on veut qu'elle s'affiche sur notre ecrant.

  • [^] # Re: Il manque des trucs

    Posté par  . En réponse au message Une erreur donc je ne comprend pas . Évalué à -10.

    vous ete rigolo sur ce forum, certains n'ont pas encore compris que c'est pas oblige de repondre a une question si on la trouve bete on peut bien s'abstenir, que lance les mots deplace aux gens.

  • [^] # Re: Il manque des trucs

    Posté par  . En réponse au message Une erreur donc je ne comprend pas . Évalué à -9.

    Merci bien a tous la proposition de Framasky a fonctionner ce qui m'etonne est que ce code a fonctionne avec d'autre Fichier quand j'ai change les Fichiers il a commence a me renvover cette erreur.

    Comme dit j'ai aussi un autre code qui me renvoit une erreur semblable j'ai utilise la Technique de
    Framasky et je recoit ceci

    C:\Users\Desktop\Sys\Script>perl sysvsde.pl
    Global symbol "$colums1" requires explicit package name at sysvsde.pl line 97.
    Global symbol "$colums1" requires explicit package name at sysvsde.pl line 97.
    Execution of sysvsde.pl aborted due to compilation errors.

    C:\Users\Desktop\Sys\Script>

    shift @$row;
            for my $i ( 0 .. $#{$row}-1 ) {
    
                $colums1->{$i} = '' unless (defined($colums1->{$i}));  #line 97 
                print $Fhhtml "<tr><td>$colums1[$i]</td><td>$row->[$i]</td><td>$data2{$colums1[$i]}</td></tr>\n";
    
            }
            print $Fhhtml "</table>\n</body>\n</html>";
            close $Fhhtml or die "close($filename,w) failed: $!";
        }
    
    }
  • [^] # Re: Il manque des trucs

    Posté par  . En réponse au message Une erreur donc je ne comprend pas . Évalué à -8.

    Anaseto,
    c'est comme ca que le code est c'est un bout de code mais j'ai complete la fin du code
    le probleme est que il me signale deja au paravant une erreur au niveau de la ligne 152 et 154 elle et marque

    Use of uninitialized value in concatenation <.> or string at parvsde.pl line 152
    Use of uninitialized value in string ne at parvsde.pl line 154

    my ($errcode, $errtext, $param, $data);
    
        ($errcode, $errtext, $param) = parse_paramfile({filename =>$file1});
        if ($errcode) {
          print "ERROR: $errtext !";
          exit(1);
        }
    
        ($errcode, $errtext, $data) = parse_datafile({filename =>$file2});
        if ($errcode) {
          print "ERROR: $errtext !";
          exit(1);
        }
    
        # use Data::Dumper;
        # print Dumper($param), "\n\n", Dumper($data), "\n";
        my $Fhhtml; 
    
        for my $k ( keys %{$data} ) {
        if ( open( $Fhhtml, '>', "../WEBS/HTML/$k.csv" ) ) {
    
    
           print $Fhhtml "\n<table>\n<tr><th>$k:</th><th>$param->{$k}</th></tr>\n";  #line 152
            for my $i ( 0 .. $#{ $data->{$k} } ) {
                if ( $param->{$k} ne $data->{$k}->[$i]->[1] ) { #line 154
    
                    print $Fhhtml "<tr><td>$data->{$k}->[$i]->[0]</td><td>$data->{$k}->[$i]->[1]</td></tr>\n";  
    
                }
            }
    
        }
        else {
            warn "FEHLER ($!) bei Datei $k.html";
        }
    }
  • [^] # Re: lien entre value et name ?

    Posté par  . En réponse au message Ajouter une condition if. Évalué à -6.

    Neox peut etre tu as raison je vais essaye de voire cela sans relative pfade si ca fonctionne

  • [^] # Re: lien entre value et name ?

    Posté par  . En réponse au message Ajouter une condition if. Évalué à -6.

    salut si tu regarde plus haut j'ai deja deklare la variable

    my $sys_file = '..\InputData\DEFAULT\default_sysvalue.xml'

    c'est exactement ce que je ne comprend pas alors que j'ai deja bien declare la direcion ou

            default_sysvalue.xml'
    

    se trouve

  • [^] # Re: lien entre value et name ?

    Posté par  . En réponse au message Ajouter une condition if. Évalué à -7.

    Voici un morceau de mon code mais je ne comprend pas pourquoi a la derniere ligne il me revoi toujours l'erreur suivante la ligne 37 est la derniere de ce morceau de code.

    C:\Users\Desktop\probe>perl parser.pl default_sysvalue.xml *.xml
    Couldn't open ..\InputData\DEFAULT\default_sysvalue.xml:
    No such file or directory at parser.pl line 37.
     at parser.pl line 37.
    
    C:\Users\Desktop\probe>
    #!/usr/local/bin/perl
        use Modern::Perl;
        use autodie;
        use XML::Twig;
        use Data::Dumper;
        use File::Basename;
    
        # parametrage externe
        my $arg_file = shift @ARGV;
        my $sys_file = '..\InputData\DEFAULT\src_sys.xml';
        my @files = glob('..\InputData\*.xml');
        @files = grep { $_ ne $arg_file } @files if defined $arg_file;
        my $result_file = '..\CSV\DATA.csv';
    
        # On recupere le liste des noms d'attributs
        my @sys_names;
        my $sys_twig = XML::Twig->new( twig_handlers => { 'Parameter' => sub { push @sys_names, $_->{'att'}->{'name'}; }});
        $sys_twig->parsefile($sys_file); # a ce niveau est le probleme
  • [^] # Re: lien entre value et name ?

    Posté par  . En réponse au message Ajouter une condition if. Évalué à -6.

    Salut anaseto et merci bien de ta proposition et je m'excuse je pense que je t'ai induit en erreur il faut pas m'en vouloir auf je vais essayer d'etre un plus plus clair avec des semblants de fichiers:

    le code traite le fichier de depart (src_sys.xml) et me renvoit les noms 'name'(attr_name) sur la pemiere ligne de mon fichier de sortie tout en splitant le nom du fichier de depart.(ceci dans le premier Twig)

    ensuite il va et traite les fichiers restant dans le second Twig. Pour ce fait il cherche les valeurs 'value' (attr_value) correspondant a chaque 'name':

    -Dans le cas ou il n'existe pas dans le fichier entrain d'etre traite il ecrit en desous du 'name' correspondant 'fault'.

    -Dans le cas ou un fichier-xml qui est entrain d'etre traite possede plus de 'name' que le fichier de depart (src_sys.xml) ignorer le 'name' et continue.

    -Dans le cas ou un fichier-xml qui est entrain d'etre traite possede moin de 'name' que le fichier de depart (src_sys.xml) ecrire en desous du 'name' correspondant 'missing'

    jusqu'ici mon code travaille un peu et mais j'ai du souci sur 2 points:

    -par moment quand 'value' n'existe pas au lieu d'ecire 'fault' comme mensionne dans le code il ecrit '0'

    -Et maintenant au niveau de 'missing' cela m'echappe aussi.

    je ne sais pas si quelqu'un ici pourrai me venir en aide. Merci bien d'avance.

    _________________src_sys______________
    <?xml version="1.0" encoding="UTF-8"?>
    <Profile origin="get" version="2.0" date="2013-07-021:49:13Z">
      <Par name="cost" value="0">
       <Target class="inter" inst="en0"/>
      </Par>
      <Par name="mic" value="0">
       <Target class="inter" inst="en1"/>
      </Par>
      <Par name="mor" value="0">
       <Target class="inter" inst="en2"/>
      </Par>
      <Par name="cost" value="0">
       <Target class="inter" inst="lo0"/>
      </Par>
      <Par name="actived" value="0">
       <Target class="inter" inst="en0"/>
      </Par>
      <Par name="edgd" value="0">
       <Target class="inter" inst="en1"/>
      </Par>
      <Par name="activ" value="0">
       <Target class="inter" inst="en2"/>
      </Par>
    </Profile>
    
    _________________ABO________________
    <?xml version="1.0" encoding="UTF-8"?>
    <Profile origin="get" version="2.0" date="2013-07-021:49:13Z">
      <Par name="cost" value="0">
       <Target class="inter" inst="en0"/>
      </Par>
      <Par name="mic">
       <Target class="inter" inst="en1"/>
      </Par>
      <Par name="mor" value="ce">
       <Target class="inter" inst="en2"/>
      </Par>
      <Par name="cost" value="A0">
       <Target class="inter" inst="lo0"/>
      </Par>
      <Par name="actived" value="10">
       <Target class="inter" inst="en0"/>
      </Par>
      <Par name="edgd" value="out">
       <Target class="inter" inst="en1"/>
      </Par>
      <Par name="activ">
       <Target class="inter" inst="en2"/>
      </Par>
    </Profile>
    
    __________________ABI_________________
    <?xml version="1.0" encoding="UTF-8"?>
    <Profile origin="get" version="2.0" date="2013-07-021:49:13Z">
      <Par name="cost" value="1">
       <Target class="inter" inst="en0"/>
      </Par>
      <Par name="mic" value="A">
       <Target class="inter" inst="en1"/>
      </Par>
      <Par name="mor" value="B">
       <Target class="inter" inst="en2"/>
      </Par>
      <Par name="cost" value="C">
       <Target class="inter" inst="lo0"/>
      </Par>
      <Par name="actived">
       <Target class="inter" inst="en0"/>
      </Par>
      <Par name="mac" value="E">
       <Target class="inter" inst="en1"/>
      </Par>
      <Par name="edgd" value="F">
       <Target class="inter" inst="en1"/>
      </Par>
      <Par name="activ" value="G">
       <Target class="inter" inst="en2"/>
      </Par>
    </Profile>
    
    _________________ABA_________________
    <?xml version="1.0" encoding="UTF-8"?>
    <Profile origin="get" version="2.0" date="2013-07-021:49:13Z">
      <Par name="cost" value="40">
       <Target class="inter" inst="en0"/>
      </Par>
      <Par name="mic" value="ae">
       <Target class="inter" inst="en1"/>
      </Par>
      <Par name="mor" value="0">
       <Target class="inter" inst="en2"/>
      </Par>
      <Par name="cost">
       <Target class="inter" inst="lo0"/>
      </Par>
      <Par name="actived" value="da">
       <Target class="inter" inst="en0"/>
      </Par>
      <Par name="activ" value="ka">
       <Target class="inter" inst="en2"/>
      </Par>
    </Profile>
    _____________________output__________________________
    src cost  mic    mor   cost   actived   edgd     activ
    ABO  0    fault  ce     A0      10      out      fault
    ABI  1    A      B      C      fault    F        G
    ABA  40   ae     0      fault   da      missing  ka
  • [^] # Re: au hasard en reprenant les posts precedents, on trouve ...

    Posté par  . En réponse au message sortie sur plusieurs fichiers . Évalué à -5.

    Merci bien de votre aide:
    la solution

    for my $k ( keys %{$data} ) {
        if ( open( $fhout, '>', "$k.csv" ) ) {
            print $fhout "----$k----\n";    
            print $fhout "$k: $param->{$k}\n";  
            for my $i ( 0 .. $#{ $data->{$k} } ) {
                if ( $param->{$k} ne $data->{$k}->[$i]->[1] ) {
    
                    print $fhout "$data->{$k}->[$i]->[0]: $data->{$k}->[$i]->[1]\n";   
                }
            }
        }
        else {
            warn "FEHLER ($!) bei Datei $k.csv";
        }
    }
  • [^] # Re: au hasard en reprenant les posts precedents, on trouve ...

    Posté par  . En réponse au message sortie sur plusieurs fichiers . Évalué à -6.

    par alleur je sais bien comment creer les fichiers.

    dans ce cas il ya plusieurs fichiers qui doivent etre cree. et chaque fichier porte un nom different et des donnes differentes.

    je pourrai juste dire que ca l'air facile mais c'est ne marche pas.

  • [^] # Re: Les jours défilent…

    Posté par  . En réponse au message sortie sur plusieurs fichiers . Évalué à -7.

    evidemment!!!

  • [^] # Re: comme avant

    Posté par  . En réponse au message ouvrir, fermer et créer les fichiers avec chemin relatif . Évalué à -6.

    comme toujours j'ai une question concernant des fichiers que j'aimerai que mon code produise a la sortie voici un morceau de la sortie. peut etre quelqu'un pourrai me donner un coup de main

        my @outputFHs;
        my $outputFHs;
        for my $k (keys %{$data}) {
          open $outputFHs[$_], ">", "$_.csv";
          print $outputFHs[$_] "----$k----\n"; # le nom que porte mon fichier 
          print $outputFHs[$_] "$k: $param->{$k}\n"; # ecrit le nom dans le fichier et la valeur du parametre
          for my $i (0.. $#{$data->{$k}}) {
            if ($param->{$k} ne $data->{$k}->[$i]->[1]) {
              print $outputFHs[$_] "$data->{$k}->[$i]->[0]: $data->{$k}->[$i]->[1]\n"; # noms des data et leurs valeurs
            }
          }
  • [^] # Re: comme avant

    Posté par  . En réponse au message ouvrir, fermer et créer les fichiers avec chemin relatif . Évalué à -7.

    merci a vous je suis encore entrain de faire des essais, par conntre je ne peus pas encore vous donner un compte rendu.

  • [^] # Re: comme avant

    Posté par  . En réponse au message ouvrir, fermer et créer les fichiers avec chemin relatif . Évalué à -8. Dernière modification le 20 octobre 2015 à 12:48.

    bon disons j'aiun fichier qui se trouve en chemin absolut dans le dossier CSV

    C:\Users\Desktop\SysCompare_v01\CSV\DATA2.csv

    et maintenant j'aimerai l'insere dans mon Script.pl en chemin ralatif, comment m'y prendre et ensuite
    si j'aimerai execute mon script.pl dans perl command line devrai je toujours taper: perl script.pl DATA2.csv ou alors je dois taper tout le chemin relativ.

  • [^] # Re: Plusieurs trucs bizarres…

    Posté par  . En réponse au message références aux dossiers parents. Évalué à -6.

    pourquoi il ne trouve pas le fichier suivant a la ligne 66

    $twig1->parsefile($file1); #ligne 66
    C:\Users\Desktop\SysCompare_v01\PerlScript>perl parser.pl defau
    lt_sysdumpdev_150319.xml *.xml
    Couldn't open default_sys.xml:
    No such file or directory at parser.pl line 66.
     at parser.pl line 66.
    
    C:\Users\Desktop\SysCompare_v01\PerlScript>
  • [^] # Re: Plusieurs trucs bizarres…

    Posté par  . En réponse au message références aux dossiers parents. Évalué à -6.

    Anaseto,
    merci bien du tutoriel, mais je voulais justedire que meme les experes programmeurs sont parfois confronte a des problemes. on peu bien pouvoir Programmer et etres confronter a certains petit problem.
    je suis pas un bon programmeur je fait de mon mieu et mon sourci ici est que j'aimerai que mon code aille chercher ler fichier se trouvant dans un dossier und qu'il les traitent et ensuite stocke le fichier de sorti dans un autre dossier.
    comme vous l'avez remarque le $file1 et @files sont dans un meme dossier.
    sans toute fois aller cherche le fichiers xml dans un dossier lorsque ce script se trouve dans le meme dossier que les fichier xml il effectue tres bien son boulot, juste pour dire que ce code fonctionne tres bien.
    c'est maintenant un probem de direction qui me menace.
    Merci bien

  • [^] # Re: Plusieurs trucs bizarres…

    Posté par  . En réponse au message références aux dossiers parents. Évalué à -6.

    voila ce qu'il me revoi, si j'ai bien compris je dois encore declare ma variable $file1

    C:\UsersDesktop\SysCompare_v01\PerlScript>perl parser.pl "C\Us
    ers\IBM_ADMIN\Desktop\SysCompare_v01\InputData"
    Global symbol "$file1" requires explicit package name at parser.pl line 2
    9.
    Global symbol "$file1" requires explicit package name at parser.pl line 2
    9.
    Global symbol "$file1" requires explicit package name at parser.pl line 6
    3.
    Global symbol "$file1" requires explicit package name at parser.pl line 6
    5.
    Execution of parser_selbst.pl aborted due to compilation errors.
    
    C:\Users\Desktop\SysCompare_v01\PerlScript>
  • [^] # Re: Plusieurs trucs bizarres…

    Posté par  . En réponse au message références aux dossiers parents. Évalué à -6.

    voila j'ai fait comme tu me l'as demande il me renvoi cette erreur

    C:\Users\Desktop\SysCompare_v01\PerlScript>perl parser.pl "C\Us
    ers\Desktop\SysCompare_v01\InputData"
    Couldn't open C:\Users\Desktop\SysCompare_v01\InputData:
    Permission denied at parser.pl line 65.
    at parser.pl line 65.
    
    C:\Users\Desktop\SysCompare_v01\PerlScript>

    la ligne 65 si tu regardes le script est :

    $twig1->parsefile($file1);
  • [^] # Re: Plusieurs trucs bizarres…

    Posté par  . En réponse au message références aux dossiers parents. Évalué à -6.

    Salut Neox,
    pourquoi faut il encore preciser la direction comme tu ecrit ici plus haut
    ruby
    perl tonscript.pl "c:\Users\Desktop\UnAutreDossier\"

    alors que pour faire demarre un script dans perl command-line il faut au prealable trouve le dossier dans lequel se trouve le script a savoir du genre
    ruby
    c:\Users\Desktop\Dossier ou le script se trouve> perl .........

  • [^] # Re: Plusieurs trucs bizarres…

    Posté par  . En réponse au message références aux dossiers parents. Évalué à -6.

    Merci Nicola
    ca fonctionne

  • [^] # Re: Plusieurs trucs bizarres…

    Posté par  . En réponse au message références aux dossiers parents. Évalué à -7.

    Neox,
    qu'es ce que tu veus vraiment dire je vais te dire ce code fonctionne sans probleme lorsque les fichiers et mon script se trouvent dans le meme dossier, dire que qu'on m'a donne le code je te remerci bien. comme je suis si bete que je ne peus pas ecrire le moindre code en perl. Merci de la remarque.
    Mon probleme est que mon script puisse retrouver les fichiers dans un dossier

  • [^] # Re: Plusieurs trucs bizarres…

    Posté par  . En réponse au message références aux dossiers parents. Évalué à -6. Dernière modification le 06 octobre 2015 à 18:25.

    Neox
    voila tout le code, les fichiers xml se trouvent tous dans le dossier InputData

    #!/usr/local/bin/perl -w                         
    use strict; 
    use warnings; 
    use XML::Twig;
    use Text::CSV;
    use POSIX qw(strftime); 
    use autodie;  
    
    
    my $file1 = shift @ARGV ;
    
     $file1 = 'C:\Users\Desktop\SysCompare_v01\InputData\default_sys_156778.xml';  
    
    open my $file1, '<', $file1; 
    
    
    open my @files = glob 'C:\Users\Desktop\SysCompare_v01\InputData\*.xml';   
    
    @files = grep { $_ ne $file1 } @files if defined $file1;  
    
    
    
    my $date_1 = strftime "%Y%m%d %H:%M:%S", localtime; 
    
    
    
    my $FileResult = 'C:\Users\Desktop\SysCompare_v01\CSV\DATA.csv';
    
    open( my $FhResult, '>', $FileResult );  
    
    
    print $FhResult $date_1, "\n"; 
    
    
    
    my $twig1= XML::Twig->new(    
    
            twig_handlers => {    
                    'Parameter' => sub {  
    
    my $attr_name = $_->{'att'}->{'name'};                                                         
    
    
                            print $FhResult $attr_name . ", ";    
                    },
            },
    );
    
    print $FhResult( (split('_', $file1,2))[0] . ', ' );  
    
    $twig1->parsefile($file1);   
    
    
    for my $file (@files) {  
    
        my $twig1 = XML::Twig->new(
    
            twig_handlers => {
    
                'Parameter' => sub {
    
                    my $attr_value = $_->{'att'}->{'value'} // 'fault';  
    
                    print $FhResult $attr_value . ", ";
                },
            },
        );
    
    
        print $FhResult ((split( '_', "\n $file", 2 ) )[0] . ', ');
    
        $twig1->parsefile($file);      
    }
    
    close $FhResult;
  • [^] # Re: Plusieurs trucs bizarres…

    Posté par  . En réponse au message références aux dossiers parents. Évalué à -6. Dernière modification le 06 octobre 2015 à 17:57.

    comment je peut splitter cette chaine

    $file1 = 'C:\Users\Desktop\SysCompare_v01\InputData\default_sysdumpdev_150319.xml'
    print( (split('_', $file1,2))[0] . ', ' );

    j'aimerai qu'il me renvoi juste default

  • [^] # Re: Plusieurs trucs bizarres…

    Posté par  . En réponse au message références aux dossiers parents. Évalué à -6. Dernière modification le 06 octobre 2015 à 14:56.

    je suis desole ca ne marche pas