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

Entrée/Sortie Java Discussion :

Lecture fichier : récupérer les lignes précédent un pattern precis


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Points : 64
    Points
    64
    Par défaut Lecture fichier : récupérer les lignes précédent un pattern precis
    Bonjour,

    petit problème auquel je n'ai pas trouvé de réponse sur le forum :
    je lis un fichier (10 Mo) via un readLine et si la ligne correspond à un pattern précis, je veux récupérer les cinq lignes précédentes.

    Dans BufferedReader je ne trouve pas de méthodes me le permettant.

    Je dois utiliser une autre classe pour lire ? Ou je lis le flux en entier et note les lignes qui m'intéressent puis je relis directement les blocs qui m'intéressent (ça m'embete un peu de relire le fichier une autre fois) ?

    Merci pour votre aide.

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    L'algo n'est pas très dur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    String[] lignes = {"", "", "", "", ""};
     
    /* Boucle de lecture de ton fichier */
    // Lecture de la ligne suivante du buffer
    // Si c'est le pattern chercher, tes 5 lignes precedentes sont dans 'lignes'
    /* Sinon {
        lignes[0] <- lignes[1]
        lignes[1] <- lignes[2]
        lignes[2] <- lignes[3]
        lignes[3] <- lignes[4]
        lignes[4] <- ligne courante
    */
    Evidemment, cet algo n'est pas optimal du tout et il ne faut pas le coder ainsi car à chaque ligne, tu décales tout ton tableau (5 opérations!)
    Mais c'était pour te donner le principe. Pour l'implémentation, je te suggère un compteur (modulo 5) qui te fait remplacer une case seulement de ton tableau à chaque lecture de ligne
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Points : 64
    Points
    64
    Par défaut
    J'étais arrivé à la conclusion de faire un tampon des 5 dernières lignes également.

    Par contre je suis crevé et je pige pas complètement ce que tu entends par un compteur modulo 5.

    Merci pour ton aide.

  4. #4
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    ( i modulo 5 == 0 ) est vrai dès lors que "i" est un multiple de 5...
    Une petite révision de mathématiques s'impose...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Points : 64
    Points
    64
    Par défaut
    La question ne portait pas sur la fonction modulo... mais sur l'implémentation du compteur modulo 5.

    J'ai pas été très clair je dois l'admettre Surtout que c'est bien plus facile le lendemain quand on a plus dormi

    Merci pour l'aide.

  6. #6
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Citation Envoyé par Zanton
    La question ne portait pas sur la fonction modulo... mais sur l'implémentation du compteur modulo 5.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    String[] buffer = {"","","","",""};
    entier i=0
    Pour chaque ligne {
      si ligne == pattern { utiliser le buffer comme tu veux (en faisant attention a i pour determiner l'ordre des lignes: i mod 5, i+1 mod 5, etc. ) }
      sinon buffer[i mod 5] <- ligne
      i <- i+1
    }
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Points : 446
    Points
    446
    Par défaut
    Salut,

    pour conserver les 5 dernières lignes, tu peux aussi utiliser une pile (stack) qui n'aurait que 5 (ou n ) éléments.
    J'avais déjà trouvé ça qque part: une LimitedStackSize ou un truc du genre ....

    Avec une telle pile, tu ne te soucis pas du modulo, tu "ajoutes" (put ou push ...) tes lignes tant que tu n'as pas trouvé ton pattern


    A+
    Il est agréable d'avoir le choix. La difficulté est alors de faire le bon (ou le moins pire).

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

Discussions similaires

  1. [Débutant] Récupérer les lignes d'un fichier texte
    Par Titiso dans le forum VB.NET
    Réponses: 3
    Dernier message: 30/08/2014, 19h15
  2. Réponses: 2
    Dernier message: 19/01/2011, 15h41
  3. Récupérer les lignes d'un fichier-Solution multi OS
    Par rambc dans le forum Général Python
    Réponses: 5
    Dernier message: 26/05/2009, 15h39
  4. Fichier récupérer les lignes
    Par Fluxy dans le forum Langage
    Réponses: 1
    Dernier message: 24/02/2007, 13h57
  5. Réponses: 1
    Dernier message: 07/06/2006, 18h56

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