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

Java Discussion :

Copier à partir d'une ligne spécifique


Sujet :

Java

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2014
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Copier à partir d'une ligne spécifique
    Bonsoir tout le monde,

    j'ai développé une fonction qui me permet de copier un ensemble de paragraphe à partir des lignes spécifiques.
    Mais le problème que la fonction n'affiche pas les paragraphes désirés.
    En fait, j'ai une liste ( listdebut) qui contient Debut de chaque paragraphe que je dois copier. (listfin)
    Listfin: indique fin de chaque paragraphe.

    Voici le code:
    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
    18
    19
    20
    21
    22
    23
    24
    //stream reader
                InputStream ips=new FileInputStream(fichier);
                InputStreamReader ipsr=new InputStreamReader(ips);
                BufferedReader br=new BufferedReader(ipsr);
                //creation paragraph
                String parag = "";
                String line;
                int nbLigne = 0;
     
                while((line=br.readLine()) != null)
                {
                if(listdebut.contains(nbLigne))<br>             {
                        int i = listdebut.indexOf(nbLigne);<br>                 int debut = (int)listdebut.get(i);
                        int fin = (int)listfin.get(i);
                        String ligne;
                        for(int j=debut;j<fin;j++)  if((ligne=br.readLine())!=null) parag=parag+ligne+"\n";
     
                        list.add(parag);
                    }
                    nbLigne++;<br>          }
     
            }catch(Exception e) { System.out.println(e.toString());}
            //System.out.println(list.toString());
            return list;

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    et Ca affiche quoi à la place?

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2014
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    il ne commence pas à afficher depuis la ligne de début indiqué.
    Par exemple, dans le fichier source, la ligne "2 597 573" commence par la phrase ID
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    2 597 573 ID   LDLR_HUMAN              Reviewed;         860 AA.
    2 597 574 AC   P01130; B4DII3; B4DJZ8; B4DR00; B4DTQ3; C0JYY8; H0YLU8; H0YNT7;
    2 597 575 AC   Q53ZD9; Q59FQ1; Q9UDH7;
    2 597 576 DT   21-JUL-1986, integrated into UniProtKB/Swiss-Prot.
    2 597 577 DT   21-JUL-1986, sequence version 1.
    Mais le programme débute l'affichage par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    AC   Q53ZD9; Q59FQ1; Q9UDH7;
    DT   21-JUL-1986, integrated into UniProtKB/Swiss-Prot.
    Malgré qu'il affiche correctement les lignes de début et fin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    debut  2597573
    fin  2599183
    contenu  AC   Q53ZD9; Q59FQ1; Q9UDH7;
    DT   21-JUL-1986, integrated into UniProtKB/Swiss-Prot.
    --
    De même , il dépasse la ligne de fin, au lieu de s’arrêter à 2599183, il rajoute quelques lignes.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Quelque remarques:

    -> avec ton comptage la première ligne est la ligne 0, pas la ligne 1. La plupart des editeur vont commencer à 1 pas à 0 quand ils te donnent le numéro de ligne
    -> Dans ton if(listdebut.contains(nbLigne)), tu lit dans une deuxième boucle le fichier, mais tu oublie de compter ces lignes, donc tu va tout décaler par la suite.
    -> Enfin, ta lecture, c'est ligne de début et ligne de fin exclues, puisque dès la ligne atteinte, la première chose que tu fais, c'est un nouveau readline qui lit la ligne suivante.

    Donc rien qu'avec le point 1 et 3, tu décale déjà ta lecture de 2 lignes vers le bas.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2014
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    J'ai modifié mon code de cette manière:
    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
    18
    int nbLigne = 1;
     
                while((line=br.readLine()) != null)
                {
                if(listdebut.contains(nbLigne))<br>             {
                        int i = listdebut.indexOf(nbLigne);<br>                 int debut = (int)listdebut.get(i);
                        int fin = (int)listfin.get(i);
                        String ligne;
                        for(int j=debut;j<fin;j++)  {
                         if((ligne=br.readLine())!=null) {parag=parag+ligne+"\n";nbLigne++;}}
     
                        list.add(parag);
                    }
                    nbLigne++;<br>          }
     
            }catch(Exception e) { System.out.println(e.toString());}
            //System.out.println(list.toString());
            return list;
    => il a respecté la fin indiqué mais il a commencé l'affichage à partir ligne de début +1.
    Exemple: ( fichier source)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    2 597 573 ID   LDLR_HUMAN              Reviewed;         860 AA.
    2 597 574 AC   P01130; B4DII3; B4DJZ8; B4DR00; B4DTQ3; C0JYY8; H0YLU8; H0YNT7;
    2 597 575 AC   Q53ZD9; Q59FQ1; Q9UDH7;
    2 597 576 DT   21-JUL-1986, integrated into UniProtKB/Swiss-Prot.
    2 597 577 DT   21-JUL-1986, sequence version 1.
    Résultat: il n'a pas affiché la ligne de début qui contient ID .....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    content : AC   P01130; B4DII3; B4DJZ8; B4DR00; B4DTQ3; C0JYY8; H0YLU8; H0YNT7;
    AC   Q53ZD9; Q59FQ1; Q9UDH7;
    Merci bien tchize_ pour votre aide

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

Discussions similaires

  1. Lire fichier texte à partir d'une ligne spécifique
    Par Msxty dans le forum VBScript
    Réponses: 7
    Dernier message: 15/07/2011, 15h42
  2. [VBA-E] Copier et coller une ligne entiere
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 30/05/2006, 15h51
  3. Copier à partir d'une requète
    Par Sendo dans le forum Access
    Réponses: 3
    Dernier message: 28/09/2005, 20h13
  4. lancer une mdb a partir d'une ligne de commande
    Par dpie dans le forum Access
    Réponses: 5
    Dernier message: 30/11/2004, 15h01
  5. Effacer le contenu d'un fichier a partir d'une ligne
    Par localhost dans le forum Linux
    Réponses: 3
    Dernier message: 04/04/2004, 04h47

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