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 :

Manipulation de fichiers délimités sous Java


Sujet :

Entrée/Sortie Java

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Manipulation de fichiers délimités sous Java
    Bonjour à tous,

    Je galère à trouver une méthode adéquate pour manipuler ce type de fichier délimité sous Java :
    Test;20140102073901;2;;6;;;1456XY122;0.666;
    Test;20140102073700;1;;6;;;9971KX33;0.188;
    Test;20140102073800;2;;6;;;9971KX33;0.577;
    Test;20140102073501;1;;6;;;1456XY122;0.190;
    Test;20140102073900;2;;6;;;9971KX33;0.197;
    Test;20140102073601;1;;6;;;1456XY122;0.185;

    Je souhaire remplacer l'horodatage (2ième colonne) par l'horodatage maximum de l'identifiant définit par la 8ième colonne (14666UN13/9971KX33),
    soit dans mon exemple :
    - attribuer 20140102073901 à tous les 1456XY122
    - attribuer 20140102073900 à tous les 9971KX33
    Test;20140102073901;2;;6;;;1456XY122;0.666;
    Test;20140102073900;1;;6;;;9971KX33;0.188;
    Test;20140102073900;2;;6;;;9971KX33;0.577;
    Test;20140102073901;1;;6;;;1456XY122;0.190;
    Test;20140102073900;2;;6;;;9971KX33;0.197;
    Test;20140102073901;1;;6;;;1456XY122;0.185;


    Est-ce que quelqu'un a une méthode à me conseiller ?

    D'avance merci !

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 072
    Points : 7 974
    Points
    7 974
    Par défaut
    Une méthode ? Une méthode pour quoi faire ? Pour casser une ligne en utilisant le separateur ; ?

    Dans ce cas il y'a la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] retour = tonString.split(";");
    qui conviendra parfaitement.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre actif
    Homme Profil pro
    Consultant BigData
    Inscrit en
    Juillet 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant BigData

    Informations forums :
    Inscription : Juillet 2009
    Messages : 129
    Points : 280
    Points
    280
    Par défaut
    Bonjour,

    Ce type de fichier est un simple fichier texte. Ce que tu peux faire, c'est ouvrir un stream en input sur le ficheir source, un en output sur le fichier cible. Pour chaque ligne, tu split sur le caractère de séparation de ton fichier délimité (ici le ; il semblerait), tu fais tes manipulation sur le tableau d'éléments et tu écris le tout dans ton output
    C'est une solution certes manuelle mais relativement simple à rédiger si tu décomposes ton problème complexe en plus petits problèmes comme je viens de le faire.

  4. #4
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci pour vos retours.
    J’ai crée un tableau contenant autant de lignes que le fichier d’origine et trois colonnes
    - la ligne en entier
    - l’horodatage
    - l’identifiant

    Mon idée est de trier ce tableau à 3 colonnes par "identifiant ascendant" et "horodatage descendant", ce qui donnerait :
    Test;20140102073901;2;;6;;;1456XY122;0.666;
    Test;20140102073601;1;;6;;;1456XY122;0.185;
    Test;20140102073501;1;;6;;;1456XY122;0.190;

    Test;20140102073900;2;;6;;;9971KX33;0.197;
    Test;20140102073800;2;;6;;;9971KX33;0.577;
    Test;20140102073700;1;;6;;;9971KX33;0.188;


    L’idée c’est d’ensuite utiliser dune boucle itérative pour descendre dans mon tableau en remplaçant l’horodatage par l’horodatage précédent tant que l’identifiant ne change pas.

    1. je suis bloqué au niveau du tri, je n’ai pas trouvé comment trier sur deux clés (identifiant ascendant / horodatage descendant).
    J’utilise compareTo mais il semble que cela ne me permette de trier que sur une seule clé.
    Comment peux-t-on trier un tableau sur deux clés/colonnes ?

    2. Cette méthode me semble plutôt lourde, n’existerait-il rien de plus élégant ?


    Merci !

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Citation Envoyé par Kath333 Voir le message
    Comment peux-t-on trier un tableau sur deux clés/colonnes ?
    Avec un Comparator<String[]>... Ce qui reste pas génial, mais ça marche.

    Citation Envoyé par Kath333 Voir le message
    2. Cette méthode me semble plutôt lourde, n’existerait-il rien de plus élégant ?
    Moi, ce que je ferais :
    - en lisant le fichier je remplirais deux structures :
    -- une List de toutes les lignes, soit la ligne elle-même, soit tous ses champs.
    -- une Map<String, String> qui, à chaque identifiant rencontré, associe l'horodataga maximum rencontré pour cet identifiant.
    - Une fois le fichier lu, je le réécris dans l'ordre de la List, mais en interrogeant la Map pour savoir quel horodatage donner pour quel identifiant.

    Ça reste assez lourd à programmer. Mais moins qu'un tri total du fichier entier.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    merci, l'idée de créer 2 structures m'avait effleuré, je vais voir ce que cela donne

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/05/2010, 13h47
  2. Manipuler un fichier excel en java
    Par kanebody dans le forum Documents
    Réponses: 2
    Dernier message: 10/09/2008, 16h31
  3. import fichier délimité sous excel.
    Par monf29 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/06/2007, 10h06
  4. Comment ouvrir un fichier text sous Java ?
    Par mpascolo dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 11/10/2006, 15h59

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