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 :

BD XLS SML et CSV en PERL


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Avril 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2012
    Messages : 29
    Par défaut BD XLS SML et CSV en PERL
    Bonjour,
    Je viens de découvrir la puissance de perl pour la lecture de base de données et les regexp (je faisais tout en C et en shell avant).
    Je suis confronté a un probléme sur les bases de données.
    je dois lire des fichiers .XLS et extraire des informations qui m'interesse et les mettre (rangé dans des champs) dans un fichier .CSV (le .CSV contient plusieurs sheets a ma surprise un peu comme xls).
    donc je dois parser les fichiers .XLS avec l'aide de cpan
    mais dans le meme scripte (parseur xls) je dois redirigé le flux d'informations extraites dans le fichier .CSV(avec plusieurs sheet).
    comment faire ?
    le csv (avec plusieurs sheet me pose un soucie)
    dois-je parser le csv pour ranger les informations extraite dans la bonne place.
    dans ce cas la un script qui contient deux parseur un pour XLS et l'autre pour csv .....!!!!????

    je suis completement bloqué. j'ai besoin d'aide

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Bonjour,

    Pouvez-vous nous présenter ce que vous avez fait.

  3. #3
    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 : 59
    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
    Par défaut
    Je ne comprends pas bien à quoi correspond ce format csv (format de type texte) multi-sheet ?!

    Si j'ai bien compris, tu disposes d'un fichier .xls en entrée, d'un fichier .csv en entrée, et tu souhaites lire le fichier .xls et compléter le fichier .csv, c'est ça ?

    Si c'est bien le cas, le mieux me semble de procéder ainsi :
    - lire la totalité du fichier .csv et le stocker dans une structure en mémoire
    - lire au fil de l'eau le fichier .xls et compléter la structure du fichier csv en mémoire
    - sérialiser (écrire au format csv) le contenu de la structure en mémoire dans le fichier .csv (ou une copie si l'on souhaite conserver la version d'origine).

    Pour traiter les fichiers CLS et CSV, il existe des modules du CPAN (pour les fichiers CSV, il est cependant aisé d'utilisé les fonctions de base telles que split/join et les tableaux de tableaux) :
    - Spreadsheet::Read
    - pour inspiration : xls2csv
    - Spreadsheet::ParseExcel
    - Spreadsheet::Wright (attention, incompatible avec Spreadsheet::Read, mais peut écrire du CSV).
    - Tie::Handle::CSV
    - ...

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Avril 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2012
    Messages : 29
    Par défaut
    philou ->Si j'ai bien compris, tu disposes d'un fichier .xls en entrée, d'un fichier .csv en entrée, et tu souhaites lire le fichier .xls et compléter le fichier .csv, c'est ça ?
    c'est exactement ce que je vous faire. pour le fichier csv multi sheet je pense que c'est un beug du logiciel.
    mais je n'est pas tres bien compris ta solution !!!!
    pour l'instant j'ai ecris un parseur du fichier xls et je recupere bien des donnees
    mais comment je dois les inserees dans le fichier csv ???
    pour moi il faut que je parcoure le csv pour savoir ou mettre les donnees extraite. comment lire et ecrire dans le csv ???

  5. #5
    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 : 59
    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
    Par défaut
    Je t'ai donné une piste : tu lis le fichier CSV que tu stockes en mémoire, soit à l'aide d'un module, soit à l'aide d'une fonction comme celle qui suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $csv = $ARGV[0];
    $sep = "\t"; # si le séparateur de colonne est un autre caractère, le remplacer ici
    open my $CSV, "<", $csv_file or die "Can't open $csv: $!\n";
    my @csv = ();
    while (defined(my $line) = <$CSV>) {
      push @csv, [ split /$sep/, $line ];
    }
    Ensuite, lors de l'extraction du fichier XLS, il suffit de renseigner les informations dans @csv (l'accès à la cellule A3 se fait alors par $csv[2]->[0]).

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Tu as le module Text::CSV. et Text::CSV_XS.

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Avril 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2012
    Messages : 29
    Par défaut
    merci pour toutes les piste mais voila >>
    voila j'utilise ce module Text::CSV pour lire un fichier csv>
    il me creer un fichier csv (new.csv) mais ce dernier est completement vide !!!!
    voila le code que j'ai execute

    use Text::CSV;
    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
         18
         19  my @rows;
         20  my $csv = Text::CSV->new ( { binary => 1 } )  # should set binary attribute.
         21                  or die "Cannot use CSV: ".Text::CSV->error_diag ();
         22
         23  open my $fh, "<:encoding(utf8)", "database_checking.csv" or die "database_checking.csv: $!";
         24  while ( my $row = $csv->getline( $fh ) ) {
         25      $row->[2] =~ m/pattern/ or next; # 3rd field should match
         26      push @rows, $row;
         27  }
         28  $csv->eof or $csv->error_diag();
         29  close $fh;
         30
         31  $csv->eol ("\r\n");
         32
         33  open $fh, ">:encoding(utf8)", "new.csv" or die "new.csv: $!";
         34  $csv->print ($fh, $_) for @rows;
         35  close $fh or die "new.csv: $!";
    je ne comprend pas vraiment les lignes 25 , 31 et 34.
    PS : je lui donne comme fichier database_checking.
    car je veux ecrire dans le fichier csv ...

  8. #8
    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 : 59
    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
    Par défaut
    Pour lire ton fichier CSV dans un Text::CSV, tu dois utiliser une méthode fournie dans la documentation (par exemple, la dernière, pour perl5.6 minimum).

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

Discussions similaires

  1. [AC-2007] (formulaire) Parcourir dossiers / sélection .xls / convertir en .csv
    Par polux400 dans le forum VBA Access
    Réponses: 1
    Dernier message: 18/11/2011, 11h24
  2. Comment créer un fichier csv en Perl?
    Par mahmoudelect dans le forum Langage
    Réponses: 6
    Dernier message: 06/05/2010, 10h31
  3. Peut-on convertir fichier ods en csv via perl ?
    Par Badaboumpanpan dans le forum Langage
    Réponses: 2
    Dernier message: 03/03/2009, 00h33
  4. Conversion xls au format csv
    Par nebil dans le forum Excel
    Réponses: 4
    Dernier message: 30/06/2008, 10h06
  5. Coversion d'un fichier xls en format csv
    Par yac dans le forum SQL
    Réponses: 6
    Dernier message: 08/10/2007, 09h51

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