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 :

Ajouter une colonne à un fichier txt ou csv en Java


Sujet :

Entrée/Sortie Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2019
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Ajouter une colonne à un fichier txt ou csv en Java
    Bonjour,
    j'ai un fichier de sortie type csv avec des colonnes (N°, Sexe, DatedeNaissance,Prenom, Nom) et je cherche à ajouter une colonne doublons à ce fichier de sortie mais je ne sais pas quelle classe utiliser.

    Merci si vous avez des pistes....ou des exemples de code

  2. #2
    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,

    Il y a trois problématiques :

    1. lire, manipuler et écrire du csv
      1. tu peux utiliser une bibliothèque dédiée comme Apache Commons CSV, avec trois
        classes principales, CSVParser pour lire, CSVRecord pour manipuler chaque lignes, CSVPrinter pour écrire des lignes.
      2. Un CSV étant un fichier texte de lignes de valeurs séparées par des virgules, on peut
        1. le lire et l'écrire avec java.nio2.Files
          • on peut lire toutes les lignes pour les mettre dans une liste par exemple (méthode readAllLines())
          • si le fichier est très grand et qu'il faut éviter de le charger entier en mémoire, on peut le lire ligne à ligne pour traiter les lignes séparément et les réécrire séparément, avec la classe java.io.BufferedWriter ou la classe java.io.PrintWriter.
            Mais comme on ne peut déterminer si une ligne est un doublon sans lire toutes les autres lignes, on sera obligé de lire plusieurs fois le fichier : un première fois pour déterminer les doublons, on seconde fois pour écrire les lignes avec la colonne supplémentaire. Avec un grand nombre de doublons, on risque de charger quand même beaucoup de lignes. On peut aussi lire autant de fois que de lignes, mais ça peut prendre beaucoup de temps.
        2. le lire et l'écrire avec java.io.BufferedReader et java.io.BufferedWriter ou la classe java.io.PrintWriter
    2. détecter les doublons
      1. on peut simplement comparer les lignes, des String, directement avec un equals()
      2. s'il faut comparer valeurs à valeurs, éventuellement avec des traitements (comme ignore les espaces, la casse, etc), la bibilitohèque donnera un accès direct aux valeurs de chaque colonne. Sans la bliothèque on peut diviser une String avec la méthode split(), ou utiliser Pattern pour faire des comparaison par expressions régulières

      Ensuite pour déterminer si une ligne est un doublon, on peut utiliser un Set. Si une ligne est déjà dans le Set, alors elle est un doublon, sinon on l'écrit dans le Set.

    3. ajouter une colonne pour y caractériser la ligne comme doublon
      1. le traitement via la bibliothèque Apache Commons oblige à transformer le CSVRecord en List par exemple puis à ajouter une valeur à la Liste et à écrire cette liste (CSVPrinter).
      2. le traitement sans la bibliothèque, on peut simplement ajouter après avoir écrit la ligne mais avant d'écrire le séparateur de ligne, les caractères nécessaires (une virgule, puis la valeur caractérisant la ligne comme doublon
        1. on peut caractériser la ligne avec un simple booléen, ou une valeur, par exemple "doublon"
        2. on peut vouloir connaître la liste des lignes qui sont la même que cette ligne, donc une liste de numéro de lignes
          1. donc soit simplement un compteur (int), qu'on associe à chaque ligne, et qu'on stocke dans une List
          2. si on charge toutes les lignes, on peut utiliser via Stream, un Collector de type grouping pour obtenir directement une Map<classe qui représente les valeurs, classe qui donne la liste des numéros), qui donne les doublons naturellement, sous forme de LinkedHashMap, pour conserver l'ordre.
            |*]s'il existe une colonne d'identifiant (tu parles de N°, donc c'est à priori le cas), il peut servir à la place du numéro. Il faudra juste ne pas en tenir compte lors des comparaisons évidemment (soit on ignorant la colonne si on a diviser la ligne en colonnes, soit en tenant compte dans l'expression régulière, ou par les méthodes de String (indexOf, substring, etc).





    Enfin tu parles de fichier de sortie : qu'est-ce qui produit ce fichier ? Le traitement de doublons est peut être souhaitable avant de le produire. Mais ça, ça dépend complètement de la façon utilisée pour générer ces informations.
    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.

Discussions similaires

  1. C++ : Ajouter une ligne à un fichier txt
    Par rattlesnake dans le forum C++
    Réponses: 9
    Dernier message: 11/09/2014, 17h05
  2. [Toutes versions] Ajouter une colonne dans un fichier dbf à partir d'ACCESS
    Par loufab dans le forum Contribuez
    Réponses: 2
    Dernier message: 13/05/2012, 13h07
  3. Ajouter une colonne à un fichier csv contenant les resultats d'un calcul
    Par Freedd dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 31/07/2008, 12h01
  4. Réponses: 7
    Dernier message: 02/07/2007, 16h06
  5. [vb.net] ajouter une ligne à un fichier txt existant
    Par tbdarkspirit dans le forum VB.NET
    Réponses: 2
    Dernier message: 25/05/2007, 11h41

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