Conversion d'un fichier de String en tableau d'entier
Bonjour à toutes et à tous,
J'ai écrit une méthode pour transformer un fichier de 6000 lignes comportant chacune 6000 données, séparées par un "espace", représentant chacune une altitude sous forme de chaîne.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| public static int LitSRTM3() {
BufferedReader reader = FCH.ouvreLect(FCH.dirCartes, "/srtm_38_03.asc");
int[][] alti = new int[6000][6000];
int la, lo;
int nb = 0;
int pDeb;
int pFin;
String line;
String alt;
try {
for (int i = 0; i < 6; i++) // Suppression de l'en-tête
reader.readLine();
la = 0;
while ((line = reader.readLine()) != null) {
nb += 1;
pDeb = 0;
pFin = 0;
lo = 0;
while (pFin < line.length()) {
while (line.charAt(pFin) != ' ') {
pFin += 1;
}
alt = line.substring(pDeb, pFin);
alti[lo][la] = Integer.parseInt(alt);
pFin += 1;
pDeb = pFin;
lo += 1;
}
la += 1;
}
} catch (IOException e) {
e.printStackTrace();
}
FCH.clotLect(reader);
return nb;
} |
Avec mon Samsung A41 qui n'est quand même pas un escargot, cela me coûte 34 secondes.
Cette durée est partagée à peu prés à part égale entre la conversion proprement dite :
Code:
alti[lo][la] = Integer.parseInt(alt);
J'ai essayé d'autre méthode (Integer.decode() ; new Integer()) mais c'est encore pire.
C'est à propos de la partie exploration du fichier texte que je pose des questions. Ma méthode consiste à rechercher les espaces pour délimiter les chaînes puis à appliquer :
Code:
alt = line.substring(pDeb, pFin);
pour les isoler.
N'y a-t-il pas plus rapide ?
Cordialement.
Pierre.