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 :

Expressions régulières : différencier des lignes de nombres


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Points : 8
    Points
    8
    Par défaut Expressions régulières : différencier des lignes de nombres
    Bonjour,

    J'ai un problème pour traiter des données en utilisant les expressions régulières. Je dois récupérer des donnés dans des fichiers ASCII afin de les interpréter.
    Les fichiers contiennent des lignes d'entête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1  6  205  10  8  96  21  12   -30.0000    123.450
    et des lignes de données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        5.00    41.989    23.459    32.42500     0.010     5.002
    Mon objectif est d'identifier ces deux types de lignes avec des expressions régulières. Seulement ces lignes peuvent contenir un nombre variable de nombres en fonction du fichier.
    Pour l'instant j'utilise une expression basée sur le nombre de champs :
    mais ce nombre peut varié et s'il est identique pour les deux lignes je suis coincé...
    Je me creuse la tête depuis un moment, si quelqu'un a une idée, merci d'avance ^^.

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Quelques questions :
    1. Comment distingues-tu les entêtes et les données ? Les entêtes sont ils toujours sur la première ligne ?
    2. Y a-t-il un nombre constant de champ dans un même fichier ?
    3. Peut-on déduire ce nombre de la ligne d'entête ?


    Je te conseille d'utiliser split plutôt qu'une regex pour parser ces lignes, ce sera plus simple.

    --
    Jedaï

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 582
    Points : 2 030
    Points
    2 030
    Par défaut
    Peux-tu confirmer ce point stp : les lignes contenant des données contiennent toujours des valeurs de type flottant (et non des entiers). Ca peut être le cas mais sur certaines valeurs des lignes contenant des en-têtes.

    Tu confirmes ?

    Dans le cas contraire, comment toi tu fais pour différencier de telles données ?

    PS : le but du truc, c'est d'essayer de trouver une constance sur, soit l'apparition de ces données dans tes fichiers, soit sur le type de données qu'elles contiennent, le nombre d'éléments dans une ligne, etc.

    Bref, donne nous des pistes

  4. #4
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    J'utilise bien split pour extraire les lignes mais le problème est vraiment la reconnaissance du type de ligne.
    Pour apporter quelques précisions :
    1. Un fichier contient plusieurs entêtes et chacune d'elles est suivit par quelques centaines de lignes de données correspondantes
    2. Dans un même fichier le nombre de champs est constant
    3. Le nombre de champs n'est pas toujours déductible de la ligne d'entête
    4. Les lignes de données ne contiennent pas toujours des valeurs de type flottant

    Par contre, dans chaque entête, le nombre de lignes de données correspondant est indiqué, mais pas toujours dans le même champs. Donc je pense que je vais être obligé de faire plusieurs scipts au lieu d'en faire un générique pour tous les fichiers.

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 582
    Points : 2 030
    Points
    2 030
    Par défaut
    Oui mais as-tu un moyen visuel ou autre te permettant lorsque tu ouvres un fichier de voir d'emblée une ligne d'en-têtes ou une ligne de données ?

    As-tu la possibilité (si données non sensibles) de nous montrer un extrait d'un de ces fichiers ?

  6. #6
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Désolé, je ne peux pas montrer d'extraits des fichiers. Mais un fichier ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    1 6 205 10 8 96 21 12 -30.0000 123.450
        5.00    41.989    23.459    32.42500     0.010     5.002
        5.00    41.989    23.459    32.42500     0.010     5.002
        5.00    41.989    23.459    32.42500     0.010     5.002
        5.00    41.989    23.459    32.42500     0.010     5.002
        ...
    1 6 205 10 8 96 21 12 -30.0000 123.450
        5.00    41.989    23.459    32.42500     0.010     5.002
        5.00    41.989    23.459    32.42500     0.010     5.002
        5.00    41.989    23.459    32.42500     0.010     5.002
        ...
    ...
    Evidemment les valeurs changent selon les lignes, mais on voit la structure.

  7. #7
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Il me semble que dans l'exemple que tu viens de nous donner les lignes de données et d'entêtes sont facile à distinguer : les lignes d'entêtes n'ont pas d'espace initial, les lignes de données si. N'est-ce pas toujours le cas ?

    --
    Jedaï

  8. #8
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Malheureusement non, mais je m'en suis sortie en utilisant le nombre de lignes de données. Je procède comme ceci :

    Je pars du principe que la premère ligne est un entête
    • lecture de l'entête (mémorisation du nombre de lignes de données correspondantes)
    • lecture des n lignes de données
    • lecture de l'entête suivant
    • etc...


    En tous cas merci pour votre aide.

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 582
    Points : 2 030
    Points
    2 030
    Par défaut
    Est-il possible d'isoler facilement le nombre de lignes de données correspondantes à un en-tête ?

  10. #10
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    oui, c'est le troisième champs dans l'exemple. Parfois c'est un autre champs mais en fonctions du type de fichier je sais quel champs contient ce nombre de lignes de données.

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

Discussions similaires

  1. [RegEx] Expression régulière sur des nombres entiers
    Par wind_of_o dans le forum Langage
    Réponses: 8
    Dernier message: 12/12/2011, 18h12
  2. Expression régulière sur des nombres
    Par lola06 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2011, 11h42
  3. expression régulière : retour à la ligne
    Par mobi38 dans le forum Eclipse
    Réponses: 1
    Dernier message: 05/10/2007, 09h34
  4. Réponses: 3
    Dernier message: 20/04/2007, 14h47
  5. Réponses: 5
    Dernier message: 30/10/2006, 13h59

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