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 Java Discussion :

Lecture fichier texte avec un nombre de lignes à ignorer


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 51
    Par défaut Lecture fichier texte avec un nombre de lignes à ignorer
    Bonjour,

    J'ai pensé que mon problème pourrait rencontrer ici un succès alors je le poste.

    Je lis avec java un fichier .txt qui peut être à priori très volumineux. Ce fichier est caractérisé par:
    1. Une entête (pour les noms de colonnes)
    2. Puis juste après un premier nombre de lignes à ne pas traiter
    3. Viennent ensuite les données utiles
    4. Enfin un dernier nombre de lignes de pied de page à ne pas traiter

    Jusque là, j'ouvrais le fichier dans un bufferedInputStream, j'en comptais le nombre de lignes dans un champ de la classe.
    Lorsque vient ensuite le traitement, je m'arrangeais pour lire depuis le début toutes les données en vérifiant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header + firstToIgnored + useFuls + lastToIgnore = totalLines
    Aujourd'hui je me heurte à la taille de la mémoire parce que j'ai chargé un fichier gros dont je ne peux compter le nombre de lignes sur la bécane que j'utilise. J'aimerais savoir si quelqu'un a une idée pour s'affranchir de ce problème, i.e. trouver un moyen de ne pas compter toutes les lignes en amont...

    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    961
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 961
    Par défaut
    Vous pourriez utiliser la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    read(byte[] b, int off, int len)
    pour lire le fichier morceaux par morceaux.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 51
    Par défaut
    J'aimerais lire le fichier ligne par ligne. Une idée de la lecture par bloc de lignes? (sachant que les lignes n'ont pas de longueur fixe). Il peut s'agir aussi d'un fichier csv

  4. #4
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    je ne sais pas si j'ai bien cerné le pb mais déjà :

    connais tu le nombre de lignes à ne pas lire en 2 ? Là ya pas de pb normalement ...

    pour le point 4. Y a t'il un motif ou quelque chose qui te permette de détecter que tu as finis de lire les lignes et que tu est arrivé au niveau de celles qui ne faut pas lire ?

    Sinon, autre piste (mais qui me parait peut etre hasardeuse), n'y a t'il pas moyen d'établir une relation entre taille du fichier et nombre de caractères. Puis essayer de determiner le numéro de ligne en connaissant le nombre de caractère par ligne ? Mais bon je m'avance un peu je pense ...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 51
    Par défaut
    Citation Envoyé par in
    je ne sais pas si j'ai bien cerné le pb mais déjà :

    connais tu le nombre de lignes à ne pas lire en 2 ? Là ya pas de pb normalement ...
    ...
    Ce nombre sera donné par l'utilisateur du logiciel. De même que le nombre à ne pas lire en 4.
    Citation Envoyé par in
    pour le point 4. Y a t'il un motif ou quelque chose qui te permette de détecter que tu as finis de lire les lignes et que tu est arrivé au niveau de celles qui ne faut pas lire ?
    ...
    Pas de motif malheureusement.

    Précision de taille. Ce fichier peut etre un fichier plat txt ou un fichier csv. Les points cités plus haut s'appliquent dans les 2 cas. Merci pour vos aides.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 57
    Par défaut
    ceci lit un fichier ligne par ligne et rempli un vecteur

    ça pourrait t'inspirer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    FileReader fr = new FileReader(file);
    BufferedReader buf = new BufferedReader(fr);
    Vector lines = new Vector();
    String thisLine = null;
    while ((thisLine = buf.readLine()) != null)
    	lines.addElement(thisLine);

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Par défaut
    As-tu une raison particulière de vouloir connaître le nombre de ligne avant de commencer la lecture du fichier ?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 51
    Par défaut
    Citation Envoyé par had35
    As-tu une raison particulière de vouloir connaître le nombre de ligne avant de commencer la lecture du fichier ?
    Justement je ne veux pas connaître le nombre de lignes. Mais la contrainte est que je dois ignorer un certain nombre de lignes à la fin du fichier

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 51
    Par défaut
    Citation Envoyé par XSeb74
    ceci lit un fichier ligne par ligne et rempli un vecteur

    ça pourrait t'inspirer....
    En effet!
    Juste que le fait de remplir le vecteur occupe de la place. Je risque de ne plus avoir de place dans le heap a terme. Mais, je vais y réfléchir pour voir comment optimiser tout ceci.

    Je crois quand même que je vais:
    1. Lire un certain nombre de lignes (par exemple (le nombre de lignes à ignorer)+1). Sachant que ce nombre est inférieur à 10, ça doit pas poser de problème...
    2. Stocker ces lignes dans un vecteur.
    3. Puis à la suite, essayer de lire le nombre de lignes à ignorer +1 à la fin dans un autre vecteur. Si ça marche,c'est que j'ai potentiellement des données à lire dans le fichier. Je traite les données dans le premier vecteur comme données utiles.
    4. Je copie les données du 2ème vecteur dans le 1er vecteur, et j'essaie de lire dans le fichier des données dans le second vecteur.


    La fin du fichier est forcément comme suit:
    • Le second vecteur ne peut pas se remplir, alors soit sa taille est égale au nbre de ligne à ignorer soit inférieur.
    • Dans le cas d'une égalité, je traite les données du premier vecteur et je m'arrête là.
    • Dans le second cas, si la taille du second vecteur est inférieur au nombre de lignes d'en pied à ignorer alors, je ne lis dans le premier vecteur que les lignes utiles nécessaires.


    Qu'en pensez-vous?

Discussions similaires

  1. Réponses: 11
    Dernier message: 14/06/2011, 18h37
  2. Réponses: 2
    Dernier message: 26/04/2011, 19h23
  3. [Débutant] Ecrirer un fichier texte avec les numéros de ligne ?
    Par Krillz dans le forum MATLAB
    Réponses: 14
    Dernier message: 25/02/2009, 23h09
  4. [Débutant] lecture fichier text avec un GUI
    Par pompier21 dans le forum Interfaces Graphiques
    Réponses: 0
    Dernier message: 27/01/2009, 11h13
  5. [VB6] Lecture fichier texte - Probleme virgule = saut de ligne
    Par Zaal dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 13/09/2006, 08h16

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