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

Langage Perl Discussion :

Découper fichier excel ou .csv


Sujet :

Langage Perl

  1. #21
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 28
    Points : 4
    Points
    4
    Par défaut
    Je peux toujours modifier l'encodage des fichiers en les enregistrant avec un qui puisse convener ? Comme ca pas de problem, enfin pas besoin de rajouter des choses dans le script.

  2. #22
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Ensuite, ce fichier rule contient également des colonnes avec des valeurs. Tel qu'écrit actuellement, c'est la ligne entière qui sert de clé de recherche, or, ça ne semble pas correct. Quelle est la colonne de rule.txt qui sert de clé de recherche pour le fichier address.txt ?

    (problème d'encodage corrigé, je te donnerai la manière de faire après avoir eu la réponse).
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  3. #23
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 28
    Points : 4
    Points
    4
    Par défaut
    Il va y avoir 2 clefs pour faire la recherche, la colonne Source et la colonne Destination.

    edit: en effet, une adresse peut etre soit source soit destination, du moment qu'elle intervient dans RULE, cela veut dire que l'adresse n'est pas inutile, donc elle ne doit pas apparaitre parmi adressuseless.

    edit2: du coup il s'agit de 2 colonnes avec potentiellement plusieurs données dans chaque case, comme c'est le cas avec "h-2.2.2.2 group1" pour Destination de l'exemple.

  4. #24
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Pourrais-tu clarifier le contenu du fichier rule en indiquant quelles sont les colonnes ?
    En effet, on trouve plusieurs fois le mot "Source" et "Destination", séparé avec des espaces et/ou des tabulations. Est-ce que le séparateur de colonne pour tous tes fichiers est <TAB> (le split utilise \s qui contient à la fois <ESPACE> et <TAB>, ce qui ne semble pas correct).
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  5. #25
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 28
    Points : 4
    Points
    4
    Par défaut
    Je ne sais pas si tu as vu le probleme que j'avais au début du sujet, en fait je pars de fichier .csv, du coup grace à une technique que l'on m'avait donné au depart, à partir d'un fichier txt la selection de la première colonne était possible, sans avoir à passer par spread::sheet, du coup j'ai passé mes fichiers .csv en fichier .txt...

    Je ne sais pas si cela vaut le coup ou non de l'avoir fait, personnellement je n'avais pas de preoccupation de fichier source.

    Pour les colonnes du coup, je ne sais pas comment excel convertit le .csv en .txt du coup il se peut qu'il ajoute des tab/espace entre les entetes des colonnes...

    Sinon les colonnes de mon fichier sont les suivantes :

    Num
    ID
    Logging policy
    Action
    Source Zone
    Source
    Destination Zone
    Destination
    Service
    NAT
    Comment
    Rule Id

    Il s'agit des cases de la première ligne d'un fichier .csv.


    edit : si je fais un bête copié collé à partir du document cela donne ceci :

    Num ID Logging policy Action Source Zone Source Destination Zone Destination Service NAT Comment Rule Id

    Je crois que le html du forum reformate la mise en page. Tu veux que je te donne la première ligne sous forme d'un csv ?

  6. #26
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Citation Envoyé par Artalis Voir le message
    Je ne sais pas si tu as vu le problem que j'avais au début du sujet, en fait je pars de fichier .csv, du coup grace à une technique que l'on m'avait donné au depart, à partir d'un fichier txt la selection de la première colonne était possible, sans avoir à passer par spread::sheet, du coup j'ai passé mes fichiers .csv en fichier .txt...

    Je ne sais pas si cela vaut le coup ou non de l'avoir fait, personnellement je n'avais pas de preoccupation de fichier source.
    Non, des fichiers "texte" avec extension .csv conviennent parfaitement.
    Pour les colonnes du coup, je ne sais pas comment excel convertit le .csv en .txt du coup il se peut qu'il ajoute des tab/espace entre les entetes des colonnes...
    Sinon les colonnes de mon fichier sont les suivantes :

    Num
    ID
    Logging policy
    Action
    Source Zone
    Source
    Destination Zone
    Destination
    Service
    NAT
    Comment
    Rule Id

    Il s'agit des cases de la première ligne d'un fichier .csv.
    C'est donc bien cela : les colonnes sont séparées par des TAB et non des espaces.
    Maintenant, dans le fichier rule, quelles sont les colonnes dont il faut enregistrer les valeurs pour le filtrage des adresses ?
    Est-ce "Source" et "Destination" ?
    Si c'est bien le cas, dans la première ligne de rule.txt, la destination est "h-2.2.2.2 Group1", c'est à dire une destination en 2 mots. Faut-il enregistrer "h-2.2.2.2 Group1" ou seulement "h-2.2.2.2" ? et comment savoir ce qu'il faut retirer d'une adresse si elle contient plusieurs "mots" ?

    PS : merci de ne pas mettre à jour tes posts en complétant la réponse, mais ajoute de nouveaux posts, car je ne suis pas notifié des mises à jour.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  7. #27
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 28
    Points : 4
    Points
    4
    Par défaut
    Désolé pour les edits nombreux, j'ai pour habitude d'éviter au maximum les double posts (habitude des forums...).

    Alors il faut récupérer comme tu le dis "Source" et "Destination" dans le hash ( si j'ai bien compris) pour ensuite rechercher (dansle premier cas) quels sont les noms d'adresses donc h-1.1.1.1 ou h-2.2.2.2 et non pas 1.1.1.1 ou 2.2.2.2 (je ne tiens compte que des "noms", c'est pour cela que je récupère que la première colonne du fichier address).

    Cependant pour le deuxième cas, ce qui m'intéresse avec les groups c'est de voir quels sont les groupes presents dans RULE. Du coup c'est bien "group 1" ou "groupe 2" qui vont m'etre utile.

    Sinon, je n'ai pas bien compris cela :

    et comment savoir ce qu'il faut retirer d'une adresse si elle contient plusieurs "mots" ?

  8. #28
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Regarde bien la première règle du fichier rule.txt, et dis moi que contient la colonne Destination, stp.
    Idem pour la 2e ligne d'ailleurs.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  9. #29
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Voici l'état actuel du script :
    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
    use strict;
    use warnings;
     
    open my $RULE, "<", "rule.txt" or die "Can't open rule.txt for reading: $!";
    binmode $RULE, ":encoding(utf-16):crlf";
    my %rule;
    <$RULE>; # Ignore the first line
    while (defined(my $rule = <$RULE>)) {
      chomp($rule);
      my ($source, $destination) = (split /\t/, $rule)[5,7];
      $rule{$source}++ if defined $source;
      $rule{$destination}++ if defined $destination;
    }
     
    open (my $ADDRESS, "<", "address.txt") or die "can't open address.txt for reading: $!";
    binmode $ADDRESS, ":encoding(utf-16):crlf";
    open (my $FICHIER1,">", "addressuseless.txt") or die "Can't open addressuseless.txt for writing: $!";
    binmode $FICHIER1, ":encoding(utf-16):crlf";
    print { $FICHIER1 } scalar(<$ADDRESS>); # Read and write the first line
    while (defined(my $address = <$ADDRESS>)) {#trouver toutes les adresses de ADDRESS qui ne sont pas dans RULE et les stocker dans FICHIER1 
    	chomp($address);
      if (defined(my $out = (split /\s+/, $address)[0])) {
        if (exists $rule{$out}) {
          print { $FICHIER1 } "address found \n"; # à supprimer par la suite, n'est là que pour savoir si la condition passe ou pas
    		}
    		else{
    			print $out, "\n";
    			print { $FICHIER1 } $out, "\n" ;
    		}
      }
      else {
        print "No address found at line $. [$address]\n";
      }
    }
     
    open (my $ADDRESSGROUP,"<", "addressgroup.txt") or die "Can't open addressgroup.txt for reading: $!";
    binmode $ADDRESSGROUP, ":encoding(utf-16):crlf";
    open (my $FICHIERGROUP,">", "fichiergroup.txt") or die "Can't open fichiergroup.txt for writing: $!";
    binmode $FICHIERGROUP, ":encoding(utf-16):crlf";
     
    #trouver tous les groupes d'adresses qui sont dans RULE et les stocker dans FICHIERGROUP
    while (defined(my $addressgroup = <$ADDRESSGROUP>)) {
    	chomp($addressgroup);
      my ($out2, $out3) = (split /\s+/, $addressgroup)[0,1];
      if (defined $out2) {
        print $out2, "\n";
        if (exists $rule{$out2}){
          print $out2, "\n"; # WHY WRITING AGAIN out2 ???
          if (defined $out3) {
            print { $FICHIERGROUP } $out3, "\n";
          }
          else {
            print "No zone found at line $. in addressgroup.txt [$addressgroup]\n";
          }
    		}
      }
      else {
        print "No group found at line $. in addressgroup.txt [$addressgroup]";
      }
    }
     
    close($ADDRESSGROUP);
    close($FICHIERGROUP);
    Cependant, comme demandé dans le post précédent, il semble y avoir des "intrus" dans la colonne "Destination" de rule.txt :
    - 1ere ligne : l'adresse h-2.2.2.2 est suivie de " Group1"
    - 2e ligne : l'adresse h-2.2.2.2 est suivie de " " (espace).
    C'est information parasites sont enregistrées dans le hash %rule si l'on ne peut pas les filtrer. C'était l'objet de ma question "comment savoir ce qu'il faut retirer d'une adresse si elle contient plusieurs "mots" ?"

    Edit : ce sera tout pour ce soir. A demain.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  10. #30
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 28
    Points : 4
    Points
    4
    Par défaut
    Tout d'abord merci beaucoup pour le temps que tu me consacres ^^.

    Je ne pensais pas que le fait d'avoir dans un hash "h-2.2.2.2 Groupe1" posait problème, mais c'est du à mon ignorance dans le perl. En effet, je pensais que si tu cherchais "h-2.2.2.2" dans par exemple "h-2.2.2.2 Groupe1" ou bien même "h-2.2.2.2 " (donc avec un espace) le "exists" retournait Vrai et permettait alors de passer le "if" vu qu'un partie du hash contenait l'élément recherché.

    Vu que ce n'est pas le cas, je pense qu'il va falloir comme tu l'as fait, et je te remercie pour l'aide à coder le script, récupérer les colonnes 5 et 7, et appliquer aux hashs la suppression des espaces et des tab par des s///.

    Du coup, si on considère le cas "h-2.2.2.2 Group1", on obtient une base de hashs composée de "h-2.2.2.2" et "Group1" et ensuite, il suffit de comparer les éléments de la colonne 1 de ADDRESS à ces hashs.

    Ce que l'on pourrait faire autrement c'est stocker dans un fichier tous les éléments des colonnes 5 et 7 et appliquer à ce fichier les modifications nécessaires pour avoir quelque chose d'homogène, et ensuite stocker le résultat dans un hash pour le réutiliser et faire les comparaisons.

    Merci aussi pour la gestion de l'encodage je n'y aurais jamais pensé.

  11. #31
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 28
    Points : 4
    Points
    4
    Par défaut
    J'ai testé en ajoutant ceci entre le premier if qui définit le $out et le 2ème if avec le exists donc entre la ligne 22 et 23 de code :

    et cela a l'air de fonctionner maintenant.

    edit: par contre, je rencontre des problèmes pour normliser out2 et out3...j'y travaille ^^.

    edit2: en fait, ma technique ne fonctionne pas s'il y a plus de 2 données dans une colonne. En effet, je me demandais pourquoi cela ne fonctionnait pas pour out2 et ou3 alors qu'il s'agissait finalement de la meme chose. En fait, avec le hash on n'arrive qu'à détecter h-1.1.1.1 et non pas le Groupe1 qui se situe après. Du coup, pas moyen de faire une comparaison.

    J'ai vérifié cela en ajoutant après h-2.2.2.2 dans Destination l'adresse h-1.1.1.1 du coup on a "h-2.2.2.2 h-1.1.1.1" et en supprimant toutes les autres apparitions de h-1.1.1.1 dans RULE. Et dans ce cas h-1.1.1.1 n'est pas considéré comme étant dans le hash. Du coup c'est au niveau de la définition du hash de rule qu'il faut régler le problème et appliquer ceci "=~ s/\s+/\n/g;".

  12. #32
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Pour traiter, dans le fichier rule.txt, une adresse de destination du type "h-2.2.2.2 Group1" comme deux adresses "h-2.2.2.2" et "Group1", il suffit de splitter avant de renseigner le hash avec une clé. Au passage, on filtrera les adresses qui seraient vides (ce qui règlera le pb lié à une adresse se terminant par un espace).

    Ceci donne cela pour la partie de la lecture du fichier rule.txt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while (defined(my $rule = <$RULE>)) {
      chomp($rule);
      my ($source, $destination) = (split /\t/, $rule)[5,7];
      foreach my $address_field (grep defined, $source, $destination) {
        foreach my $address (grep $_, split /\s+/, $address_field) {
          $rule{$address}++;
        }
      }
    }
    Pour le tableau des groupes, il faudra peut-être utiliser une technique similaire (à voir cet aprèm).
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  13. #33
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 28
    Points : 4
    Points
    4
    Par défaut
    Bon ba j'ai essayé pendant 1h30 d'obtenir ton résultat sans succes... Du coup merci beaucoup.

    Voici où j'en suis niveau code, il ne reste je pense qu'à régler le problème du $out3 qui n'inscrit pas toutes les adresses de la colonne [1] du fichier addressgroup.

    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
    use strict;
    use warnings;
     
    open my $RULE, "<", "rule.txt" or die "Can't open rule.txt for reading: $!";
    binmode $RULE, ":encoding(utf-16):crlf";
    my %rule;
    #<$RULE>; # Ignore the first line
    while (defined(my $rule = <$RULE>)) {
    	chomp($rule);
    	my ($source, $destination) = (split /\t/, $rule)[5,7];
    	foreach my $address_field (grep defined, $source, $destination) {
    		foreach my $address (grep $_, split /\s+/, $address_field) {
    		$rule{$address}++;
    		}
    	}
    } 
     
    open (my $ADDRESS, "<", "address.txt") or die "can't open address.txt for reading: $!";
    binmode $ADDRESS, ":encoding(utf-16):crlf";
    open (my $FICHIER1,">", "addressuseless.txt") or die "Can't open addressuseless.txt for writing: $!";
    binmode $FICHIER1, ":encoding(utf-16):crlf";
    print { $FICHIER1 } scalar(<$ADDRESS>); # Read and write the first line
    while (defined(my $address = <$ADDRESS>)) {#trouver toutes les adresses de ADDRESS qui ne sont pas dans RULE et les stocker dans FICHIER1 
    	chomp($address);
    	if (defined(my $out = (split /\s+/, $address)[0])) {
    		if (exists $rule{$out}) {
    		  print { $FICHIER1 } "address found \n"; # à supprimer par la suite, n'est là que pour savoir si la condition passe ou pas
    			}
    			else{
    				print $out, "\n";
    				print { $FICHIER1 } $out, "\n" ;
    			}
    	}
      else {
        print "No address found at line $. [$address]\n";
      }
    }
     
    open (my $ADDRESSGROUP,"<", "addressgroup.txt") or die "Can't open addressgroup.txt for reading: $!";
    binmode $ADDRESSGROUP, ":encoding(utf-16):crlf";
    open (my $FICHIERGROUP,">", "fichiergroup.txt") or die "Can't open fichiergroup.txt for writing: $!";
    binmode $FICHIERGROUP, ":encoding(utf-16):crlf";
     
    #trouver tous les groupes d'adresses qui sont dans RULE et les stocker dans FICHIERGROUP
    while (defined(my $addressgroup = <$ADDRESSGROUP>)) {
    	chomp($addressgroup);
    	my $out2=(split /\s+/, $addressgroup)[0];
    	my $out3 = (split /\s+/, $addressgroup)[1];
    	if (defined $out2) {
    		if (exists $rule{$out2}){
    			print $out2, " cela match \n"; # WHY WRITING AGAIN out2 ???
    			if (defined $out3) {
    			print { $FICHIERGROUP } $out3, "\n";
    			}
    			else {
    			print "No zone found at line $. in addressgroup.txt [$addressgroup]\n";
    			}
    		}
    	}
      else {
        print "No group found at line $. in addressgroup.txt [$addressgroup]";
      }
    }
     
    close($ADDRESSGROUP);
    close($FICHIERGROUP);
    edit : il se peut que tu trouves des choses modifiées inutiles dans le code que je viens de poster, comme par exemple les definitions de $out2 et $out3 qui sont dissociées, mais comme je ne suis pas encore très à l'aise avec les notations, lorsque je j'essaye de débugguer le script, j'essaye de simplifier ma vision des différents elements ^^. Du coup, ce n'est en aucun cas parce que je n'aime pas la double definition mais parce que j'ai eu besoin de différencier les 2 cas pour faire des tests.

  14. #34
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    A la ligne 25, comme ton fichier address.txt est aussi un CSV dont les colonnes sont séparées par des TAB, je t'invite à faire la modification suivante :
    Au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if (defined(my $out = (split /\s+/, $address)[0])) {
    écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if (defined(my $out = (split /\t+/, $address)[0])) {
    (comme c'est dans la version du script que j'ai postée).

    Et également pour le calcul de out2 et out3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	my $out2=(split /\s+/, $addressgroup)[0];
    	my $out3 = (split /\s+/, $addressgroup)[1];
    à remplacer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	my $out2=(split /\t+/, $addressgroup)[0];
    	my $out3 = (split /\t+/, $addressgroup)[1];
    ou plus simplement par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	my ($out2, $out3) =(split /\t+/, $addressgroup)[0,1];
    Enfin, comme pour le fichier address.txt, il faut copier "texto" la première ligne qui n'est qu'un entête.

    Quand au fait que le filtre puisse ne pas fonctionner pour les groupes, il s'avère que dans ton fichier address.txt, "Group1" s'écrit sans le "e" à groupe, alors que dans le fichier addressgroup.txt, il s'écrit "Groupe1"... => pas de match.

    Le script tel qu'il est actuellement chez moi :
    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
    use strict;
    use warnings;
     
    open my $RULE, "<", "rule.txt" or die "Can't open rule.txt for reading: $!";
    binmode $RULE, ":encoding(utf-16):crlf";
    my %rule;
    <$RULE>; # Ignore the first line
    while (defined(my $rule = <$RULE>)) {
      chomp($rule);
      my ($source, $destination) = (split /\t/, $rule)[5,7];
      foreach my $address_field (grep defined, $source, $destination) {
        foreach my $address (grep $_, split /\s+/, $address_field) {
          $rule{$address}++;
        }
      }
    }
     
    open (my $ADDRESS, "<", "address.txt") or die "can't open address.txt for reading: $!";
    binmode $ADDRESS, ":encoding(utf-16):crlf";
    open (my $FICHIER1,">", "addressuseless.txt") or die "Can't open addressuseless.txt for writing: $!";
    binmode $FICHIER1, ":encoding(utf-16):crlf";
    print { $FICHIER1 } scalar(<$ADDRESS>); # Read and write the first line
    while (defined(my $address = <$ADDRESS>)) {#trouver toutes les adresses de ADDRESS qui ne sont pas dans RULE et les stocker dans FICHIER1 
    	chomp($address);
      if (defined(my $out = (split /\t+/, $address)[0])) {
        if (exists $rule{$out}) {
          print { $FICHIER1 } "address found \n"; # à supprimer par la suite, n'est là que pour savoir si la condition passe ou pas
    		}
    		else{
    			print $out, "\n";
    			print { $FICHIER1 } $out, "\n" ;
    		}
      }
      else {
        print "No address found at line $. [$address]\n";
      }
    }
     
    open (my $ADDRESSGROUP,"<", "addressgroup.txt") or die "Can't open addressgroup.txt for reading: $!";
    binmode $ADDRESSGROUP, ":encoding(utf-16):crlf";
    open (my $FICHIERGROUP,">", "fichiergroup.txt") or die "Can't open fichiergroup.txt for writing: $!";
    binmode $FICHIERGROUP, ":encoding(utf-16):crlf";
    print { $FICHIERGROUP } scalar(<$ADDRESSGROUP>);
     
    #trouver tous les groupes d'adresses qui sont dans RULE et les stocker dans FICHIERGROUP
    while (defined(my $addressgroup = <$ADDRESSGROUP>)) {
    	chomp($addressgroup);
      my ($out2, $out3) = (split /\t+/, $addressgroup)[0,1];
      if (defined $out2) {
        print $out2, "\n";
        if (exists $rule{$out2}){
          print $out2, "\n"; # WHY WRITING AGAIN out2 ???
          if (defined $out3) {
            print { $FICHIERGROUP } $out3, "\n";
          }
          else {
            print "No zone found at line $. in addressgroup.txt [$addressgroup]\n";
          }
    		}
      }
      else {
        print "No group found at line $. in addressgroup.txt [$addressgroup]";
      }
    }
     
    close($ADDRESSGROUP);
    close($FICHIERGROUP);
    Si tu as des questions sur la syntaxe utilisée, n'hésite pas.

    Pour l'affectation de liste, comme celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ($out2, $out3) = (split /\t/, $addressgroup)[0,1];
    elle résulte du fait que l'opérateur "=" (affectation) accepte que l'opérande de gauche (left-value) soit une liste (une variable tableau, ou hash, ou bien une liste de scalaire comme ici). Du coup, l'opérande de droite (right-value) est considéré comme une liste. Si la liste de droite est plus courte que la liste de gauche, les valeurs supplémentaires seront affectées à undef, si c'est l'inverse, les valeurs à affecter seront ignorées.
    A droite de mon expression, on trouve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (split /\t/, $addressgroup)[0,1];
    Ce qui signifie que l'on réalise un split, qui fournit une liste, et dont on récupère le premier et le 2e élément pour former une liste à fournir à l'opérateur =.

    En espérant avoir été plus clair
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  15. #35
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 28
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup pour ta réponse très complete.

    En fait quand je parlais de la separation entre les $out2 et $out3 c'était concernant l'argument du split. En effet je voulais tester la difference entre \t+ et \s+. Du coup pour le faire, je ne me suis pas pris la tête j'ai séparé en 2 lignes ^^. Et ayant aussi effectué par la suite des modifications que sur $out3 et non pas sur $out2 pour essayer d'obtenir un résultat, la separation me simplifiait un peu la vie.

    Etant donné qu'il fallait appliquer \t aux 2 la separation ne sert plus à rien et je n'ai plus de test à faire de ce coté là, je réunis, et je me retrouve donc avec la même chose que toi.

    Pour l'histoire du Group1 et Groupe1 effectivement je l'ai remarqué hier soir, mais j'ai oublié de te le préciser et je m'en excuse...le problème venait donc que de mes arguments du split.



    Bon j'ai par contre encore quelques questions...

    Tout d'abord, nous pouvons dorénavant supprimer les lignes 50 et 52, enfin elles me permettaient comme je te l'avais dit de débugguer, ce qui n'est plus nécessaire.

    Ensuite, pour la ligne 27 que je tenais tant à mettre, je vais du coup la passer en commentaire, et la remplacer par une ligne permettant d'effacer l'adresse qui a match afin de ne pas en tenir compte. Du coup je ne sais pas si en perl il existe une possibilité de ne rien faire et de passer au test suivant. Pourquoi un tel choix alors que je pourrais prendre la negation du "exists", tout simplement parce que je ne veux pas perdre la ligne avec le "address found".



    Enfin, comme je te l'avais dit hier, je voudrais rajouter ces lignes de codes à la suite du fichier pour obtenir un résultat. Tout se passé bien pour la première étape, mais la creation du fichier DONNEE ne me donne que des GLOB(hexa).... Je ne sais pas du tout ce dont il s'agit.


    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
    open ($FICHIERGROUP, "<", "fichiergroup.txt") or die "can't read $!";
    binmode $FICHIERGROUP, ":encoding(utf-16):crlf";
    open (my $FICHIERGROUPALALIGNE, ">", "fichiergroupalaligne.txt") or die "can't create $!";
    binmode $FICHIERGROUPALALIGNE, ":encoding(utf-16):crlf";
    while(<$FICHIERGROUP>){#passe à la ligne à chaque nouvelle adresse
    	chomp($_);
    	$_=~ s/\s+/\n/g;
    	print {$FICHIERGROUPALALIGNE} $_, "\n";
    }
    close($FICHIERGROUP);
    close($FICHIERGROUPALALIGNE);
     
    open($FICHIERGROUPALALIGNE,"<","fichiergroupalaligne.txt") or die "can't read $!";
    binmode $FICHIERGROUPALALIGNE, ":encoding(utf-16):crlf";
    open(my $DONNEE, ">", "donnee.txt") or die "can't create $!";
    binmode $DONNEE, ":encoding(utf-16):crlf";
    while(<$FICHIERGROUPALALIGNE>){#supprime les lignes vides
    	next if /^\s*$/;
    	print $DONNEE;
    }
     
    close($FICHIERGROUPALALIGNE);
    close($DONNEE);
    Je n'ai pas mis de "my" après certains open car l'entité avait déjà été créée auparavant. J'ai d'ailleurs une question sur ce point là, quand on fait un open sur une entité (donc un nouveau my), le CLOSE ne détruit donc pas la signification de l'entité ?

    Merci d'avance.

    edit: j'avais une autre petite question, depuis le début quand je lance le script j'ai un caractère qui apparait devant NAME IP Address etc... et je le traine ensuite tout le temps, c'est certes être pointilleux, mais je voulais savoir de 1) s'il provenait du fait de l'encodage, et de 2) il y a moyen de l'enlever ? En effet, on effectue un read and write de la première ligne du coup je ne sais pas trop comment gérer sa suppression.

  16. #36
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Citation Envoyé par Artalis Voir le message
    Pour l'histoire du Group1 et Groupe1 effectivement je l'ai remarqué hier soir, mais j'ai oublié de te le préciser et je m'en excuse...le problème venait donc que de mes arguments du split.
    OK, je modifie mes fichiers de test pour avoir la même chaine dans les 2 fichiers.

    Maintenant, voyons chaque problème l'un après l'autre si tu veux bien

    Problème 1
    Ensuite, pour la ligne 27 que je tenais tant à mettre, je vais du coup la passer en commentaire, et la remplacer par une ligne permettant d'effacer l'adresse qui a match afin de ne pas en tenir compte. Du coup je ne sais pas si en perl il existe une possibilité de ne rien faire et de passer au test suivant. Pourquoi un tel choix alors que je pourrais prendre la negation du "exists", tout simplement parce que je ne veux pas perdre la ligne avec le "address found".
    Problème 2
    Enfin, comme je te l'avais dit hier, je voudrais rajouter ces lignes de codes à la suite du fichier pour obtenir un résultat. Tout se passé bien pour la première étape, mais la creation du fichier DONNEE ne me donne que des GLOB(hexa).... Je ne sais pas du tout ce dont il s'agit.
    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
    open ($FICHIERGROUP, "<", "fichiergroup.txt") or die "can't read $!";
    binmode $FICHIERGROUP, ":encoding(utf-16):crlf";
    open (my $FICHIERGROUPALALIGNE, ">", "fichiergroupalaligne.txt") or die "can't create $!";
    binmode $FICHIERGROUPALALIGNE, ":encoding(utf-16):crlf";
    while(<$FICHIERGROUP>){#passe à la ligne à chaque nouvelle adresse
    	chomp($_);
    	$_=~ s/\s+/\n/g;
    	print {$FICHIERGROUPALALIGNE} $_, "\n";
    }
    close($FICHIERGROUP);
    close($FICHIERGROUPALALIGNE);
     
    open($FICHIERGROUPALALIGNE,"<","fichiergroupalaligne.txt") or die "can't read $!";
    binmode $FICHIERGROUPALALIGNE, ":encoding(utf-16):crlf";
    open(my $DONNEE, ">", "donnee.txt") or die "can't create $!";
    binmode $DONNEE, ":encoding(utf-16):crlf";
    while(<$FICHIERGROUPALALIGNE>){#supprime les lignes vides
    	next if /^\s*$/;
    	print $DONNEE;
    }
     
    close($FICHIERGROUPALALIGNE);
    close($DONNEE);
    Problème 3
    Je n'ai pas mis de "my" après certains open car l'entité avait déjà été créée auparavant. J'ai d'ailleurs une question sur ce point là, quand on fait un open sur une entité (donc un nouveau my), le CLOSE ne détruit donc pas la signification de l'entité ?
    Problème 4
    edit: j'avais une autre petite question, depuis le début quand je lance le script j'ai un caractère qui apparait devant NAME IP Address etc... et je le traine ensuite tout le temps, c'est certes être pointilleux, mais je voulais savoir de 1) s'il provenait du fait de l'encodage, et de 2) il y a moyen de l'enlever ? En effet, on effectue un read and write de la première ligne du coup je ne sais pas trop comment gérer sa suppression.
    Je vais commencer par une partie du problème 3.
    Lorsque tu utilises une variable scalaire (commençant par le sigil $) pour y mettre un FILE HANDLE (à la place d'un TYPEGLOB), il suffit alors d'indéfinir la variable concernée pour fermer le fichier. En revanche, ferme le fichier avec close n'indéfini pas la variable, qui continue de contenir une valeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    undef $ADDRESS; # ferme le fichier $ADDRESS et met undef dans $ADDRESS
    close $ADDRESS; # ferme le fichier $ADDRESS mais n'affecte pas $ADDRESS
    Or, la fonction open, lorsqu'elle est utilisée avec un scalaire en 1er paramètre, créée un nouveau FILE HANDLE si et uniquement si la variable est indéfinie. Dans le cas contraire, elle ré-utilise le FILE HANDLE contenu dans ce paramètre. Dans ce contexte, il est préférable d'indéfinir la variable du FILE HANDLE si l'on souhaite la réutiliser pour ouvrir un autre fichier, ce qui du coup, ferme également le fichier :
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  17. #37
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Problème 4 :
    Les caractères de début de fichier semblent être des caractères liés à Windows. Ils sont présents dans les fichiers address.txt et addressgroup.txt (en entrées) et donc reproduits tels quels en sortie. Ce caractère spécial, sert en fait à définir l'ordre des octets pour les caractères unicode à plusieurs octets, comme c'est le cas pour l'encodage utilisé UTF-16 (2 octets). Du coup, comme on produits des fichiers dans le même encodage, il me parait nécessaire de conserver ce caractère, qui sans doute, disparaitra en ouvrant les fichiers depuis Excel.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  18. #38
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Problème 2 :
    J'ai remplacé tes deux boucles de la fin par le traitement dans l'écriture du fichier fichiergroup.txt de la mise à la ligne de chaque adresse, et de la suppression des adresses "vides".

    Ce qui donne ceci comme ligne d'écriture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            print { $FICHIERGROUP } map "$_\n", grep length, split /\s+/, $out3;
    Il s'agit ici d'un "pipeline" d'opérations (d'abord à droite, le split qui sépare les mots séparés par au moins un espace ou tabulation, ensuite, le grep qui filtre les mots de taille nulle, et enfin le map qui ajoute un \n à la fin de chacun d'eux.

    Script final actuel :
    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
    use strict;
    use warnings;
     
    open my $RULE, "<", "rule.txt" or die "Can't open rule.txt for reading: $!";
    binmode $RULE, ":encoding(utf-16):crlf";
    my %rule;
    <$RULE>; # Ignore the first line
    while (defined(my $rule = <$RULE>)) {
      chomp($rule);
      my ($source, $destination) = (split /\t/, $rule)[5,7];
      foreach my $address_field (grep defined, $source, $destination) {
        foreach my $address (grep $_, split /\s+/, $address_field) {
          $rule{$address}++;
        }
      }
    }
     
    open (my $ADDRESS, "<", "address.txt") or die "can't open address.txt for reading: $!";
    binmode $ADDRESS, ":encoding(utf-16):crlf";
    open (my $FICHIER1,">", "addressuseless.txt") or die "Can't open addressuseless.txt for writing: $!";
    binmode $FICHIER1, ":encoding(utf-16):crlf";
    print { $FICHIER1 } scalar(<$ADDRESS>); # Read and write the first line
    while (defined(my $address = <$ADDRESS>)) {#trouver toutes les adresses de ADDRESS qui ne sont pas dans RULE et les stocker dans FICHIER1 
    	chomp($address);
      if (defined(my $out = (split /\t/, $address)[0])) {
        if (exists $rule{$out}) {
          print { $FICHIER1 } "address found \n"; # à supprimer par la suite, n'est là que pour savoir si la condition passe ou pas
    		}
    		else{
    			print $out, "\n";
    			print { $FICHIER1 } $out, "\n" ;
    		}
      }
      else {
        print "No address found at line $. [$address]\n";
      }
    }
     
    open (my $ADDRESSGROUP,"<", "addressgroup.txt") or die "Can't open addressgroup.txt for reading: $!";
    binmode $ADDRESSGROUP, ":encoding(utf-16):crlf";
    open (my $FICHIERGROUP,">", "fichiergroup.txt") or die "Can't open fichiergroup.txt for writing: $!";
    binmode $FICHIERGROUP, ":encoding(utf-16):crlf";
    print { $FICHIERGROUP } scalar(<$ADDRESSGROUP>);
     
    #trouver tous les groupes d'adresses qui sont dans RULE et les stocker dans FICHIERGROUP
    while (defined(my $addressgroup = <$ADDRESSGROUP>)) {
    	chomp($addressgroup);
      my ($out2, $out3) = (split /\t/, $addressgroup)[0,1];
      if (defined $out2) {
        print $out2, "\n";
        if (exists $rule{$out2}){
          print $out2, "\n"; # WHY WRITING AGAIN out2 ???
          if (defined $out3) {
            print { $FICHIERGROUP } map "$_\n", grep length, split /\s+/, $out3;
          }
          else {
            print "No zone found at line $. in addressgroup.txt [$addressgroup]\n";
          }
    		}
      }
      else {
        print "No group found at line $. in addressgroup.txt [$addressgroup]";
      }
    }
     
    undef $ADDRESSGROUP;
    undef $FICHIERGROUP;
    Pour le problème 1, je crois que je n'ai pas compris le besoin.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  19. #39
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 28
    Points : 4
    Points
    4
    Par défaut
    Pour le problème 3: merci beaucoup pour l'explication, c'est bien plus clair maintenant, j'avais complétement zappé le fait que la variable pouvait poser problème et qu'en fermant le fichier, cela rendait undef la varaiable. Du coup, cela répond très bien à mon problème.

    Pour le problème 4: ok on peut le laisser, cela ne pose pas de problème, je travaille sur une machine virtuelle via putty, du coup je n'ai fait qu'afficher qu'avec des cat les txt et le caractère apparaissait. S'il se supprime en les ouvrant avec excel tant mieux, sinon ce n'est pas grave ^^.

  20. #40
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 28
    Points : 4
    Points
    4
    Par défaut
    Ok, tout marche parfaitement ! Merci beaucoup, ta technique est bcp plus rapide que la mienne.

    Cocnernant le problème 1, en fait il n' y a pas de problème, il suffit juste de passer en commentaire la ligne avec le "address found" et cela fonctionne. Je ne savais pas si en perl lorsque l'on laissait un if vide cela posait problème, apparemment non.

    Le but de concerver ce commentaire dans la boucle est d'avoir la possibilité de comparer en fait le fichier d'origine et la résultat, pour connaitre les adresses qui ne sont pas inutiles... Cela depend de ce que je veux en fait, si je ne cherche que les adresses inutiles, je n'ai pas besoin d'avoir les "address found" de partout. Tu vois ce que je veux dire ?


    Bon, je suis en train d'essayer de coder un dernier "module" pour voir si j'arrive à me familiariser avec les hash. Je te tiens au courant.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Comment exporter un fichier Excel vers CSV
    Par machipot dans le forum VBA Access
    Réponses: 0
    Dernier message: 09/06/2008, 22h09
  2. Réponses: 1
    Dernier message: 30/12/2007, 14h51
  3. Convertion fichier excel en CSV
    Par ceaser dans le forum Excel
    Réponses: 1
    Dernier message: 23/05/2007, 14h56
  4. Exporter fichier Excel en .csv
    Par pierre.coudert dans le forum Windows
    Réponses: 7
    Dernier message: 27/02/2007, 13h45
  5. conversion de fichier Excel en csv ,
    Par bounette dans le forum Excel
    Réponses: 2
    Dernier message: 26/01/2005, 08h42

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