IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation et administration système Perl Discussion :

Aide sur finition sur Script Traitement de données


Sujet :

Programmation et administration système Perl

  1. #21
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Original1992 Voir le message
    J'ai comme erreur Global symbol "$header_value" requires explicit package name (did you forget to declare "my $header_value"?) at Script_SVC_Test_Excel_OK.pl line 35Je ne comprends pas trop, où je peux déclarer ça ? Il l'est déjà non?
    Ce qui est déclaré, c'est le hachage %header_value, mais pas une référence scalaire $header_value. Du coup il suffit en principe de changer $header_value->{$key}{name} en $header_value{$key}{name} (c'est à dire enlever la flèche de déréférencemet -> dans la dernière ligne de ton code) pour que ça fonctionne (mais je n'ai pas pu tester), comme je l'ai fait à la fin de mon dernier post ci-dessus.

  2. #22
    Membre habitué
    Homme Profil pro
    Informatique
    Inscrit en
    Mars 2013
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 203
    Points : 164
    Points
    164
    Par défaut
    Bonjour Lolo,

    Effectivement, ça fonctionne mieux comme ça et c'est bien ce que je souhaite !
    J'ai quelques points à améliorer (surement sauter quelques lignes - ou en effacer, à voir comment) car j'ai des erreurs de ce type actuellement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    "my" variable $compteur masks earlier declaration in same scope at Script_SVC_Test_Excel_OK.pl line 154.
    "my" variable $compteur masks earlier declaration in same scope at Script_SVC_Test_Excel_OK.pl line 178.
    Use of uninitialized value in concatenation (.) or string at Script_SVC_Test_Excel_OK.pl line 35, <$FH> line 15.
            Name:
    Use of uninitialized value in concatenation (.) or string at Script_SVC_Test_Excel_OK.pl line 36, <$FH> line 15.
            Capacity:
    Use of uninitialized value in concatenation (.) or string at Script_SVC_Test_Excel_OK.pl line 37, <$FH> line 15.
            Free Capacity:
    Use of uninitialized value in concatenation (.) or string at Script_SVC_Test_Excel_OK.pl line 35, <$FH> line 15.
            Name:
    Use of uninitialized value in concatenation (.) or string at Script_SVC_Test_Excel_OK.pl line 36, <$FH> line 15.
            Capacity:
    Use of uninitialized value in concatenation (.) or string at Script_SVC_Test_Excel_OK.pl line 37, <$FH> line 15.
            Free Capacity:
            Name: NBB2_CORP_STW22
            Capacity: 87.77TB
            Free Capacity: 22.08TB
            Name: NBB2_CORP_NRLSAS_STW22
            Capacity: 36.33TB
            Free Capacity: 31.15TB
            Name: NBB2_CORP_STW23
            Capacity: 193.92TB
            Free Capacity: 79.20TB
    Je vais aussi essayer de voir si il est facile, via ta méthode, d'insérer cela dans un fichier Excel pour arriver à un tableau propre, comme ceci par exemple :

    Name Capacity Free Capacity
    NBB2_CORP_STW22 87.77TB 22.08TB

    EDIT : Je suis embêté, la ligne 15 c'est id:name:IO_group_id:, je pensais qu²'elle ne serait pas pris en compte grâce à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    last if $line =~ /^id:name:IO_group_id:/;	# sort de cette boucle et passe à la suivante pour la suite des données
    	next if $line =~/id:name:status:mdisk_count:/;  	# saute la ligne d'entête

  3. #23
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Tes erreurs Use of uninitialized value ... et tes entrées bizarroïdes dans ton hachage ont très certainement la même origine et la même cause: certaines de tes lignes en entrée n'ont pas la structure que tu attends. C'est le cas notamment des lignes de tirets qui séparent sans doute des blocs dans tes données en entrée (et d'éventuelles lignes d'entête). Au moment de la lecture de tes données en entrée, il faut écarter les lignes qui n'ont pas la structure que tu attends (comme tu écartes déjà les lignes vides). Cela devrait résoudre aussi bien les entrées anormales de ton hachage et les warnings Use of uninitialized value ....

    Essaie de modifier cette partie de ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	next if $line =~ /^\s*$/;  	# saute d'éventuelles lignes vides
    	my ($id, $name, $capacity, $free) = (split /:/, $line)[0, 1, 5, 7];
    	$header_value{$id} = { name => $name, capacity => $capacity, free_capacity => $free};	# stockage des valeurs qui t'intéressent dans un hash
    comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	next if $line =~ /^\s*$/;  	# saute d'éventuelles lignes vides
    	my ($id, $name, $capacity, $free) = (split /:/, $line)[0, 1, 5, 7];
    	next unless defined $free;
    	$header_value{$id} = { name => $name, capacity => $capacity, free_capacity => $free};	# stockage des valeurs qui t'intéressent dans un hash
    Cela devrait sans doute suffire, ou du moins supprimer une grande partie de tes anomalies.

  4. #24
    Membre habitué
    Homme Profil pro
    Informatique
    Inscrit en
    Mars 2013
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 203
    Points : 164
    Points
    164
    Par défaut
    C'est parfait je n'ai quasi plus aucune erreur !
    J'en avais encore quelques unes, mais j'ai réussi à les corriger moi même :-)

    Il m'en reste quelques unes, mais je ne pense pas qu'elles posent soucis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "my" variable $compteur masks earlier declaration in same scope at Script_SVC_Test_Excel_OK.pl line 157.
    "my" variable $compteur masks earlier declaration in same scope at Script_SVC_Test_Excel_OK.pl line 181.
    Pour celle-ci , je ne les comprends pas vraiment. C'est une répétition, mais cela me semble nécessaire pour mon script.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    my $compteur = 3;
    for my $item (qw / Archiving Filer NetBackup Oracle SQL 
                        Solaris VMware Other /) {
        $worksheet->write("A$compteur","$item", $Datatype);
        $worksheet->write("B$compteur","$count_corp_nbb2{$item}", $Data);
        $worksheet->write("C$compteur","$count_corp_nbb4{$item}", $Data);
        $compteur ++;
    };
    Je répété 3 fois ce bout de code.

    Les dernières erreurs sont celles-ci :
    Use of uninitialized value within %count_dmz_nbb2 in string at Script_SVC_Test_Excel_OK.pl line 161. Bon elles sont facile à comprendre, c'est juste qu'à un moment, je n'ai pas de données, du coup, j'ai ce message d'erreur, mais c'est normal. Le seul moyen je pense serait de combler ce vide par un "0", mais bon, c'est peut-être trop compliqué pour pas grand chose.

    Je vais maintenant essayer d'insérer ces données dans mon fichier Excel, j'espère que ça sera possible et pas trop complexe

    Merci encore Lolo ;-)

  5. #25
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Poste ton code tel qu'il est maintenant pour que je puisse savoir à quel ligne de code correspondent les avertissements que tu as (ou, si tu as modifié ton programme, poste aussi les nouveaux messages d'erreurs ou avertissements avec le nouveau numéro de ligne des erreurs), je devrais pouvoir t'aider à les régler.

  6. #26
    Membre habitué
    Homme Profil pro
    Informatique
    Inscrit en
    Mars 2013
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 203
    Points : 164
    Points
    164
    Par défaut
    Tu le trouveras en pièces jointes

    Bon par contre, ma tentative d'insertion des données dans le fichier Excel ne se passe pas très bien
    Fichiers attachés Fichiers attachés

  7. #27
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "my" variable $compteur masks earlier declaration in same scope at Script_SVC_Test_Excel_OK.pl line 157.
    Tout simplement, tu as déjà déclaré $compteur à la ligne 132, il ne faut pas la redéclarer (avec my) mais seulement la réinitialiser:
    Idem en ligne 181.

    Pour les autres warnings, je ne peux pas répondre car je n'ai pas les données en entrée et ne sais donc pas comment %count_corp_nbb2 est alimenté.

  8. #28
    Membre habitué
    Homme Profil pro
    Informatique
    Inscrit en
    Mars 2013
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 203
    Points : 164
    Points
    164
    Par défaut
    Merci !

    Pour les dernières erreur, c'est simplement car je fais une boucle pour insérer des données dans mon fichier Excel, mais qu'à un moment, les valeurs sont vide, donc j'ai certainnement ce message de données "non utilisés".
    Mais bon, ce n'est pas très grave.

    La je me bats pour arriver a insérer les données dans l'Excel, j'ai honte, je pensais que c'était aussi simple, mais apparemment, pas ...

  9. #29
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Original1992 Voir le message
    La je me bats pour arriver a insérer les données dans l'Excel, j'ai honte, je pensais que c'était aussi simple, mais apparemment, pas ...
    Là, j'aurais du mal à t'aider, car je n'ai utilisé un module d'écriture dans un document Excel qu'une seule fois, et c'était il y a environ 8 ans. Donc, j'ai tout oublié, et je ne suis même pas sûr que le module que j'ai utilisé à l'époque soit encore d'actualité aujourd'hui.

    Cela dit, ce que tu as à faire me semble assez simple, une bonne lecture de la documentation devrait te conduire au succès. Vas-y progressivement. Commence en créant une feuille Excel simple et en insérant quelques valeurs codées en dur dans des cellules codées en dur, puis, quand tu auras compris comment insérer des valeurs dans quelques cellules, tu pourras entreprendre d'insérer les données de ton hachage.

  10. #30
    Membre habitué
    Homme Profil pro
    Informatique
    Inscrit en
    Mars 2013
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 203
    Points : 164
    Points
    164
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Là, j'aurais du mal à t'aider, car je n'ai utilisé un module d'écriture dans un document Excel qu'une seule fois, et c'était il y a environ 8 ans. Donc, j'ai tout oublié, et je ne suis même pas sûr que le module que j'ai utilisé à l'époque soit encore d'actualité aujourd'hui.

    Cela dit, ce que tu as à faire me semble assez simple, une bonne lecture de la documentation devrait te conduire au succès. Vas-y progressivement. Commence en créant une feuille Excel simple et en insérant quelques valeurs codées en dur dans des cellules codées en dur, puis, quand tu auras compris comment insérer des valeurs dans quelques cellules, tu pourras entreprendre d'insérer les données de ton hachage.
    En fait, j'y arrive déjà à faire cela ! C'est plus une difficulté à "traduire" la manière dont tu m'as aidée pour lire le hachage en encodage Excel.

    Car pour le moment, j'arrive à produire ça comme fichier Excel : Inventory_SVC_20180504.xlsx
    Avec des boûts de code qui ressemble à ça (Que tu m'as d'ailleurs aidé à améliorer) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $compteur = 3;
    for my $item (qw / Archiving Filer NetBackup Oracle SQL 
                        Solaris VMware Other /) {
        $worksheet->write("D$compteur","$item", $Datatype);
        $worksheet->write("E$compteur","$count_dmz_nbb2{$item}", $Data);
        $worksheet->write("F$compteur","$count_dmz_nbb4{$item}", $Data);
        $compteur ++;
    };
    Je pensais que c'était le même, mais je dois me tromper dans la manière d'écriture du code ...

  11. #31
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    je n'ai pas Excel, mais en ouvrant ta feuille de calcul avec OpenOffice, ça m'a l'air pas trop mal (sauf que, bien sûr, je ne peux pas savoir si ce sont bien les données que tu recherches).

    Mais là, tu me sembles avoir toutes les cartes en main, il suffit sans doute de travailler un peu plus sur les détails.

  12. #32
    Membre habitué
    Homme Profil pro
    Informatique
    Inscrit en
    Mars 2013
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 203
    Points : 164
    Points
    164
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Bonjour,

    je n'ai pas Excel, mais en ouvrant ta feuille de calcul avec OpenOffice, ça m'a l'air pas trop mal (sauf que, bien sûr, je ne peux pas savoir si ce sont bien les données que tu recherches).

    Mais là, tu me sembles avoir toutes les cartes en main, il suffit sans doute de travailler un peu plus sur les détails.
    Tu as une idée de comment insérer ce hachage dans le fichier Excel ?
    Je veux dire, la "bonne manière" d'écrire le code ? J'ai tenté plusieurs chose, sans succès ... Je n'arrive pas à trouver comment "écrire" le code...

  13. #33
    Membre habitué
    Homme Profil pro
    Informatique
    Inscrit en
    Mars 2013
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 203
    Points : 164
    Points
    164
    Par défaut
    Up?

  14. #34
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Ben, désolé, mais là, je ne vois pas ce que tu n'arrives pas à faire.

  15. #35
    Membre habitué
    Homme Profil pro
    Informatique
    Inscrit en
    Mars 2013
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 203
    Points : 164
    Points
    164
    Par défaut
    J'arrive à récupérer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
            Item NR: 2
            Name: NBB2_CORP_STW22
            Capacity: 87.77TB
            Free Capacity: 22.00TB
            Item NR: 1
            Name: MigrationPool_8192
            Capacity: 0
            Free Capacity: 0
            Item NR: 4
            Name: NBB2_CORP_NRLSAS_STW22
            Capacity: 36.33TB
            Free Capacity: 31.15TB
            Item NR: 5
            Name: NBB2_CORP_NRLSAS_STW23
            Capacity: 25.46TB
            Free Capacity: 18.36TB
            Item NR: 6
            Name: NBB2_CORP_STW23
            Capacity: 193.92TB
            Free Capacity: 79.08TB
            Item NR: 0
            Name: NBB2_CORP_DS8K8
            Capacity: 124.98TB
            Free Capacity: 4.61TB
            Item NR: 6
            Name: NBB4_CORP_STW43
            Capacity: 193.92TB
            Free Capacity: 71.96TB
            Item NR: 5
            Name: NBB4_CORP_NRLSAS_STW43
            Capacity: 25.46TB
            Free Capacity: 18.36TB
            Item NR: 0
            Name: NBB4_CORP_DS8K8
            Capacity: 124.98TB
            Free Capacity: 592.00GB
            Item NR: 1
            Name: MigrationPool_8192
            Capacity: 0
            Free Capacity: 0
            Item NR: 4
            Name: NBB4_CORP_NRLSAS_STW42
            Capacity: 36.33TB
            Free Capacity: 31.15TB
            Item NR: 2
            Name: NBB4_CORP_STW42
            Capacity: 87.77TB
            Free Capacity: 23.31TB
            Item NR: 1
            Name: MigrationPool_8192
            Capacity: 0
            Free Capacity: 0
            Item NR: 0
            Name: NBB2_DMZ_DS8K8
            Capacity: 59.93TB
            Free Capacity: 28.63TB
            Item NR: 2
            Name: NBB2_DMZ_STW24
            Capacity: 75.27TB
            Free Capacity: 59.51TB
            Item NR: 1
            Name: MigrationPool_8192
            Capacity: 0
            Free Capacity: 0
            Item NR: 0
            Name: NBB4_DMZ_DS8K8
            Capacity: 59.93TB
            Free Capacity: 29.26TB
            Item NR: 2
            Name: NBB4_DMZ_STW44
            Capacity: 75.27TB
            Free Capacity: 58.87TB
    Ce que j'aimerai faire c'est récupérer uniquement les données utiles (donc "NBB4_DMZ_DS8K8", "59.93", "29.26") pour les incorporer dans un fichier Excel.

    Je sais comment écrire dans un fichier Excel (exemple ci-dessous) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $compteur = 3;
    for my $item (qw / Archiving Filer NetBackup Oracle SQL 
                        Solaris VMware Other /) {
        $worksheet->write("D$compteur","$item", $Datatype);
        $worksheet->write("E$compteur","$count_dmz_nbb2{$item}", $Data);
        $worksheet->write("F$compteur","$count_dmz_nbb4{$item}", $Data);
        $compteur ++;
    };
    Mais je n'arrive pas à combiner les deux. Je n'arrive pas à savoir "comment" récupérer les données utiles (exemple plus haut), comment écrire le code, pour les mettre dans l'Excel ...

  16. #36
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    compte tenu de ce que tu arrives à récupérer (et sachant que tu sais écrire dans un fichier Excel), je ne vois pas pourquoi tu n'arrives pas à écrire ce qui t'intéresse (Name, Capacity, Free capacity) dans le fichier Excel.

    Peux-tu montrer la structure de données à laquelle tu aboutis (un Data::Dumper du hachage ou du tableau contenant toutes ces données)? Je peux essayer de t'aider à explorer cette structure de données, mais il me semble que je t'ai déjà montré comment faire précédemment.

  17. #37
    Membre habitué
    Homme Profil pro
    Informatique
    Inscrit en
    Mars 2013
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 203
    Points : 164
    Points
    164
    Par défaut
    Salut je ne comprends pas vraiment ce que tu veux dire.

    C'est le premier code que je te donne dans mon précédent message le output non?

    Voilà le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    my %header_value;
    while (my $line = <$FH>) {	# première boucle pour lire le premier groupe de lignes
    	last if $line =~ /^id:name:IO_group_id:/;	# sort de cette boucle et passe à la suivante pour la suite des données
    	next if $line =~/id:name:status:mdisk_count:/;  	# saute la ligne d'entête
    	next if $line =~ /^\s*$/;  	# saute d'éventuelles lignes vides
    	my ($id, $name, $capacity, $free) = (split /:/, $line)[0, 1, 5, 7];
    	next unless defined $free;
    	$header_value{$id} = { name => $name, capacity => $capacity, free_capacity => $free};	# stockage des valeurs qui t'intéressent dans un hash
    }	
     
    for my $key (keys %header_value) { #Affichage des données
    	say "\tItem NR: $key";
    	say "\tName: $header_value{$key}{name}";
    	say "\tCapacity: $header_value{$key}{capacity}";
    	say "\tFree Capacity: $header_value{$key}{free_capacity}";
    	}

    Voilà l'output :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
           Item NR: 1
            Name: MigrationPool_8192
            Capacity: 0
            Free Capacity: 0
            Item NR: 5
            Name: NBB2_CORP_NRLSAS_STW23
            Capacity: 25.46TB
            Free Capacity: 18.36TB
            Item NR: 2
            Name: NBB2_CORP_STW22
            Capacity: 87.77TB
            Free Capacity: 22.00TB
            Item NR: 0
            Name: NBB2_CORP_DS8K8
            Capacity: 124.98TB
            Free Capacity: 4.61TB
            Item NR: 6
            Name: NBB2_CORP_STW23
            Capacity: 193.92TB
            Free Capacity: 79.08TB
            Item NR: 4
            Name: NBB2_CORP_NRLSAS_STW22
            Capacity: 36.33TB
            Free Capacity: 31.15TB
            Item NR: 4
            Name: NBB4_CORP_NRLSAS_STW42
            Capacity: 36.33TB
            Free Capacity: 31.15TB
            Item NR: 0
            Name: NBB4_CORP_DS8K8
            Capacity: 124.98TB
            Free Capacity: 592.00GB
            Item NR: 6
            Name: NBB4_CORP_STW43
            Capacity: 193.92TB
            Free Capacity: 71.96TB
            Item NR: 2
            Name: NBB4_CORP_STW42
            Capacity: 87.77TB
            Free Capacity: 23.31TB
            Item NR: 5
            Name: NBB4_CORP_NRLSAS_STW43
            Capacity: 25.46TB
            Free Capacity: 18.36TB
            Item NR: 1
            Name: MigrationPool_8192
            Capacity: 0
            Free Capacity: 0
            Item NR: 0
            Name: NBB2_DMZ_DS8K8
            Capacity: 59.93TB
            Free Capacity: 28.63TB
            Item NR: 2
            Name: NBB2_DMZ_STW24
            Capacity: 75.27TB
            Free Capacity: 59.51TB
            Item NR: 1
            Name: MigrationPool_8192
            Capacity: 0
            Free Capacity: 0
            Item NR: 0
            Name: NBB4_DMZ_DS8K8
            Capacity: 59.93TB
            Free Capacity: 29.26TB
            Item NR: 2
            Name: NBB4_DMZ_STW44
            Capacity: 75.27TB
            Free Capacity: 58.87TB
            Item NR: 1
            Name: MigrationPool_8192
            Capacity: 0
            Free Capacity: 0

  18. #38
    Membre habitué
    Homme Profil pro
    Informatique
    Inscrit en
    Mars 2013
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 203
    Points : 164
    Points
    164
    Par défaut
    Le truc, c'est que je ne sais pas comment traduire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for my $key (keys %header_value) { #Affichage des données
    	say "\tItem NR: $key";
    	say "\tName: $header_value{$key}{name}";
    	say "\tCapacity: $header_value{$key}{capacity}";
    	say "\tFree Capacity: $header_value{$key}{free_capacity}";
    	}
    En ligne de code qui écrit ce que je souhaite dans le fichier Excel ... J'ai tenté plein de chose, mais je n'y arrive pas du tout :/

  19. #39
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Je ne peux pas tester pour l'instant, et je ne comprends vraiment pas sur quoi tu bloques.

    Mais à la lecture de la documentation du module, essaie un truc dans ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    use Excel::Writer::XLSX;
     
    my $workbook = Excel::Writer::XLSX->new( 'output_file.xlsx' );
    my $worksheet = $workbook->add_worksheet();
     
    my $row = 0;                             # démarre avec une autre valeur si tu ne veux pas commencer sur la première ligne
    for my $key (keys %header_value) { 
        my $col = 0;                         # idem, initialise $col à une autre valeur si tu veux les valeurs sur des colonnes plus à droite
        for my $label (qw / item name capacity free_capacity / ) {       
            $worksheet->write( $row, $col, $header_value{$key}{$label} );
            $col++;
        }
        $row++;
    }
    $workbook->close();

  20. #40
    Membre habitué
    Homme Profil pro
    Informatique
    Inscrit en
    Mars 2013
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 203
    Points : 164
    Points
    164
    Par défaut
    Salut,

    Désolé, j'avoue avoir un peu de mal a expliquer.

    J'essaye de faire un résumé :

    - Dans mes 4 fichiers, tu m'as aidé à récupérer et traier des données via ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    my %header_value;
    while (my $line = <$FH>) {	# première boucle pour lire le premier groupe de lignes
    	last if $line =~ /^id:name:IO_group_id:/;	# sort de cette boucle et passe à la suivante pour la suite des données
    	next if $line =~/id:name:status:mdisk_count:/;  	# saute la ligne d'entête
    	next if $line =~ /^\s*$/;  	# saute d'éventuelles lignes vides
    	my ($id, $name, $capacity, $free) = (split /:/, $line)[0, 1, 5, 7];
    	next unless defined $free;
    	$header_value{$id} = { name => $name, capacity => $capacity, free_capacity => $free};	# stockage des valeurs qui t'intéressent dans un hash
    }
    - Pour vérifier que ça fonctionne bien, on les affiches grâce à ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for my $key (keys %header_value) { #Affichage des données
    	say "\tItem NR: $key";
    	say "\tName: $header_value{$key}{name}";
    	say "\tCapacity: $header_value{$key}{capacity}";
    	say "\tFree Capacity: $header_value{$key}{free_capacity}";
    	}
    - Ce qui donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     Item NR: 1
            Name: MigrationPool_8192
            Capacity: 0
            Free Capacity: 0
            Item NR: 5
            Name: NBB2_CORP_NRLSAS_STW23
            Capacity: 25.46TB
            Free Capacity: 18.36TB
            Item NR: 2
            Name: NBB2_CORP_STW22
            Capacity: 87.77TB
            Free Capacity: 22.00TB
            Item NR: 0
            Name: NBB2_CORP_DS8K8
            Capacity: 124.98TB
            Free Capacity: 4.61TB
            Item NR: 6
            Name: NBB2_CORP_STW23
            Capacity: 193.92TB
            Free Capacity: 79.08TB
            Item NR: 4
            Name: NBB2_CORP_NRLSAS_STW22
            Capacity: 36.33TB
            Free Capacity: 31.15TB
            Item NR: 4
            Name: NBB4_CORP_NRLSAS_STW42
            Capacity: 36.33TB
            Free Capacity: 31.15TB
            Item NR: 0
            Name: NBB4_CORP_DS8K8
            Capacity: 124.98TB
            Free Capacity: 592.00GB
            Item NR: 6
            Name: NBB4_CORP_STW43
            Capacity: 193.92TB
            Free Capacity: 71.96TB
            Item NR: 2
            Name: NBB4_CORP_STW42
            Capacity: 87.77TB
            Free Capacity: 23.31TB
            Item NR: 5
            Name: NBB4_CORP_NRLSAS_STW43
            Capacity: 25.46TB
            Free Capacity: 18.36TB
            Item NR: 1
            Name: MigrationPool_8192
            Capacity: 0
            Free Capacity: 0
            Item NR: 0
            Name: NBB2_DMZ_DS8K8
            Capacity: 59.93TB
            Free Capacity: 28.63TB
            Item NR: 2
            Name: NBB2_DMZ_STW24
            Capacity: 75.27TB
            Free Capacity: 59.51TB
            Item NR: 1
            Name: MigrationPool_8192
            Capacity: 0
            Free Capacity: 0
            Item NR: 0
            Name: NBB4_DMZ_DS8K8
            Capacity: 59.93TB
            Free Capacity: 29.26TB
            Item NR: 2
            Name: NBB4_DMZ_STW44
            Capacity: 75.27TB
            Free Capacity: 58.87TB
            Item NR: 1
            Name: MigrationPool_8192
            Capacity: 0
            Free Capacity: 0
    - Sauf que maintenant, j'aimerai ne plus afficher ces données comme ceci, mais plutôt les écrire dans un fichier EXCEL. Comme ceci par exemple :

    Name Capacity Free Capacity
    NBB2_CORP_NRLSAS_STW23 25.46TB 18.36TB

    - Voici un exemple de comment j'écris d'autres données dans le fichier Excel, mais même en me basant dessus, je n'arrive pas à le faire pour les données ci-dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    my $compteur = 3;
    for my $item (qw / Archiving Filer NetBackup Oracle SQL 
                        Solaris VMware Other /) {
        $worksheet->write("A$compteur","$item", $Datatype);
        $worksheet->write("B$compteur","$count_corp_nbb2{$item}", $Data);
        $worksheet->write("C$compteur","$count_corp_nbb4{$item}", $Data);
        $compteur ++;
    };

Discussions similaires

  1. Aide sur un code de collecte de donnée sur plusieurs documents
    Par ahzouari dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/01/2011, 08h26
  2. Réponses: 22
    Dernier message: 02/02/2009, 20h36
  3. [MySQL] Conseil sur traitement des données
    Par Feng-Huang dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 07/01/2009, 12h16
  4. Aide de demarrage sur un script perso
    Par 74manu74 dans le forum Shell et commandes GNU
    Réponses: 24
    Dernier message: 22/11/2008, 23h27
  5. Demande d'aide sur la liaison avec base de données mysql
    Par almora007 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 06/08/2007, 14h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo