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

avec Java Discussion :

utilisation des conditions en java


Sujet :

avec Java

  1. #1
    Membre régulier Avatar de stpaul04
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 271
    Points : 116
    Points
    116
    Par défaut utilisation des conditions en java
    Bonjour,

    je voudrai extraire des lignes à différents endroits dans un fichier texte.

    J'arrive à extraire un bloc de lignes compris entre ligne N° 2 et 4.

    Par contre si je veux extraire en plus un autre bloc de ligne compris entre ligne 10 et 14, cela ne fonctionne plus.

    Seulement la première instruction est éxécuté.
    pourquoi.

    Merci

    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
    25
    26
    27
    28
    29
    30
     
    import java.io.*;
     
    public class ReadSpecificLine
    {
        public static void main(String[] args)
        {
            StringBuffer buffer = new StringBuffer();
            String line = "";
            int lineNo=0;
                try
                {
                LineNumberReader ln = new LineNumberReader(new FileReader("C://Source/Source.txt"));
                int count = 0;
                while (ln.readLine() != null) {
                    count++;
                }
                ln.close();
                FileReader fr = new FileReader("C://Source/Source.txt");
                BufferedReader br = new BufferedReader(fr);
                for (lineNo = 1; lineNo <= count; lineNo++)
                {
                    if (lineNo == 2)
                    {
                        for (lineNo = 2; lineNo <= 4;lineNo++) && (lineNo = 10; lineNo <= 14;lineNo++)
     
                        {
                            buffer.append(br.readLine());
                            //buffer.append("\n");
                        }

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 165
    Points : 205
    Points
    205
    Par défaut
    Ton erreur est là. Tu parcours tout ton fichier mais n'effectue un traitement que pour la ligne 2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (lineNo = 2; lineNo <= 4;lineNo++) && (lineNo = 10; lineNo <= 14;lineNo++)
    Pas besoin d'un for ici, un if suffit.

  3. #3
    Membre éprouvé

    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Septembre 2010
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Septembre 2010
    Messages : 450
    Points : 1 073
    Points
    1 073
    Par défaut
    Qu'est ce que c'est que cette syntaxe pour faire un double for?

    En tout cas, chez moi, Eclipse la voit en rouge.

  4. #4
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Points : 402
    Points
    402
    Par défaut
    En oubliant la syntaxe du double for, je pense que ton "lineNo" ne prend jamais de valeur supérieur à 5....

    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
    for (lineNo = 1; lineNo <= count; lineNo++){
        //ici à la la première itération, lineNo vaut 1. rien ne se passe
        //deuxième itération, ici lineNo vaut 2
                    if (lineNo == 2)
                    //la condition de ce if est donc validé
                    {
                        for (lineNo = 2; lineNo <= 4;lineNo++) && (lineNo = 10; lineNo <= 14;lineNo++)
                        //ici, au début de ton premier for, tu donne la valeur 2 à lineNo
                        //et cela peu importe la valeur qu'il avait avant.
     
                        {
                            buffer.append(br.readLine());
                            //buffer.append("\n");
                        }
                        //a la sortie de ta première boucle for, lineNo vaut 5.
                        //on repart dans dans le tout premier for, en haut, ou lineNo prend la valeur 6. N'étant pas égal à 2, on ne rentrera plus jamais dans ton if, donc ton deuxième for pour les lignes 10 à 14 ne sera jamais exécuté.
    Moi je remplacerai tout ce code par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (lineNo = 1; lineNo <= count; lineNo++){
        if(lineNo == (2||3||4||10||11||12||13||14){
            buffer.append(br.readLine());
        }
    }
    je ne peux pas vérifier la syntaxe, mais si cela ne marche pas, il suffira de soit créer une énumération pour les lignes à parcourir, soit écrire le if de la sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((lineNo==2) || (lineNo==3) || ... )

  5. #5
    Membre régulier Avatar de stpaul04
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 271
    Points : 116
    Points
    116
    Par défaut
    Merci à toi Michon,

    j'essaierai aussi ton code.
    Mais j'ai trouvé une solution qui n'est pas peut-être pas la meilleure.
    c'est de mettre plusieurs boucles au bon endroit et j'arrive effectivement à ce que je veux.

    Par contre j'ai essayé de virer le IF avant (lineNo2==2), alors là, mon Netbeans afficher des erreurs "out of memory"


    Ce ci étant, il y a une chose que je ne comprends pas dans le résultat,
    si tu regardes la ligne ou je mets buffer.append("\n"); à deux endroit,
    je pensais tout simplement que les blocs de lignes que je copiais étaient mis les une àprès les autres en sautant à la ligne à chaque fois, mais ici il me mets des lignes les unes à la suite des autres , donc je me retrouve avec une seule ligne.

    Pourtant "\n" veut bien dire sauter une ligne à chaque fois, non?

    Merci


    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    import java.io.*;
     
    public class ReadSpecificLine
    {
        public static void main(String[] args)
        {
            StringBuffer buffer = new StringBuffer();
            String line = "";
            int lineNo=0;
                try
                {
                LineNumberReader ln = new LineNumberReader(new FileReader("C://Temp/File1.txt"));
                int count = 0;
                while (ln.readLine() != null)
                {
                    count++;
                }
                ln.close();
                FileReader fr = new FileReader("C://Temp/File1.txt");
                BufferedReader br = new BufferedReader(fr);
                for (lineNo = 1; lineNo <= count; lineNo++)
                {
                    if (lineNo == 2)
                    {
                        for (lineNo = 2; lineNo <= 4; lineNo++)
                        {
                            buffer.append(br.readLine());
                            buffer.append("\n");
                        }
     
                    }
     
                    if (lineNo == 10)
                    {
                        for (lineNo = 10; lineNo <= 14; lineNo++)
                        {
                            buffer.append(br.readLine());
                           buffer.append("\n");
                        }
                    }                
                    else
                        br.readLine();
                }
     
            BufferedWriter bw=new BufferedWriter(new FileWriter(new File("C://Temp2/File2.txt"),true));
            bw.write(buffer.toString());
            bw.newLine();
            bw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    \n veux dire new line, oui, mais si vous ouvrez le fichier avec notepad, il ne considère que \r\n comme un retour à la ligne.

  7. #7
    Membre régulier Avatar de stpaul04
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 271
    Points : 116
    Points
    116
    Par défaut
    Merci infiniment Tchize Michon et les autres,
    cet un exemple que je garderai.

    Salutations à vous

  8. #8
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Je ne comprends pas pourquoi tu lis tout le fichier si tu ignores le fichier à partir de la ligne 15.

    De plus pourquoi lire 2 fois le fichier d'entrée? Le comptage total du nombre de lignes est inutile car par la suite à partir de la ligne 15 tout est ignoré...

    Enfin pourquoi ne pas ouvrir les deux fichiers en même temps, lire et écrire en même temps est une pratique courante lorsqu'on veut copier tout ou partie d'un fichier vers un autre.

    Je te propose ceci comme exemple. Compare ta version avec la mienne pour comprendre mes remarques.

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    	public static void main(String[] args) {
    		LineNumberReader ln = null;
    		BufferedWriter bw = null;
     
    		try {
    			File fileIn = new File("C://Temp/File1.txt");
    			File fileOut = new File("C://Temp/File2.txt");
     
    			ln = new LineNumberReader(new FileReader(fileIn));
    			bw = new BufferedWriter(new FileWriter(fileOut, true));
    			String line = null;
     
    			while ((line = ln.readLine()) != null && ln.getLineNumber() < 15) {
    				if (ln.getLineNumber() == (2|3|4|10|11|12|13|14)) {
    					bw.write(line);
    					bw.newLine();
    				}
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				ln.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    			try {
    				bw.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    	}

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/03/2014, 17h54
  2. Utiliser des DLL en Java
    Par fares.gl dans le forum Général Java
    Réponses: 3
    Dernier message: 09/09/2011, 18h41
  3. doc XML utiliser des conditions
    Par clouddd dans le forum C#
    Réponses: 5
    Dernier message: 07/06/2011, 14h00
  4. [XUL][Gabarits] Utilisation des conditions
    Par Christophe Charron dans le forum Autres langages pour le Web
    Réponses: 4
    Dernier message: 03/03/2007, 10h44
  5. conditions d'utilisation des Evenements
    Par Hyperion99 dans le forum Langage
    Réponses: 7
    Dernier message: 17/11/2006, 16h27

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