CONTEXT|TRAITE|A_APPLIQUER| --------------------------| 1erContexte|20|5| 1erContexte|30|10| 2eContexte|20|5| 3eContexte|205400000000000|5| 4eContexte |8|511454152121211| 5eContexteTresLonggggggggggggg|8|511454152121211|
import java.io.File; import java.io.FileNotFoundException; import java.util.HashMap; import java.util.HashSet; import java.util.Scanner; import java.util.Set; import java.util.StringTokenizer; public class Test { public static void main(final String[] args) { final Test t = new Test(); HashMap<String, Set<StatsActes>> map = null; try { map = t.loadFromFile(new File("Test.txt")); } catch (final FileNotFoundException e) { e.printStackTrace(); } t.print(map); } public HashMap<String, Set<StatsActes>> loadFromFile(final File file) throws FileNotFoundException { final HashMap<String, Set<StatsActes>> map = new HashMap<String, Set<StatsActes>>(); final Scanner sc = new Scanner(file); int lines = 0; // pour ne pas traiter les 2 premieres lignes StringTokenizer token = null; // pour parser les champs Set<StatsActes> sa = null; StatsActes item = null; while (sc.hasNextLine()) { final String line = sc.nextLine(); if (lines < 2) { lines++; continue; } token = new StringTokenizer(line, "|"); // récupération des données avec un petit test final String context = token.hasMoreTokens() ? token.nextToken() : "Error"; final String etat = token.hasMoreTokens() ? token.nextToken() : "Error"; final String nombre = token.hasMoreTokens() ? token.nextToken() : "Error"; sa = new HashSet<StatsActes>(); // j'ai ajouté le constructeur // public StatsActes(final String contexte, final String etat, final // String nombre) item = new StatsActes(context, etat, nombre); if (!map.containsKey(context)) { sa.add(item); map.put(context, sa); } else map.get(context).add(item); } sc.close(); return map; } public void print(final HashMap<String, Set<StatsActes>> map) { final Set<String> keys = map.keySet(); for (final String key : keys) { System.err.println(key); final Set<StatsActes> value = map.get(key); for (final StatsActes v : value) { // j'ai redef toString // public String toString() { // return contexte + "|" + etat + "|" + nombre; // } System.err.println("\tv: " + v); } } } }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Le problème est que je n'ai pas de fichier au départ, c'est moi qui veut créer ce beau tableau.
public void writeInFile(final HashMap<String, Set<StatsActes>> map, final File file) throws FileNotFoundException { PrintWriter pw = new PrintWriter(file); pw.println("CONTEXT|TRAITE|A_APPLIQUER|"); pw.println("--------------------------|"); pw.flush(); final Set<String> keys = map.keySet(); for (final String key : keys) { final Set<StatsActes> value = map.get(key); for (final StatsActes v : value) { pw.println(v.toString()); pw.flush(); } } pw.close(); }
Petit précision, ce qu'il y a dans ma List<StatsActes> est le résultat d'une requête sur une base oracle.
CONTEXT|TRAITE|A_APPLIQUER| --------------------------| 1erContexte|20|5| 2eContexte|20|5| 3eContexte|205400000000000|5| 4eContexte |8|511454152121211| 5eContexteTresLonggggggggggggg|8|511454152121211|
CONTEXT |TRAITE |A_APPLIQUER | --------------------------------------------------------------| 1erContexte |20 |5 | 2eContexte |20 |5 | 3eContexte |205400000000000|5 | 4eContexte |8 |511454152121211| 5eContexteTresLonggggggggggggg|8 |511454152121211|
private enum Type { CONTEXTE, ETAT, NOMBRE; } public void writeInFile(final HashMap<String, Set<StatsActes>> map, File file) throws FileNotFoundException { PrintWriter pw = new PrintWriter(file); pw.println("CONTEXT|TRAITE|A_APPLIQUER|"); pw.println("--------------------------|"); pw.flush(); int space_context = getMax(map, Type.CONTEXTE); int space_etat = getMax(map, Type.ETAT); int space_nb = getMax(map, Type.NOMBRE); final Set<String> keys = map.keySet(); for (final String key : keys) { final Set<StatsActes> value = map.get(key); for (final StatsActes v : value) { writeItem(pw, v.getContexte(), space_context); writeItem(pw, v.getEtat(), space_etat); writeItem(pw, v.getNombre(), space_nb); pw.println(); pw.flush(); } } pw.close(); } private void writeItem(PrintWriter pw, String input, int max) { if(input.length() < max) { pw.print(input); pw.print(getSpaces(max - input.length())); pw.print(" |"); } else pw.print(input + " |"); } private String getSpaces(int nb) { String ret = ""; for(int i = 0; i < nb; ++i) ret += " "; return ret; } private int getMax(final HashMap<String, Set<StatsActes>> map, Type type) { final Set<String> keys = map.keySet(); int len = 0; for (final String key : keys) { final Set<StatsActes> value = map.get(key); for (final StatsActes v : value) { switch(type) { case CONTEXTE: if(v.getContexte().length() > len) len = v.getContexte().length(); break; case ETAT: if(v.getEtat().length() > len) len = v.getEtat().length(); case NOMBRE: if(v.getNombre().length() > len) len = v.getNombre().length(); } } } return len; }
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 |