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

Servlets/JSP Java Discussion :

Suppression de ligne dans un fichier txt


Sujet :

Servlets/JSP Java

  1. #1
    Membre éclairé Avatar de charlix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 285
    Par défaut Suppression de ligne dans un fichier txt
    Bonjour,

    Je suis en train de concevoir une servlet qui gère un collecton de livres dans un fichier txt.

    Et mon problème vient lorsque je souhaites supprimer des enregistrements dejà écris dans le fichier txt. J'ai écris un programme qui cherche le livre a modifier dans le fichier txt, cela fonctionne et me renvoit le numéro de la ligne en question. Ca c'est niquel mais je ne sais pas comment faire pour supprimer les lignes en question après.

    Quelqu'au aurait une idée ?

    merci d'avance

    Charlie

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    y a pas de miracle, faut réécrire tout le fichier.

  3. #3
    Membre éclairé Avatar de charlix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 285
    Par défaut
    Merci de ta réponse.

    Donc il faudrait copier toutes les lignes dont j'ai besoin dans un autre fichier. Supprimer l'ancien fichier et renommer le nouveau fichier avec le nom de l'ancien ? Tout cela est possible ?

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    ben oui c'est possible

  5. #5
    Membre éclairé Avatar de charlix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 285
    Par défaut
    Je suis en train d'essayer tout cela. Si je bloque, je repasserais.

  6. #6
    Membre éclairé Avatar de charlix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 285
    Par défaut
    En fait, j'ai quelque soucis.

    Déjà, le premier est que dans mon fichier txt où les livres sont enregistrés possède des saut de lignes entre chaque enregistrements. Donc en fait le numéro de la ligne que je reçoit avec ma variable i n'est pas bon. Et je ne sais pas comment faire pour prendre en compte ces sauts de lignes.

    voici un exemple d'enregistrement dans mon fichier txt :

    Titre : gregr
    Isbn : fregfd
    Auteur : gfdqgfdq
    Année : 235
    Nombre de pages : 346
    Prix : 356


    Titre : test
    Isbn : ghtraehta
    Auteur : htezhtz
    Année : 15641
    Nombre de pages : 247637
    Prix : 235652

    PS: le programme doit supprimer un enregistrement de livre donc 6 lignes plus un espace.

    Le deuxième soucis est que je ne sais pas comment dire aux flux d'écriture de ne prendre que les lignes que je souhaite. J'ai essayé avec une boucle for() mais sans résultats.

    Voici mon programme qui fonctionne avec un compte du nombre de lignes erroné pour la recherche du titre du livre et qui copie l'ensemble du fichier.

    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
     
    boolean result = false;
            int j=0;
     
         try
           {
     
           lecteurAvecBuffer = new BufferedReader(new FileReader("collection_livres.txt"));
     
           int i = 1; //initialisation du numero de ligne
     
           while ((line = lecteurAvecBuffer.readLine()) != null)
           {
             if ( line.indexOf(recherche) != -1)
             {
            	 out.println("La recherche que vous avez effectuée a été trouvée à la ligne " + i + " du fichier de votre collection de livres");
            	 result = true;
             }
             i++;
             i=j;
           }
     
           lecteurAvecBuffer.close();
     
           }
     
         catch(FileNotFoundException exc) { System.out.println("File not found" );  }
         catch(IOException ioe) { System.out.println("Erreur IO" ); }
     
         if(result == false)
         {
        	 out.println("La recherche que vous avez effectuée n'a pas été trouvée dans le fichier de votre collection de livres");
         }
     
         int i;
    		try{
    			//création des flux
    			BufferedInputStream entree=new BufferedInputStream(new FileInputStream("collection_livres.txt"));
    			try{
    				BufferedOutputStream sortie=new BufferedOutputStream(new FileOutputStream("copie_collection_livres.txt"));
    				//copie du fichier
    				try{
    					while((i=entree.read())!=-1) {
    						sortie.write(i);
    					}
    					//forcer l'ecriture du contenu du tampon dans le fichier
    					sortie.flush();
    				}finally{
    					//fermeture de sortie
    					sortie.close();
    				}
    			}
    			finally{	
    				//fermeture de entree
    				entree.close();
    			}
    		}
    		catch(IOException e){System.out.println(e);
    		}

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Tu prend le point de départ et le point final de ton fichier d'origine (c'est à toi de les mesurer en comptant les lignes hein), ensuite, tu lit ton fichier d'origine ligne par ligne et tu écrit chaque ligne dans le fichier de destination, sauf celles que tu veux pas écrire dedans, rien de bien compliqué en somme.

  8. #8
    Membre éclairé Avatar de charlix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 285
    Par défaut
    Ouai, ça j'ai compris la pratique, mais la théorie je ne suis pas encore arrivé. Mon poroblème est que pour supprimer l'enregistrement en question (c'est l'utilisateur qui rentre le titre du livre, et donc ce n'est jamais la même chose à supprimer) il me faut rechercher ou l'enregistrement est a modifier ou supprimer, la recherche fonctionne mais il ne prend pas en compte les sauts de lignes. Donc dèjà sans avoir précisement l'endroit a supprimer dans le fichier, je ne peut pas savoir ce qu'il faut supprimer.

    C'est cela qui me pose probleme.

  9. #9
    Membre éclairé Avatar de charlix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 285
    Par défaut
    En fait, si c'est bon j'ai trouvé une solution à mon premier soucis, j'ai compté le nombre de fois qu'il y avait "Titre" avant la recherche du titre du livre et donc maintenant j'ai le bon emplacement ou ca doit supprimer.

    J'essai encore et si je n'y arrive vraiment pas je vous demanderais un coup de pied.

  10. #10
    Membre éclairé Avatar de charlix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 285
    Par défaut
    Je ne m'en sort pas. Pour moi, il faudrait faire 2 boucles for() pour écrire ce qu'il y a avant les lignes a effacer puis ce qu'il y a avant. Mais je n'arrive même pas à écrire ce qu'il y a avant donc jusqu'a la ligne j.

    voici mon 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
     
         int i;
    		try{
    			//création des flux
    			BufferedInputStream entree=new BufferedInputStream(new FileInputStream("collection_livres.txt"));
    			try{
    				BufferedOutputStream sortie=new BufferedOutputStream(new FileOutputStream("copie_collection_livres.txt"));
    				//copie du fichier
    				try{
     
    					while((i=entree.read())!=-1) {
    						for(i=1;i<j;i++){
    						sortie.write(i);
    						}
    					}
     
    					//forcer l'ecriture du contenu du tampon dans le fichier
    					sortie.flush();
    				}finally{
    					//fermeture de sortie
    					sortie.close();
    				}
    			}
    			finally{	
    				//fermeture de entree
    				entree.close();
    			}
    		}
    		catch(IOException e){System.out.println(e);
    		}
    J'ai aussi essayé sans la boucle while, mais je pense que je manque quelque chose avec la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    i=entree.read())!=-1
    PS:avec mon code le flux de sortie est vide.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    c'est pas plus simple de faire une logique comme çà?:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Lire un bloc complet (plusieurs lignes)
    Si le bloc ne correspond pas à la recherche, écrire le bloc dans le fichier destination
    Recommencer avec le bloc suivant
    t'as juste à écrire un méthode qui lit un bloc de donnée dans un bean, vérifier si le bean correspond, et décider d'après çà, si oui ou non tu l'exrit dans le fichier destination.

  12. #12
    Membre éclairé Avatar de charlix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 285
    Par défaut
    Ca pourrais être une solution, mais je ne me suis pas encore attaqué aux java beans. Je ne sais pas du tout comment cela fonctionne mais je vais regarder cela.

    Et sinon pour ne pas me coucher trop stupide pourquoi est ce que ma méthode ne fonctionne pas ? Il y a rien dans le flux de sortie ?

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while((i=entree.read())!=-1) {
    						for(i=1;i<j;i++){
    						sortie.write(i);
    						}
    					}
    Je sais pas ce que vaut j, mais à lire çà, pour chaque caratère lu dans le inputstream, tu écrit 1 2 3 4 5 6 7 .... dans la sortie, çà m'a l'air assez loin d'un logique de recopie:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    BufferedReader reader = ...... ; //TODO
    PrintWriter writer = .....;   //TODO
    String buffer;
    while (buffer=reader.readLine()!=null)
        writer.println(buffer);
    writer.close();

  14. #14
    Membre éclairé Avatar de charlix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 285
    Par défaut
    Ouai, je n'avais pas toute à fait compris ce que je fesait avec la méthode read. J'ai trouvé comment faire avec readLine(). Maintenant cela fonctionn niquel, merci de ton aide.

    Là je suis en train de me renseigner sur la suppression de fichier et le renommage de fichier.

  15. #15
    Membre éclairé Avatar de charlix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 285
    Par défaut
    oups j'ai oublié de poster mon code pour ceux que cela intéresse.

    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
     
    try{
    		     BufferedReader entree =null;
    		     BufferedWriter sortie = null;
     
    			entree=new BufferedReader(new FileReader("collection_livres.txt"));
    			try{
    				sortie=new BufferedWriter(new FileWriter("copie_collection_livres.txt"));
     
    				try{
     
    					String aLine;
    					int i=1;
    					int nombre_enreg = 7;
     
    					while((aLine=entree.readLine()) != null) {
     
    						if( (i<enregAsuppr) || (i>(enregAsuppr+nombre_enreg)) )
    						{
    							sortie.write(aLine,0, aLine.length());
    							sortie.write("\n");
    						}
    						i++;
     
    					}
     
    					sortie.flush();
     
    				}finally{
    					//fermeture du flux de sortie
    					sortie.close();
    				}
    			}
    			finally{	
    				//fermeture du flux d'entree
    				entree.close();
    			}
    		}
    		catch(IOException e){System.out.println(e);
    		}

  16. #16
    Membre éclairé Avatar de charlix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 285
    Par défaut
    Ca a marché niquel pour changer le nom du nouveau fichier avec l'ancien et de supprimer le fichier obsolet.

    voici mon code pour ceux que cela intéresse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    				File MyFile = new File("collection_livres.txt");
    				MyFile.delete();
     
    				File MyNewFile=new File("copie_collection_livres.txt"); 
    				MyNewFile.createNewFile(); 
    				MyNewFile.renameTo(new File("collection_livres.txt"));

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

Discussions similaires

  1. Suppression d'une ligne dans un fichier .txt
    Par hamidou sow dans le forum C++
    Réponses: 9
    Dernier message: 24/04/2014, 22h43
  2. Suppression d'une ligne dans un fichier txt
    Par EvaristeGaloisBis dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/07/2007, 17h58
  3. nbr de lignes dans un fichier txt
    Par ibtisss dans le forum Langage
    Réponses: 3
    Dernier message: 04/11/2005, 15h09
  4. Suppression de lignes dans un fichier sous dos
    Par ducho dans le forum Windows
    Réponses: 2
    Dernier message: 16/05/2005, 10h20
  5. Suppression de lignes dans un fichier
    Par bubu dans le forum Linux
    Réponses: 2
    Dernier message: 13/01/2005, 10h36

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