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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 28
    Par défaut Découper fichier excel ou .csv
    Bonjour à tous,


    Je viens de mettre au perl vu qu’on m’a souvent dit que ce langage était très pratique pour faire des recherches sur des fichiers.

    Cependant je suis bloqué à mon premier essai qu’est le suivant.

    J’ai ce fichier excel de la forme :

    Name IP Address Netmask Zone Comment
    h-1.1.1.1 1.1.1.1 255.255.255.255 Trust Test1
    h-2.2.2.2 2.2.2.2 255.255.255.255 Trust Test2
    ... ... ... ... ...

    Et je voudrais obtenir ce résultat :

    Name
    h-1.1.1.1
    h-2.2.2.2
    ...

    Mais je bloque complétement depuis quelques heures… Je ne sais même pas si le perl va me permettre de le faire, vu que je pars de fichiers excel…

    J'ai abordé le problème en commençant avec une boucle while sur le premier fichier excel (que j'ai passer en format txt pour rester simple au début) et j'ai essayé de print dans un nouveau fichier, mais je n'obtenais que des résultats bizarres comme une succession de chiffres hexadécimaux...

    J'ai vu qu'il existait des lib pour le perl traitant les fichiers excel avec cpan mais je voulais savoir si c'était possible de se débrouiller sans.

    Je pourrais aussi passer par un fichier .txt cependant en utilisant la commande awk j'ai pu noter que le fichier excel n'était alors pas composé de champs si je le passais en .txt....ce qui n'est alors pas pratique pour "couper" le fichier.

    Merci d’avance pour votre aide ^^ ! N'hésitez pas à me rediriger si nécessaire, ou bien à me donner des tutos!

    Artalis.

  2. #2
    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
    Billets dans le blog
    1
    Par défaut
    Oui, Perl permet tout-à-fait de réaliser ce que cherches à faire.

    Le mieux est d'utiliser un module spécialisé du CPAN: Spreadsheet:arseExcel.

    Sinon, une solution "artisanale" possible consisterait à exporter ("Enregistrer sous...") le fichier Excel dans un autre format, par exemple au format texte ou CSV et à exploiter le résultat.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 28
    Par défaut
    Merci beaucoup pour ta réponse, je vais donc m'orienter vers le cpan.

    J'avais commencé en changeant le format de mon fichier en .txt mais cette transformation ne permettait pas de considérer les différentes colonnes comme différents champs, du coup c'était plus complexe pour faire la séparation. Comme je l'ai dit, pour ce cas là je pensais m'orienter vers des awk/grep etc... mais cela n'avait rien donné ^^.

    Je vous tiens au courant pour mon avancée.

  4. #4
    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
    Billets dans le blog
    1
    Par défaut
    Sinon, avec les données d'exemples que tu as données:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    use strict;
    use warnings;
     
    while (<DATA>) {
         my $out = (split /\s+/, $_)[0];
         print $out, "\n";
    }
    __DATA__
    Name IP Address Netmask Zone Comment
    h-1.1.1.1 1.1.1.1 255.255.255.255 Trust Test1
    h-2.2.2.2 2.2.2.2 255.255.255.255 Trust Test2
    Ce qui donne à l'exécution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ perl test_artalis.pl
    Name
    h-1.1.1.1
    h-2.2.2.2

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 28
    Par défaut
    Ton code correspond exactement à ce que je souhaitais faire.


    J'ai installé Spreadsheet... et j'étais en train d'essayer d'obtenir le résultat, mais je n'y avais pas encore réussi, du coup merci beaucoup ^^.

    Du coup, en utilisant ta méthode pour stocker le résultat dans un nouveau fichier .txt je fais comme ceci :

    use strict;
    use warnings;

    open(ADDRESS,"address.txt");
    open(FICHIER1,">addressuseless.txt");


    while (<ADDRESS>){
    my $out = (split /\s+/, $_)[0];
    print $out, "\n";
    print FICHIER1 $out, "\n" ;
    }

    close (ADDRESS);
    close(FICHIER1);

    Si jamais j'ai des erreurs de syntaxe, ou bien que le code n'est pas propre, n'hésitez pas à me le dire, je suis là pour apprendre ^^.

    Je vais continuer ce petit code en essayant d'effectuer une recherche de chacun des éléments récupérés en utilisant un autre fichier. Je vous tiens au courant.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 28
    Par défaut
    Désolé pour le double post,

    mais voici la suite de mon script.

    Comme je l'ai indiqué précédemment, je souhaite maintenant voir si ce que j'ai récupéré dans mon FICHIER1 se trouve dans un autre fichier .txt : le fichier RULE. Il s'agit là encore d'un fichier avec plusieurs colonnes don't l'une possède des occurences d'adresses IP.

    Du coup, d'un point de vue algorithmique :

    je considère une ligne de FICHIER1
    je regarde si cette chaîne de caractères est présente dans RULE
    si ce n'est pas le cas, je supprime cette chaîne de caractères de FICHIER1

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    open(RULE,"<rule.txt");
    open(FICHIER1,"<addressuseless.txt");
    while(<FICHIER1>){ #je souhaite tester toutes les lignes de FICHIER1
    	foreach my $lines(<RULE>){# je souhaite chercher l'occurence d'une ligne de FICHIER1 dans tout RULE
    		if(index($_,$lines)==-1){# si la ligne de FICHIER1 n'est pas dans ADDRESS alors je supprime cette ligne dans FICHIER
    			print $_="";
    			print "adresse non trouvee \n";
    		}
    	}
    }
    Cependant cela ne marche pas très bien vu que j'ai l'impression que seul la première ligne de FICHIER1 est passée en revue... De plus, elle n'est pas supprimée de mon fichier bien qu'elle ne soit pas présente dans RULE.

    Merci d'avance pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

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