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 :

[debutant] accélérer la lecture d'un fichier


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 86
    Par défaut [debutant] accélérer la lecture d'un fichier
    Bonjour,

    J'ai un fichier texte relativement long (+/- 100 Ko) ; celui ci est "séparé" en deux parties par une ligne reconnaissable, par exemple :"FIN DE LA PREMIERE PARTIE".

    A noter que cette ligne reconnaissable est de mon fait, je (vous ) peux tout a fait mettre autre chose si ça marche mieux.

    Je souhaite transformer uniquement la deuxiemme partie en String :

    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
     
    BufferedReader in = new BufferedReader(new FileReader ("C:\\essai.txt");
    String s=null;
    String tmp;
     
    // parcours du fichier jusqu'a la balise : on ne fait rien sauf si on arrive à la fin
    while (!(tmp=in.readLine()).equals("FIN DE LA PREMIERE PARTIE")){
       if (tmp==null)
         break;
    }
     
    // apres la balise, on recopie les lignes
    while ((tmp=in.readLine())!=null){
       s+=tmp+"\n";
    }
     
    in.close();

    Ce code fonctionne, mais je le trouve tres long à l'execution ... auriez vous une idée pour faire plus vite ?

    Remarque peut-etre utile : le fichier traité comporte un bon paquet de lignes vides...

    Merci de votre aide


    Question subsidiaire : si dans mon fichier j'ai une séquence \r\n , ça compte au niveau de Readline() pour une seule, ou deux lignes ?

  2. #2
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Scanner scan = new Scanner(new File("C:\\essai.txt"));
    scan.findWithinHorizon("FIN DE LA PREMIERE PARTIE\n",0);
    StringBuilder buf = new StringBuilder();
    while(scan.hasNextLine()) {
        buf.append(scan.nextLine());
        buf.append('\n');
    }
     
    String s = new String(buf);
     
    scan.close(); // dans un finally

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 86
    Par défaut
    !!!!!!!!!!!! !!!!!!!!!!!

    Je suis épaté. Merci beaucoup.

    Si un jour tu as le temps de me dire en 2 mots quelle est la raison de la lenteur de ma méthode, je suis preneur.

    En tous cas là, c'est nickel. A+ merci

  4. #4
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  5. #5
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par absolut75
    !!!!!!!!!!!! !!!!!!!!!!!

    Je suis épaté. Merci beaucoup.

    Si un jour tu as le temps de me dire en 2 mots quelle est la raison de la lenteur de ma méthode, je suis preneur.

    En tous cas là, c'est nickel. A+ merci
    Pour la lenteur, regarde le lien de le y@m's.
    Je viens de modifier mon post précédent, j'ai rajouté un append('\n'), pour que tes lignes soient bien découpées en lignes (dès fois qu'il te prenne l'envie de faire juste un nextLine() + '\n' )

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 86
    Par défaut
    ok, merci à vous deux.

    Désolé, ce n'est pas dans mes habitudes de ne pas consulter la FAQ avant de poster mais ce coup là je suis passé à côté.

    a+

    PS: merci d'avoir modifié ton code, ça n'aura pas été inutile

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

Discussions similaires

  1. Accélérer la lecture d'un fichier
    Par arkerone dans le forum C++
    Réponses: 2
    Dernier message: 27/11/2012, 16h15
  2. [Débutant] Lecture dans un fichier texte
    Par babemagus dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 07/07/2005, 12h17
  3. [debutant] lecture d'un fichier txt de 10mo
    Par karamazov994 dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 19/04/2005, 15h55

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