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

Entrée/Sortie Java Discussion :

Extraction d'enregistrements dans un fichier


Sujet :

Entrée/Sortie Java

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Octobre 2007
    Messages : 27
    Points : 17
    Points
    17
    Par défaut Extraction d'enregistrements dans un fichier
    Bonjour. Puisque la question est dans ce forum, c'est que je suis un gros noob en java , donc je peux parler sans pudeur :

    je voudrais lire un fichier .txt enregistrement par enregistrement et, selon un critère de contenu, soit le garder, soit l'enlever pour l'écrire dans un autre fichier.

    C'est à dire en images :
    lire fichierIn
    Tant que non Fin de fichier fichierIn {
    si (condition remplie){
    garder enregistrement
    } sinon {
    écrire enregistrement dans fichierOut
    }
    lire fichier In
    }


    Lire et écrire ne me posent pas de pbs, mais je ne sais pas comment enlever l'enregistrement : la classe BufferedReader n'a pas de méthode Delete()..

    Y a t'il une autre voie que input et output ? update ? je m'en voudrais de ré écrire sous un autre et de devoir faire une copie après...

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Tu ne peux pas aussi simplement modifier un fichier que tu es en train de lire.
    Ecrire un fichier en cours de lecture est possible via la classe RandomAccessFile, mais elle ne permet pas d'effacer une ligne (un enregistrement) que tu as déjà lu.

    L'algorithme le plus simple (et certainement le plus efficace) pour faire ce que tu veux est:
    - de lire ton fichier
    - de copier les enregistrements à garder dans sortie1
    - de copier les enregistrements à déplacer dans sortie2
    - une fois le traitement terminé, sortie1 est renommé en écrasant le fichier d'entrée

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Octobre 2007
    Messages : 27
    Points : 17
    Points
    17
    Par défaut
    Ok, merci pour ta réponse, CyberChouan.

    Par contre, je ne vois pas comment faire pour renommer sortie1 en écrasant le fichier d'entrée...

    on doit avoir un truc du genre :
    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
     
    FileWriter     ficOut1     = null;
    BufferedWriter bwOut1      = null;
    FileWriter     ficOut2     = null;
    BufferedWriter bwOut2      = null;
    FileReader     ficStock   = null;
    BufferedReader brStock    = null;
     
    try {
    	ficOut1        = new FileWriter("ANCSTOCK.TXT");
    	bwOut1         = new BufferedWriter(ficOut);
    	ficOut2        = new FileWriter("NOUVSTOCK.TXT");
    	bwOut2         = new BufferedWriter(ficOut);
    // lecture fichier stock
    	ficStock      = new FileReader("StockEntree");
    	brStock       = new BufferedReader(ficStock);
    	String chaine = brStock.readLine();
    	while (chaine != null) {
    // Aiguillage : on écrit soit dans l'un, soit dans l'autre
    		if (condition  remplie) {
    			bwOut1.write(chaine);
    			bwOut1.newLine();
    		} else {
    			bwOut2.write(chaine);
    			bwOut2.newLine();
    		}
    // lecture enreg suivant
    		chaine = brStock.readLine();
    	}
    } catch (FileNotFoundException e1) {
    	e1.printStackTrace();
    } finally {
    	try {
    		ficStock = ficOut1;
    		bwOut1.flush();
    		bwOut1.close();
    		bwOut2.flush();
    		bwOut2.close();
    		ficOut1.close();
    		ficOut2.close();
    		if (ficStock != null) {
    			ficStock.close();
    		}
    	} catch (IOException e) {
    // TODO Bloc catch auto-généré
    		e.printStackTrace();
    	}
    }
    Qu'en penses tu ?

    Merci

  4. #4
    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
    avec File.delete() tu supprime l'ancien, avec file.move() tu change le nom de ton fichier temporaire en le nom de l'ancien.

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Octobre 2007
    Messages : 27
    Points : 17
    Points
    17
    Par défaut
    Ok, je vais essayer. Merci.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/09/2005, 17h47
  2. comment ne pas enregistrer dans le fichier log?
    Par trotters213 dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 21/03/2005, 14h56
  3. [LG]Enregistrements dans un fichier
    Par ticoude dans le forum Langage
    Réponses: 1
    Dernier message: 26/11/2004, 18h33
  4. [LG]supprimer un enregistrement dans un fichier
    Par Marcus2211 dans le forum Langage
    Réponses: 10
    Dernier message: 17/11/2003, 00h59
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17

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