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 :

[JAVA 1.4] Supprimer caractère dans fichier


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Par défaut [JAVA 1.4] Supprimer caractère dans fichier
    Hello les gens,
    J'aurais besoin de modifier un fichier csv pour y supprimer toutes les occurences du separateur ";"
    J'aimerai autant que possible éviter de réinventer la roue s'il ya une api pour faire cela.
    Merci pour toutes vos contribution.

  2. #2
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    En tout cas il n'y a rien de tel dans l'API Java standard, ni dans les bibliothèques que je connais.

    Je pense n'échapperas pas à une lecture du fichier et réécriture dans un autre en ignorant les ";".

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338
    Par défaut
    A ma connaissance il n'y a pas une API java pour ton besoin.
    Si tu peux juste remplacer le caractère ';' par un ' ' (espace) ou un caractère non imprimable alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    1-sauvegarder la position de ta lecture avec RandomAccessFile#getFilePointer()
    2-Lire ton fichier par morceau avec read(byte[BUF_SIZE])
    3-Remplacer les ';' par ' ' 
    4- Ecrire ton buffer à la position sauvegardée
    5- Revenir à l'étape 1 tant que non EOF.
    NB:Comme l'a mentionné thelevin cette méthode n'est valable que si ton fichier utilise un encodage sur 8bits (ASCII, ISO latin 1...)
    A++

  4. #4
    Membre éprouvé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Par défaut
    hmm... l'objet RandomAccessFile possède une méthode seek et mon fichier est constitué de champs de longueurs fixes, je pense pouvoir me débrouiller avec ??!?

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    - Je ne vois pas le rapport avec seek().

    - utiliser un RandomAccessFile permet de modifier un fichier en lecture/écriture au lieu de lecture seule ou écriture seule, ce qui peut paraître bien... Mais là ce que tu veux c'est enlever des octets. À chaque fois que tu vas enlever un octet, tous les octets suivants vont devoir être décalés d'un vers la gauche.
    De nos jours les OSs sont des supermans et gèrent ça très bien, mais ça reste extrêmement inefficace.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre éprouvé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Par défaut
    je pensais à quelque chose dans ces eaux là:
    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
    RandomAccessFile raf = null;
    try {
    	raf = new RandomAccessFile(XIMPORTFilePath, "rw");
    	String ligne;
    	while ((ligne = raf.readLine()) != null) {
    	//les ";" se situent toujours aux position '7' '24' et '222' par exemple
    	raf.seek(7);
    	raf.writeChars("");
    	raf.seek(24);
    	raf.writeChars("");
    	raf.seek(222);
    	raf.writeChars("");
    	//Comment passer à la ligne suivante ?
    	}
     
    } catch (Exception e6) {
    	// TODO Bloc catch auto-généré
    	e6.printStackTrace();
    } finally {
    	raf.close();
    }

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    En shell script il y a sed. C'est pas du Java, mais c'est fait pour ça et ça évite de réinventer la roue.

    En pratique ce n'est qu'une simple question de remplacement de regex (même moins que ça, en fait,) mais en Java je ne connais pas de bibliothèque pour faire ça sur un fichier.

    Un truc que tu peux faire, c'est juste ouvrir un BufferedInputStream de ton fichier, lire les octets les uns après les autres, et réécrire dans un OutputStream d'un autre fichier, tout ce qui n'est pas égal à ';'
    Puis effacer le fichier qui vient d'être lu, et renommer le fichier qui vient d'être écrit à sa place.
    (Cette méthode ne marche que si l'encodage du fichier est un charset étendant l'ASCII mono-octet. Dans le cas contraire, il vaut mieux travailler sur un BufferedReader.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ 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. [Borland 6] Supprimer caractère dans fichier
    Par grmi91 dans le forum C++Builder
    Réponses: 1
    Dernier message: 16/04/2007, 16h18
  3. Supprimer lignes dans fichier texte
    Par dr_octopus74 dans le forum VBScript
    Réponses: 1
    Dernier message: 20/02/2007, 17h54
  4. [FPDF] Recherche chaine caractères dans fichier pdf
    Par licorne dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 28/10/2005, 11h55
  5. chaines de caractères dans fichier .rc ou .res
    Par raggadoll dans le forum C++Builder
    Réponses: 5
    Dernier message: 22/03/2004, 15h19

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