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

Collection et Stream Java Discussion :

Créer tableau dans fichier texte


Sujet :

Collection et Stream Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 35
    Points : 18
    Points
    18
    Par défaut Créer tableau dans fichier texte
    Bonjour tous le monde.

    J'aimerai créer un tableau (en ascii) dans un fichier texte du style (Problème d'alinéa, en fait je veux que met colonne soit uniforme, donc les "|" alignés) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CONTEXT |TRAITE |A_APPLIQUER |
    ---------------------------------------------------------------------------------------------|
    1erContexte |20 |5 |
    2eContexte |20 |5 |
    3eContexte |205400000000000|5 |
    4eContexte |8 |511454152121211|
    5eContexteTresLonggggggggggggg|8 |511454152121211|
    Pour cela je dispose d'une classe StatsActes que j'ai créé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class StatsActes {
     
    	private String contexte;
    	private String etat;
    	private String nombre;
    //Je vous épargne mes getters et setters.
    }
    Sur une requête en base, je récupère une List<StatsActes>, puis je la transforme en HashMap<String, Set<StatsActes>> pour trier tout ceci par contexte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    HashMap<String, Set<StatsActes>> map = new HashMap<String, Set<StatsActes>>();
     
            for (StatsActes stats : statsActes) {
                String context = stats.getContexte();
                Set<StatsActes> sa = new HashSet<StatsActes>();
                sa.add(stats);
                if(!map.containsKey(context)){
                    map.put(context, sa);
                  }
                   else{
                       map.get(context).add(stats);
                   }
            }
    Ce que j'aimerai, c'est créer mon tableau comme ci dessus mais en tenant compte de la longueur des mes champs (trouver le champ le plus long, mettre des espaces après mon print de mon champ) pour avoir un tableau uniforme pour pouvoir lire mon fichier correctement et pas l'exemple ci dessus sans alinéas.

    (Je précise l'entête : CONTEXT = contexte de ma classe StatsActes, TRAITE et A_APPLIQUER sont les états que je récupère de StatsActes aussi)

    Pour la création de mon fichier texte, je n'ai pas le choix, je dois utiliser les librairies standards. Personnellement j'utilise ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    OutputStream outputStream = new FileOutputStream(new  File("./File.txt"));
    Writer writer = new OutputStreamWriter(outputStream);
    Voila j'espère avoir été assez clair sur mon besoin. Si vous voulez plus d'informations n'hésitez pas! Merci d'avance à tous le monde

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    - Parcourir tous tes StatsActes pour déterminer quel est la longueur max de contexte, la longueur max d'état, la longueur max de nombre.
    - Écrire
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 35
    Points : 18
    Points
    18
    Par défaut
    Merci du conseil! Je vois la principe, par contre pour l'appliquer... Je viens de débuter en java alors c'est n'est pas encore inné chez moi . Quelqu'un peux commencer un peu pour voir pour avoir une base ? Merci d'avance.

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Avant la boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int maxContext = "CONTEXT".length();
    int maxEtat = "TRAITE".length();
    int maxNombre = "A_APPLIQUER".length();
    Dans la boucle :

    Ce qu'on appelle un algorithme de recherche de maximum (99.99% indépendant du langage) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int length = stats.getContexte().length();
    if(length > maxContext) {
      maxContext = length;
    }
    // pareil avec les deux autres.
    Après la boucle :
    - La largeur de la première colonne est maxContext
    - La largeur de la deuxième colonne est maxEtat
    - La largeur de la troisième colonne est maxNombre


    (Note : en réalité, dans la boucle, il est plus simple de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maxContext = Math.max(maxContext, stats.getContexte().length());
    Mais pour ça il faut connaître Math.max(), et ça, en effet, ce n'est pas inné.
    )
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 35
    Points : 18
    Points
    18
    Par défaut
    Le problème est que le nombre que je récupère n'est pas forcément au bon endroit (dans la bonne colonne). Aujourd'hui je suis à ce stade :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    CONTEXTE          |ENREGISTRE |TRAITE |FINALISE |A_INFORMER |
    SIREN_0_IMM       |2 |
    MAINTOFFRES_2_CYC |1 |
    MAINTPRS_1_IMM    |1 |
    SIREN_2_IMM       |1 |
    MAINTOFFRES_1_IMM |1 |
    SIREN_1_IMM       |1 |
    MAINTOFFRES_2_EFF |1 |
    MAINTOFFRES_2_IMM |2 |
    Le nombre en gras par exemple ne doit pas ce trouver dans la colonne enregistrer, mais dans finaliser. Il y a un histoire de position mais je suis un peux perdu.

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ben non, il y a pas d'histoire de position, il faut juste afficher toutes les colonnes et dans le bon ordre. On peut voir le code qui affiche la table ?
    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. Réponses: 10
    Dernier message: 26/04/2016, 00h52
  2. Réponses: 13
    Dernier message: 23/09/2011, 18h24
  3. Ecrire un tableau de cellules dans fichier texte
    Par Vince_14 dans le forum MATLAB
    Réponses: 7
    Dernier message: 15/04/2011, 17h47
  4. [ Vector Fichier ] Vector dans fichier texte
    Par geegee dans le forum Langage
    Réponses: 5
    Dernier message: 21/05/2004, 13h56
  5. Insertion dans fichier texte + rapide que TStringList ?
    Par benj63 dans le forum C++Builder
    Réponses: 8
    Dernier message: 26/02/2004, 11h34

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