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 :

Comment traiter un fichier CSV avec des expressions régulières ?


Sujet :

Langage Perl

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Comment traiter un fichier CSV avec des expressions régulières ?
    Bonjour,

    Je teste avec une copine le traitement de fichiers CSV.
    Nous traitons des fichiers CSV avant de les importer dans une base de données MySql.

    Jusqu'à présent nous avons réalisé nos traitements en Php et ça marche bien mais d'une part c'est très lent, et d'autre part nous aimerions expérimenter un autre langage peut-être plus indiqué pour ce genre de traitement.

    Pour d'autres projets nous avons fait un générateur de sitemap ainsi qu'un générateur de coordonnées GPS à partir d'une base de données d'adresses (géolocalisation avec API Google Maps) en shell en utilisant awk et sed... Et là c'est vraiment très rapide !

    Donc pour nos traitement de fichiers CSV nous sommes en train d'écrire un script shell avec awk et sed. On y arrive bien mais on lit un peu partout que Perl conviendrait mieux pour ce que l'on veut faire.

    Mais pour démarrer nous voudrions avoir un exemple concret de code avant de nous lancer complétement dans l'étude de ce langage. Cet exemple pourrait "amorcer" l'écriture d'un script par nos soins beaucoup plus complet et répondant à nos besoins.

    Nous pourrions ensuite étudier ce langage à partir de cet exemple concret. Nous pensons que cela sera aussi très utile pour ceux qui, comme nous, abordent ce langage et fréquentent ce forum.

    Nous allons donc vous montrer quelques lignes d'un de nos fichiers CSV (Les noms et coordonnées ont été modifiés et ne correspondent à aucune société réelle) et vous expliquer pour chaque ligne le traitement que nous avons appliqué en Php et que nous voudrions reproduire en Perl.

    Ne connaissant pas encore la syntaxe nous aimerions assez ensuite que l'un d'entre vous nous propose un code Perl commenté pour réaliser ces traitements.

    - Voici donc l'extrait d'un de nos fichiers CSV qui comprend en réalité environ 30 000 lignes (Ligne1, Ligne 2, etc ne font pas partie du fichier CSV).

    Ligne 1 NOM;Adresse;CP;Ville;Tel;Fax;Mobile;email;site;
    Ligne 2 Tarn Logement Esh;6 r Mar Foch;85000;Roche sur Yon (La);0251852310;0251861314;;;http://www.tarn-logement.fr;
    Ligne 3 Crédit Immobilier de Groland;av Jean-Claude Dupau;07250;Pouzin (Le);0475819194;0475618172;;;http://www.gie-ads.fr;
    Ligne 4 MPG Constructions;209 r Pavotière;01700;MIRIBEL;0478512149;;;;;
    Ligne 5 Gribaldi-Sanroni (SCP);zi Migliacciaro;20243;PRUNELLI DI FIUMORBO;0495545310;0495462199;;;;
    Ligne 6 Côte d'Opale Méditérannée;200 bd Félix Martin;83700;Saint Raphaël;0494957372;0494956417;0609389518;ballera.francis@wanadoo.fr;;
    Ligne 7 Groupe Dgron;81 bd Lazare Carnot BP18035;31080;TOULOUSE CEDEX 6;0552301620;0552103625;;;;
    Ligne 8 F.P.I Promotion;Service commercial 123Bis av Palavas CS 10006;34078;MONTPELLIER CEDEX;0810673177;;;;http://www.fpi-promotion.fr;

    - Voici quelques exemple d'opérations que nous devons réaliser sur ce fichier

    Ligne 1 --> Cette ligne devra être supprimée
    Ligne 2 --> Dans le champ adresse remplacer "r" par "rue" et "Mar" par "Maréchal"
    Ligne 2 --> Dans le champ ville remplacer "Roche sur Yon (La)" par "La Roche sur Yon"
    Ligne 3 --> Dans le champ adresse remplacer "av" par "Avenue"
    Ligne 3 --> Dans le champ ville remplacer "Pouzin (Le)" par "Le Pouzin"
    Ligne 4 --> Dans le champ adresse remplacer "r" par "rue"
    Ligne 5 --> Dans le champ NOM remplacer "(SCP)" par "(S.C.P)"
    Ligne 6 --> Dans le champ adresse remplacer "bd" par "boulevard"
    Ligne 6 --> Dans le champ ville remplacer "Saint Raphaël" par "St Raphaël"
    Ligne 7 --> Dans le champ adresse remplacer "bd" par "boulevard"
    Ligne 7 --> Dans le champ ville remplacer "TOULOUSE CEDEX 6" par "TOULOUSE"
    Ligne 8 --> Dans le champ adresse remplacer "Service commercial 123Bis av Palavas CS 10006" par "123Bis av Palavas CS 10006"
    Ligne 8 --> Dans le champ ville remplacer "MONTPELLIER CEDEX" par "MONTPELLIER"

    Perl est-il adapté à ce que nous voulons faire ?

    Si oui, quelqu'un pourrait-il nous fournir un exemple du code qu'il faudrait écrire pour traiter les 8 lignes du fichier CSV avec les opérations demandées afin que nous nous puissions ensuite continuer à explorer ce langage ?

    Merci d'avance

  2. #2
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    c'est faisable en perl via des regex.
    Si t'es sur que le traitement que tu as decris s'effectue toujours sur les lignes indiqué, ce sera pas trop dur.
    Dans la FAQ; nous avons mis des exemples de codes pour lire un fichier et il y a une partie pour les expressions regulieres. Jettez y un coup d'oeil, c'est pas compliqué ain d'ecrire quelque chose.
    Et ensuite, il y aura du monde sur ce forum pour vous aider.

    courage

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour Djibril,

    Merci pour ta réponse

    Le traitement ne s'effectue jamais sur les mêmes lignes et je ne connais donc pas à l'avance le numéro des lignes qui vont devoir être modifiées.

    J'ai donc besoin de tester chaque ligne afin d'y détecter les expressions que je recherche pour les remplacer.

    Avant de poster mon premier message j'ai consulté la FAQ et la partie expressions régulières mais je pense qu'en voyant le code pour résoudre le problème auquel je suis confronté je pourrais ensuite continuer tout seul avec la documentation en m'appuyant sur cet exemple concret.

    De plus je pense que cet exemple pourra être utile à d'autres débutants ayant des notions de shell et de Php et voulant s'initier à Perl.

    Merci pour votre aide

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/03/2014, 15h30
  2. comment traiter un fichier.txt avec "replace" ?
    Par pasrico dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 11/04/2011, 23h06
  3. Réponses: 2
    Dernier message: 28/04/2010, 21h34
  4. Réponses: 9
    Dernier message: 04/02/2010, 16h36
  5. Importer 1 Fichier CSV avec des ";" dans les champs
    Par opaillon dans le forum Import/Export
    Réponses: 3
    Dernier message: 15/01/2009, 14h23

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