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

Ruby Discussion :

Parcourir un fichier et problème RegEx


Sujet :

Ruby

  1. #1
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Points : 53
    Points
    53
    Par défaut Parcourir un fichier et problème RegEx
    Bonsoir à tous,

    Je parcours un fichier avec un each. J'avais un fichier de test où j'ai copier/coller le texte à traiter d'un des fichiers original. Mon code fonctionné très bien.

    Maintenant que je veux travailler sur les fichiers originaux j'ai un problème qui remet en cause une bonne partie du code.

    En gros, je parcours donc un fichier avec une boucle each et je test chaque ligne avec une regEx. Quand elle "matche", le problème c'est que l'information se trouve sur deux lignes et j'ai besoin de la ligne B pour compléter les modifications que j'apporte à la ligne A. Donc avec le each, c'est mort puisque j'ai les informations de la ligne A mais celles de B sont inexistantes au moment du match.

    Ma question est simple, existe t'il d'autre moyen de parcourir un fichier ?
    Si non (ou si cela reviens au même), comment procèderez vous dans le cas contraire ?

    Merci

  2. #2
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut
    Tu peux lire un fichier de façon à le mettre dans un tableau où chaque élément est une ligne de ton fichier : http://www.ruby-doc.org/core-2.0.0/I...od-c-readlines

    Du coup tu pourrais boucler sur tes lignes, appliquer ton test RegExp et en cas de match récupérer l'élément précédent du tableau.

    Tu peux aussi faire des RegExp qui testent l'ensemble du texte (y compris les sauts de ligne) avec le modifieur m, mais c'est un peu plus compliqué car tu dois adapter ton expression pour délimiter le début de ta ligne A en la capturant jusqu'à la ligne B suivante (et pas par exemple la dernière ligne B du fichier qui match). C'est donc une solution à éviter sauf avec un format de texte très constant et sans surprise.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /./m - Any character (the m modifier enables multiline mode)
    http://www.ruby-doc.org/core-2.0.0/Regexp.html

  3. #3
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Points : 53
    Points
    53
    Par défaut
    J'avais complètement zappé le readlines.

    Oui l'option m et le point j'avais testé mais du coup sa prends tout parce que la fin de ligne est complètement imprévisible et ne se termine pas par un point.

    Pour résoudre le problème, quand ça matche, je passe à l'itération suivante (avec next).
    Du coup je récupère la deuxième ligne.

    Merci pour ta réponse.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/01/2009, 16h27
  2. fichier .bat : problèmes avec des sous-répertoires
    Par aymron dans le forum Windows
    Réponses: 4
    Dernier message: 23/06/2005, 09h33
  3. Valider fichier XML : problème avec la DTD
    Par SkIllz2k dans le forum Valider
    Réponses: 2
    Dernier message: 26/04/2005, 17h15
  4. Réponses: 12
    Dernier message: 14/06/2004, 13h06
  5. Réponses: 6
    Dernier message: 23/12/2003, 15h30

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