bonjour,

je place un petit peu le contexte.
j'ai un fichier de données de ce style :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 1000.0000000  1000.0000000    1.0000   4700.604 0.030   -7.0    0.9 -2.61 -0.057  30   0 08:07:34     41617.33805    0.0000  2014/01/10
1000.0000000  1000.0000000    1.0000   4700.602 0.049    1.2   -4.6 -2.62 -0.057  30   0 08:08:28     41617.33867    0.0000  2014/01/10
Line	   1.000N
/------LINE-----STATION-----ALT.------GRAV.---SD.--TILTX--TILTY-TEMP---TIDE---DUR-REJ-----TIME----DEC.TIME+DATE--TERRAIN---DATE
 1.0000000   1.0000000    1.0000   4700.622 0.033    0.3   -4.0 -2.66 -0.057  30   0 08:10:43     41617.34023    0.0000  2014/01/10
 1.0000000   1.0000000    1.0000   4700.624 0.043    1.0   -1.7 -2.66 -0.057  30   0 08:11:37     41617.34085    0.0000  2014/01/10
 1.0000000   2.0000000    1.0000   4700.626 0.042   -1.7    0.9 -2.67 -0.057  30   0 08:14:10     41617.34262    0.0000  2014/01/10
 1.0000000   2.0000000    1.0000   4700.625 0.044    1.3    5.6 -2.68 -0.057  30   0 08:15:00     41617.34320    0.0000  2014/01/10
 1.0000000   3.0000000    1.0000   4700.664 0.044    1.2   -4.1 -2.69 -0.057  30   0 08:18:06     41617.34535    0.0000  2014/01/10
 1.0000000   3.0000000    1.0000   4700.660 0.038    3.0   -2.5 -2.69 -0.057  30   0 08:18:55     41617.34592    0.0000  2014/01/10
 1.0000000   3.0000000    1.0000   4700.664 0.036    0.1   -2.8 -2.69 -0.057  30   0 08:19:44     41617.34648    0.0000  2014/01/10
 1.0000000   4.0000000    1.0000   4700.688 0.047   -1.3    3.7 -2.70 -0.058  30   0 08:22:15     41617.34823    0.0000  2014/01/10
 1.0000000   4.0000000    1.0000   4700.691 0.047   -5.0    0.2 -2.70 -0.058  30   0 08:23:06     41617.34882    0.0000  2014/01/10
 1.0000000   5.0000000    1.0000   4700.709 0.042    3.2    6.2 -2.70 -0.058  30   0 08:25:10     41617.35025    0.0000  2014/01/10
 1.0000000   5.0000000    1.0000   4700.712 0.050    5.0    0.0 -2.70 -0.058  30   0 08:26:08     41617.35092    0.0000  2014/01/10
 1.0000000   6.0000000    1.0000   4700.788 0.041   -3.2    1.0 -2.69 -0.058  30   0 08:28:26     41617.35251    0.0000  2014/01/10
 1.0000000   6.0000000    1.0000   4700.789 0.045    0.9   -3.4 -2.68 -0.058  30   0 08:29:17     41617.35310    0.0000  2014/01/10
 1.0000000   7.0000000    1.0000   4700.836 0.030    3.7    4.7 -2.67 -0.058  30   0 08:32:27     41617.35530    0.0000  2014/01/10
 1.0000000   7.0000000    1.0000   4700.839 0.048    0.1    1.3 -2.66 -0.059  30   0 08:33:18     41617.35589    0.0000  2014/01/10
Je m’affranchit des lignes avec des 1000 et commençant par du texte
je m'intéresse essentiellement aux deux premieres colonnes qui sont des coordonnées (X et Y)

ce que j'aimerais faire, c'est :
- quand on a 2 lignes pour une coordonnée donnée (par exemple : 1 1) => faire la moyenne des deux lignes sur les autres colonnes
- quand on a 3 lignes pour une coordonnée donnée (par exemple : 1 3) => faire un test qui sélectionne les deux valeurs les plus proches et efface celle qui reste

Le soucis est dans ce 2e cas.
Mon idée c'était de me faire une table d'index qui délimite les plages des lignes concernées pour chaque coordonnée.
par exemple ici ça donnerai :
5
6
7
8
9
11
12
13
14
15
ca me permettrai de faire un lecture séquencée du tableau et me faire une routine qui
- si une plage s'étend sur 2 lignes => faire la moyenne des lignes
- si une plage s'étend sur 3 lignes => selectionner les deux valeurs les plus proches et faire la moyenne
seulement, je connais pas la taille qu'aura ma table d'index au final

voici mon bout de code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
while (i < counter) // counter = nombre de ligne du fichier texte
            {
                if (X[i] == "1000.0000000") // +1 à l'index si la valeur "1000" est rencontrée
                    i++;
                else
                {
                    if (X[i] == "Line") // +1 à l'index si la valeur le mot "line" est rencontré
                        i++;
                    else
                    {
                        if (X[i].Substring(0, 1) == "/") // +1 à l'index si le premier caractère de la ligne est "/"
                            i++;
                        else
                        {
                            if (X[i + 1] == X[i] && Y[i + 1] == Y[i] && X[i - 1] == X[i] && Y[i - 1] == Y[i]) // +1 si les valeurs n-1 et n+1 sont égales à celle de n (cas de 3, ou plus, valeurs consécutives)
                                i++;
                            else
                            {
                                Console.WriteLine(i); // il ne reste plus que les "bornes" des plages des points
                                i++;
                            }
                        }
                    }
                }
             }
Dans la console, j'ai bien les bornes qui délimitent la plage de chaque point de mesure, donc mes conditions fonctionnent bien.
Mais mon soucis c'est la façon de stocker et d’accéder a ces index.
J'ai envisager 2 solutions :
- une table qui contiendrait que les index, que je placerais en ligne 19 du code, mais je connais pas la dimension finale de cette table, donc je peux pas la définir en amont pour pouvoir l'utiliser en ligne 19.
- une liste avec autant de lignes que mon fichier texte, dans laquelle que mettrais un 1 par exemple pour matérialiser les bornes de mes plages. Mais le soucis c'est de retrouver le numéro de la ligne de chacun de mes 1

j'ai essayé d'etre a peut pres clair, c'est pas évident :/ c'est assez torturé dans ma tete ^^
si vous avez une idée sur la façon de stocker et d’accéder a ces fichus index , je usis preneur.

merci