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 :

Recherche de chaine et copie dans fichier texte


Sujet :

Langage Java

  1. #1
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2013
    Messages : 63
    Points : 154
    Points
    154
    Par défaut Recherche de chaine et copie dans fichier texte
    Bonjour,

    Je rencontre plein de petit problème avec le langage Java, certain, j'arrive à les contourner mais d'autre me pose problème.
    En pièce jointe :
    temp.txt
    Dans ce fichier texte, le code source d'un site.
    Je voudrais extraire de se code source, les lignes correspondant au réunion du 02-09-2014 (ligne 73 à 85 (incluse))
    pour l'instant, le bout de code que j'ai réussi à faire est :
    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
     
    public static void reunion()
    	{
    		String aujourdhui = (date_jour.main(null)); //ceci est juste une méthde appelée qui me formate la date du jour avec ce format :dd-MM-yyyy
    		int pos1=0;
    		int pos2=0;
    	try
    		{
    		OutputStream output = new FileOutputStream("reunion.txt");
    		BufferedReader br = new BufferedReader (new FileReader("temp.txt"));
    		BufferedReader br2 = new BufferedReader (new FileReader("temp.txt"));
    		try
    			{
    			String ligne;//me permet de trouver la prmemière apparition de la date du jour
    			String ligne2;//utiliser pour la seconde boucle while
    			boolean reunionTrouve = false;
    			while ((ligne=br.readLine()) !=null)
    				{
    				if (reunionTrouve ==  false)
    					{
    					if ( ligne.indexOf(aujourdhui) != -1)//je recherche la ligne de la première apparition de la date du jour
    						{
    						reunionTrouve = true;
    						while ((ligne2=br2.readLine()) !=null)	//je fais une deuxième boucle mais en incluant un if pour ne copié qu'à partir de la date du jour
    							{
    								if (pos2 >=pos1) //copie à partir de la première apparaition de la date du jour
    									{
    									//écriture
    									System.out.println(ligne2); //ce que j'obtiens dans la console pour l'instant (voir seconde pièce jointe), mais je n'arrive pas trouver la syntaxe correcte pour l'écrire dans l'output, j'ai essayé les output.write ou print ouprintln avec ligne2 dans l'argument
    									}
    							pos2++;
    							}
    						}
    					}
    				pos1++;
    				}
    			}
    		finally
    			{
     
    			br.close();
    			br2.close();
    			}
    		}
    	catch (IOException ioe)
    		{
    		//fermeture des flux
    		System.out.println("Erreur --" + ioe.toString());
    		}
    	}
    Voici ce que j'obtiens dans ma console :
    console.txt
    Donc en gros récupérer, mes première ligne ou figure la date du jour, mettre ça dans un fichier texte appeler réunion et supprimer les lignes vides

    Dans un second temps, je vais récupérer le lien de la page de la réunion, le nom de la réunion et mettre dans un BDD (type MySQL), mais chaque chose en son temps, j'aime bien la recherche (mais si vous voyer une méthode plus directe ou plus simple, je suis preneur de toute idée)

    Merci

  2. #2
    Membre éclairé Avatar de Sennad
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 180
    Points : 703
    Points
    703
    Par défaut
    Salut,

    Pour écrire dans un fichier tu peux utiliser cette méthode
    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
    public static final void writeInFile (String lineToWrite, String pathOfFileToWrite) {
            try
            {
                File f = new File(pathOfFileToWrite);
                if (!f.exists()) {
                    f.createNewFile();
                }
                FileWriter fw = new FileWriter(pathOfFileToWrite, true);
                BufferedWriter output = new BufferedWriter(fw);
                output.write(DateUtils.getCurrentDate() + " " + lineToWrite + "\n");
                output.flush();
                output.close();
                fw.close();
            }
            catch(IOException ioe){
                ioe.printStackTrace();
                System.out.println("Impossible to write in " + pathOfFileToWrite + "file !");
            }
        }
    Si tu as des questions n'hésite pas !
    -----------------------------------------------------------------------------------------
    Don't play with fire if u don't wanna get burn ! Clinton - Fearon
    ____________________________________________________Pensez au

  3. #3
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2013
    Messages : 63
    Points : 154
    Points
    154
    Par défaut
    Merci, si j'ai bien compris ton code, j'appelle ta méthode avec deux arguments, le premier = ma ligne, le second mon fichier.

    J'insère cette appel à la fin de mon if pour que je lui dise quand l'écrire, si tu as une petite piste sur comment lui faire arrêter la copiela fin de ma copie
    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
     
    public static final void writeInFile (String lineToWrite, String pathOfFileToWrite) {
            try
            {
                File f = new File(pathOfFileToWrite);
                if (!f.exists()) {
                    f.createNewFile();
                }
                FileWriter fw = new FileWriter(pathOfFileToWrite, true); //permet de déclarer mon fichier destination
                BufferedWriter output = new BufferedWriter(fw);//mon tampon pour l'écriture
                output.write(lineToWrite + "\n");//écriture dans mon fichier
                output.flush();//nettoyage propre
                output.close();//fermeture de ma ressource
                fw.close();
            }
            catch(IOException ioe){
                ioe.printStackTrace();
                System.out.println("Impossible to write in " + pathOfFileToWrite + "file !");
            }
        }
    Si j'ai bien compris, elle fonctionne surper bien , mais il reste tout de même mon problème d'arrêt, je pourrais faire une copie jusqu'à ce que je trouve ma ligne de fin, mais ça va faire sale et me faire créer un autre fichier txt tampon, si quelqu'un a une bonne idée

    Merci Sennad, cette partie va à merveille.

  4. #4
    Membre éclairé Avatar de Sennad
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 180
    Points : 703
    Points
    703
    Par défaut
    Ma méthode permet juste d'écrire une ligne dans un fichier.
    Donc dès que tu as trouvé la ligne de ton fichier (code source du site) que tu veux écrire dans ton fichier réunion, tu appelles la méthode writeInFile(laLigneAEcrire, leCheminDuFichier).
    Donc pour "l'arrêt" c'est au niveau de ta boucle qui parcourt ton fichier (code source).
    Ca donnerait ca :

    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
    public static void reunion()
    	{
    		String aujourdhui = (date_jour.main(null)); //ceci est juste une méthde appelée qui me formate la date du jour avec ce format :dd-MM-yyyy
    		int pos1=0;
    		int pos2=0;
    	try
    		{
    		OutputStream output = new FileOutputStream("reunion.txt");
    		BufferedReader br = new BufferedReader (new FileReader("temp.txt"));
    		BufferedReader br2 = new BufferedReader (new FileReader("temp.txt"));
    		try
    			{
    			String ligne;//me permet de trouver la prmemière apparition de la date du jour
    			String ligne2;//utiliser pour la seconde boucle while
    			boolean reunionTrouve = false;
    			while ((ligne=br.readLine()) !=null)
    				{
    				if (reunionTrouve ==  false)
    					{
    					if ( ligne.indexOf(aujourdhui) != -1)//je recherche la ligne de la première apparition de la date du jour
    						{
    						reunionTrouve = true;
    						while ((ligne2=br2.readLine()) !=null)	//je fais une deuxième boucle mais en incluant un if pour ne copié qu'à partir de la date du jour
    							{
    								if (pos2 >=pos1) //copie à partir de la première apparaition de la date du jour
    									{
    									writeInFile(ligne2, "test/test/test");
    									System.out.println(ligne2); //ce que j'obtiens dans la console pour l'instant (voir seconde pièce jointe), mais je n'arrive pas trouver la syntaxe correcte pour l'écrire dans l'output, j'ai essayé les output.write ou print ouprintln avec ligne2 dans l'argument
    									}
    							pos2++;
    							}
    						}
    					}
    				pos1++;
    				}
    			}
    		finally
    			{
     
    			br.close();
    			br2.close();
    			}
    		}
    	catch (IOException ioe)
    		{
    		//fermeture des flux
    		System.out.println("Erreur --" + ioe.toString());
    		}
    	}
    En gros dès que tu trouves la ligne qu'il faut tu l'écrit dans le fichier. C'est ça que tu cherches non ?
    Ou alors j'ai mal compris ?
    -----------------------------------------------------------------------------------------
    Don't play with fire if u don't wanna get burn ! Clinton - Fearon
    ____________________________________________________Pensez au

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Sennad Voir le message
    Salut,

    Pour écrire dans un fichier tu peux utiliser cette méthode
    Euh, non. Merci de ne pas passer son temps à ouvrir/fermer des fichiers. Pendant qu'on y est, préciser l'encodage n'est pas du luxe, avec du HTML en français. Et enfin, c'est peut-être pas la peine de réinventer la roue.
    Voici une meilleure alternative :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static final void writeInFile (List<String> linesToWrite, String pathOfFileToWrite) throws IOException {
      Path path = Paths.get(pathOfFileToWrite);
      Files.write(path, linesToWrite, StandardCharsets.ISO_8859_1);
    }
    À appeler après avoir lu toutes les lignes. (Du coup y a pas vraiment besoin d'une méthode pour ça, celle fournie avec Java suffit largement.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre éclairé Avatar de Sennad
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 180
    Points : 703
    Points
    703
    Par défaut
    Ouais mais ça rajoute des contraintes.
    Il faut alors que tu créer un List<String> linesToWrite, et que t'y rajoute chaque ligne que tu veux écrire dans ton fichier, une fois que tu as fini de parcourir le fichier (code source) et donc que tu as fini de remplir la List, tu peux appeler la méthode en lui passant la List.
    Franchement ça ne fais pas une grande différence quand tu appelles la méthode 3/4 fois...
    C'est sûr que si tu dois appeler la méthode 100 fois, ou plus, effectivement ça commence a être un peu bourrin.. Seulement ce n’est pas son cas ici.
    Mais il faut pouvoir lister les lignes a écrire avant d'appeler la méthode, ce n’est pas toujours faisable.

    Ps : Je pense qu'un modérateur doit savoir expliquer ces idées humblement, sans essayer de rabaisser les autres, mais en expliquant avec respect pourquoi ça solution est meilleure que la/les autre/s...
    -----------------------------------------------------------------------------------------
    Don't play with fire if u don't wanna get burn ! Clinton - Fearon
    ____________________________________________________Pensez au

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Sennad Voir le message
    Ouais mais ça rajoute des contraintes.
    Il faut alors que tu créer un List<String> linesToWrite, et que t'y rajoute chaque ligne que tu veux écrire dans ton fichier, une fois que tu as fini de parcourir le fichier (code source) et donc que tu as fini de remplir la List, tu peux appeler la méthode en lui passant la List.
    Ouais enfin, la contrainte de construire une liste, hein... Si cette méthode existe de base dans Java 1.7 c'est pas par hasard -_-°.
    Mais admettons que la contrainte soit trop lourde, dans ce cas l'alternative que je propose n'est pas bonne, mais ma remarque reste : merci de ne pas passer son temps à ouvrir et fermer des fichiers.
    À la place :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public static final void writeInFile(Writer writer, String lineToWrite) throws IOException {
      writer.write(lineToWrite + "\n");
    }
    Et on garde le BufferedWriter tant qu'on a besoin d'écrire dedans. Du coup une méthode pour ça est encore plus redondante avec juste appeler write().

    Citation Envoyé par Sennad Voir le message
    Franchement ça ne fais pas une grande différence quand tu appelles la méthode 3/4 fois...
    C'est sûr que si tu dois appeler la méthode 100 fois, ou plus, effectivement ça commence a être un peu bourrin.. Seulement ce n’est pas son cas ici.
    Mais il faut pouvoir lister les lignes a écrire avant d'appeler la méthode, ce n’est pas toujours faisable.
    Les performances de ce cas précis ne sont pas la question. Le problème est d'avoir même imaginé d'ouvrir et fermer le fichier à chaque ligne. De faire comme si ce n'était pas une aberration en soi, comme si ça se faisait.
    Car là tu viens d'enseigner à quelqu'un à le faire.
    - D'une part tu as jamais précisé qu'il fallait pas le faire pour plus de trois ou quatre lignes,
    - d'autre part puisque dans la plupart des cas il ne faut pas le faire et que ça ne sert à rien de faire comme ça plutôt que comme il faut, alors pourquoi le faire, et pourquoi le montrer ?

    Il s'agit d'enseigner le B.A.-BA de la programmation, quand une pratique est mauvaise, on ne l'enseigne pas et quand on la voit on dit qu'elle est mauvaise.

    Citation Envoyé par Sennad Voir le message
    Ps : Je pense qu'un modérateur doit savoir expliquer ces idées humblement, sans essayer de rabaisser les autres, mais en expliquant avec respect pourquoi ça solution est meilleure que la/les autre/s...
    Moi aussi. Mais il n'y a pas de question d'humilité là-dedans. Que mon alternative ne s'adapte pas à tout les coups, c'est possible, mais elle n'est pas mauvaise en soi. Ce que tu as montré, l'est. C'est mauvais dans la plupart des cas et ce n'est jamais meilleur que ce qui est bien. Donc c'est mauvais tout court.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre éclairé Avatar de Sennad
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 180
    Points : 703
    Points
    703
    Par défaut
    C'est fou comme les gens de nos jours montent sur leurs grands chevaux dès qu'ils ont quelque chose de meilleur qu'un autre.
    Je n’ai jamais dit que ta solution n’était pas bonne.
    Je n’ai jamais dit que ma solution était la meilleure.
    Alors pourquoi être agressif comme ça dès le premier post ? Tu es modérateur, tu n'es pas là pour montrer que tu sais plus que les autres, tu es là pour aider non ?
    Ya pas que celui qui pose une question qui a des choses à apprendre, y a également ceux qui répondent (toi y compris). Alors c'est sûr qu'on peut toujours trouvé mieux, mais ce n’est pas pour ça qu'il faut prendre les autres pour des mer...
    quand une pratique est mauvaise, on ne l'enseigne pas et quand on la voit on dit qu'elle est mauvaise.
    Bien sûr, sauf que tu as oublié un point essentiel.
    C'est bien beau de dire que la solution est mauvaise, regarde la mienne est meilleure, mais il faut également expliquer pourquoi l'autre solution est mauvaise.
    Tu as dit qu’il ne fallait pas fermer et rouvrir le fichier à chaque ligne, et tu as également dit que ce n'étais pas pour des questions de performances, alors explique nous, moi j'ai envie de savoir pourquoi ce que j'ai fait n’est pas bon, je n’ai pas envie qu'on me traite comme de la bouze alors que je propose de l'aide.
    -----------------------------------------------------------------------------------------
    Don't play with fire if u don't wanna get burn ! Clinton - Fearon
    ____________________________________________________Pensez au

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    On est pas là pour parler de mon status de modérateur. Je pense que tu te trompes, mais si tu veux savoir pourquoi, tu le demanderas par message privé.
    Ici on parle technique.

    Citation Envoyé par Sennad Voir le message
    Bien sûr, sauf que tu as oublié un point essentiel.
    C'est bien beau de dire que la solution est mauvaise, regarde la mienne est meilleure, mais il faut également expliquer pourquoi l'autre solution est mauvaise.
    Tu as dit qu’il ne fallait pas fermer et rouvrir le fichier à chaque ligne, et tu as également dit que ce n'étais pas pour des questions de performances, alors explique nous, moi j'ai envie de savoir pourquoi ce que j'ai fait n’est pas bon, je n’ai pas envie qu'on me traite comme de la bouze alors que je propose de l'aide.
    Hum. Alors ok je suis désolé, mais en même temps on n'est pas dans la section débutant, et t'as tout de même une étoile.
    Il m'est pas venu à l'idée que quelqu'un ne se douterait pas, après qu'on en ai parlé, pourquoi il ne faut pas ouvrir et fermer un fichier à chaque ligne.

    En gros ça stresse à mort les IO filesystem et rend parfaitement inutiles un sacré paquet de systèmes de caches. Si un programme faisait ça pour écrire ses logs, il y passerait un temps monumental, et le système de fichier passerait son temps à traquer les synchronisations à faire.
    Donc oui bien sûr, c'est des questions de performance. Mais tu me dis "mais là pour son programme on s'en tape des performances." Certes. C'est toujours le cas pour tous les exemples, on s'en tape des performances. Mais il faut apprendre comment on fait, dans les cas où on s'en tape pas. C'est à dire dans les cas où on va avoir le même besoin - écrire des lignes dans un fichier - et où on s'en tape pas des performances - parce que écrire des lignes dans un fichier, on le fera tout le temps.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2013
    Messages : 63
    Points : 154
    Points
    154
    Par défaut
    Merci Sennad et merci Telvin, je garde la première méthode où il faut ouvrir et faire le fichier pour les cas où je sais qu'il n'y a qu'une ligne à transférer, comme il a dit, faire un tableau lorsque je sais qu'il n'y a qu'une ligne n'est pas des plus utiles, mais dans mon cas, je vais préférer la liste, ce qui donne :
    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
    54
    55
    56
    57
    58
     
    public static void reunion()
    	{
    		String aujourdhui = (date_jour.main(null));
    		int pos1=0;
    		int pos2=0;
    	try
    		{
    		//OutputStream output = new FileOutputStream("reunion.txt");
    		ArrayList<String> copie = new ArrayList<String>(); 
    		BufferedReader br = new BufferedReader (new FileReader("temp.txt"));
    		BufferedReader br2 = new BufferedReader (new FileReader("temp.txt"));
    		try
    			{
    			String ligne;
    			String ligne2;
    			boolean reunionTrouve = false;//initialisation  
    			boolean finTrouve =false;//initialisation
    			while ((ligne=br.readLine()) !=null)
    				{
    				if ((reunionTrouve ==  false)||(finTrouve==false)) //pour activer la copie, si la reunion n'est pas trouvé ou si la fin n'est pas trouvé
    					{
    					if ( ligne.indexOf(aujourdhui) != -1)
    						{
    						reunionTrouve = true;
    						while ((ligne2=br2.readLine()) !=null)	
    							{
    								if (pos2 >=pos1)
    									{
    									if ( ligne2.indexOf("</div></div>") != -1)//je rajoute se test de condition, en gros ma copie doit s'arreter, lorsque je tombe sur le "</div></div>" qui est juste après mes lignes à copier
    									{	
    										finTrouve=true;// si trouvé, je passe finTrouve en true
    										break;//je casse la boucle whille
    									}
    									else
    										//écriture
    										copie.add( ligne2 );//rajout dans la liste
    									}
    							pos2++;
    							}
    						}
    					}
    				pos1++;
    				}
    			}
    		finally
    			{
    			copie_ligne_txt.liste_par_liste(copie, "reunion.txt");//fonctionne , me marque une exception à la fin tout de même, mais pas de soucis
    			br.close();
    			br2.close();
    			}
    		}
    	catch (IOException ioe)
    		{
    		//fermeture des flux
    		System.out.println("Erreur --" + ioe.toString());
    		}
    	}
    Sur le papier, cela devrait fonctionner mais sur le papier seulement

  11. #11
    Membre éclairé Avatar de Sennad
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 180
    Points : 703
    Points
    703
    Par défaut
    Salut,

    Une fois finTrouvee==true il faut appeler la méthode qui va écrire dans le fichier (en lui passant en paramètre ta List).
    Tu l’as fait dans le finally, mais tu dis qu'il y a tout de même une exception ?
    Qu'el est le problème? Tu peux nous mettre la sortie console? Ou le message de l'exception ?

    Ta méthode liste_par_liste c'est celle-là ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static final void writeInFile (List<String> linesToWrite, String pathOfFileToWrite) throws IOException {
      Path path = Paths.get(pathOfFileToWrite);
      Files.write(path, linesToWrite, StandardCharsets.ISO_8859_1);
    }


    ps : Merci Telvin pour ton explication
    -----------------------------------------------------------------------------------------
    Don't play with fire if u don't wanna get burn ! Clinton - Fearon
    ____________________________________________________Pensez au

  12. #12
    Membre éclairé Avatar de Sennad
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 180
    Points : 703
    Points
    703
    Par défaut
    Désolé zigomato de poser ma question ici mais ça peut t'être utile aussi du coup !

    Thelvin, j'ai dev un programme en java qui écrit de temps en temps une ligne dans un fichier, jamais plus d'une à la fois.
    Il écrit en fonction de ce qu'il se passe, c'est une boucle qui parcourt des fichier, le programme tourne environ une semaine avant d'être fini (Oui ya beaucoup beaucoup de fichiers ) et j'utilisai la méthode que j'ai donné à zigomato au début, pour écrire mes logs (entre autre)..
    Donc du coup j'ai essayé de réfléchir au problème qu'on a vu ensemble hier.
    J'ai donc changer un peu ma méthode, mais je pense que le problème reste le même, et je ne peux pas mettre mes lignes dans une List avant, puisque souvent c'est dans le catch que je log par exemple..
    Donc du coup j'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public static final void writeFile (String lineToWrite, String pathOfFileToWrite) {
            try
            {
                Writer writer = new FileWriter(pathOfFileToWrite);
                writer.write(lineToWrite);
                writer.flush();
                writer.close();
            }
            catch(IOException ioe){
                ioe.printStackTrace();
                System.out.println("Impossible to write in " + pathOfFileToWrite + "file !");
            }
        }
    Mais le problème reste le même non ?
    Merci..
    -----------------------------------------------------------------------------------------
    Don't play with fire if u don't wanna get burn ! Clinton - Fearon
    ____________________________________________________Pensez au

  13. #13
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2013
    Messages : 63
    Points : 154
    Points
    154
    Par défaut
    oui Sennad, du coup, j'ai privilégié la gestion par la liste car le nombre de réunion change chaque jour, et pour chaque reunion, il y a plusieurs course, mon but, extraire dans un premier temps les réunions et les courses (de chacune), mettre ça dans ue table SQL, après sur un autre site, récupérer les partant, mettre un jour un tableau avec les information de l'autre site, dévolepper une petite méthode, déjà fonctionnel en vba. En gros utiliser les statistiques pour prévoir l'arrivée des courses, mais pour ça il me faut un nombre important de données collecté tous les jours et pour toute les courses, donc pour l'instant, sans rien y connaitre, j'arrive à déterminer au moins 2-3 chevaux minimum pour le quinté et ce à chaque course, donc j'ai bonne espoir. Après pourquoi le java, car je ne suis pas égoiste et je travaille sur un petite site web où je viendrai mettre ça.
    Revenons à nos moutons, j'ai mis l'appelle de la méthode avant le break, mais rien est copié comme quand c'était dans finally, donc deux possibilités :
    - soit la méthode ne marche pas (mais je l'ai testé et elle a fonctionné) => le problème n'est pas là
    - soit la condition pour arrivé jusqu'à l'écriture dans la liste n'est jamais atteinte
    - soit (car quand il n'y a que deux possibilités, une troisième existe), on arrive jamais jusqu'à l'appel de la méthode


    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
    54
    55
    56
    57
    58
    59
     
    public static void reunion()
    	{
    		String aujourdhui = (date_jour.main(null));
    		int pos1=0;
    		int pos2=0;
    	try
    		{
    		//OutputStream output = new FileOutputStream("reunion.txt");
    		ArrayList<String> copie = new ArrayList<String>(); 
    		BufferedReader br = new BufferedReader (new FileReader("temp.txt"));
    		BufferedReader br2 = new BufferedReader (new FileReader("temp.txt"));
    		try
    			{
    			String ligne;
    			String ligne2;
    			boolean reunionTrouve = false;
    			boolean finTrouve =false;
    			while (((ligne=br.readLine()) !=null))
    				{
    				if ((reunionTrouve ==  false)||(finTrouve==false))
    					{
    					if ( ligne.indexOf(aujourdhui) != -1)
    						{
    						reunionTrouve = true;
    						while ((ligne2=br2.readLine()) !=null)	
    							{
    								if (pos2 >=pos1)
    									{
    									if ( ligne2.indexOf("</div></div>") != -1)
    									{	
    										finTrouve=true;
    										copie_ligne_txt.liste_par_liste(copie, "reunion.txt");//l'écriture quand la fin est trouvé, mais ça n'écris rien
    										break;
    									}
    									else
    										//écriture
    										copie.add( ligne2 );
    									}
    							pos2++;
    							}
    						}
    					}
    				pos1++;
    				}
    			}
    		finally
    			{
    			//copie_ligne_txt.liste_par_liste(copie, "reunion.txt");
    			br.close();
    			br2.close();
    			}
    		}
    	catch (IOException ioe)
    		{
    		//fermeture des flux
    		System.out.println("Erreur --" + ioe.toString());
    		}
    	}
    PS : comment faire un déroulement pas à pas sur eclipse ?

  14. #14
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2013
    Messages : 63
    Points : 154
    Points
    154
    Par défaut
    Personne pour me venir en aide et réussir à placer correctement ma ligne de code et ma condition pour que ma boucle cesse ?? et so quelqu'un connais la fonction pas à pas d'eclipse?

  15. #15
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Ce que tu appelles "exécuter pas à pas" est ce qu'on appelle "exécuter en mode débogage" (ou "exécuter en mode debug") : ici, un tutoriel qui date un peu (donc l'apparence graphique est légèrement différent dans les dernières versions d'Eclipse, mais tout reste valable et on s'y retrouve assez facilement, les icônes étant relativement similaires). Commences par regarder le chapître "8.3. Mise en oeuvre du débogueur".
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  16. #16
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2013
    Messages : 63
    Points : 154
    Points
    154
    Par défaut
    Merci Joël, je fais ça, je clos le sujet, je devrais trouver la cause de la non exécution de ma ligne de code, du coup, je mets se sujet en résolu.

    Merci à tous, à la prochaine.

  17. #17
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2013
    Messages : 63
    Points : 154
    Points
    154
    Par défaut
    Juste pour information, grâce au debug, j'ai pu trouver pourquoi ça ne copier pas, la chaine d'arrêt pour ma boucle était mal définiE

    cordialement

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

Discussions similaires

  1. Comment trouver une chaine de caractère dans fichier texte
    Par youssef1989 dans le forum Débuter
    Réponses: 3
    Dernier message: 01/05/2008, 16h45
  2. Réponses: 8
    Dernier message: 25/03/2008, 10h42
  3. rechercher une chaine de caractère dans un fichier
    Par 3FHFEB dans le forum Langage
    Réponses: 1
    Dernier message: 26/10/2006, 11h13
  4. Réponses: 9
    Dernier message: 07/09/2006, 13h47

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