Opérations sur Tableau

Résolu
Neiflheim1 Messages postés 31 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 20 janvier 2010 - 16 nov. 2009 à 12:25
Neiflheim1 Messages postés 31 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 20 janvier 2010 - 19 nov. 2009 à 09:15
Bonjour à tous,

Alors je continue mon projet d'automatisation de calcul d'un indice qualité des eaux, et je bloque un peu sur un point (qui je l'avoue ne me semble pas bien compliqué...).

Tout d'abord voici mon fichier texte de départ (très simplifié) :

GRID3D
TYPE 1
IJK -y +x -z
NUMBERING 0
ORIGIN 0.0 0.0 50.0
ROTZ 0
DIM 4 5 2
0.0
5.0
10.0
15.0
0.0
5.0
10.0
15.0
20.0
0.0
20.0


Je le détaille brièvement, face à DIM (4 5 2), nous avons les coordonnées des points d'une maille. Donc nous avons 4 points en ordonnées, 5 en abscisse, et 2 en profondeur. Ce qui fais que cela représente un maillage de 3 lignes, 4 colonnes.

Le but de mon script et de calculer automatiquement la surface d'une cellule.

Donc tout d'abord je dois récupérer les dimensions de mes mailles (4 5 1), ce que j'ai fais avec un split...

Public Function ReadCoord(ByVal FileName As String) As DataTable
        Try
            Dim cnt As Integer = 0
            Dim fs As New IO.FileStream(FileName, IO.FileMode.Open)
            Dim sr As New IO.StreamReader(fs)
            Dim Coord As Array
            Dim X, Y, Z, Ci As Integer
            While Not sr.EndOfStream
                cnt += 1
                Dim line As String = sr.ReadLine
                If line.Substring(0, 3) = "DIM" Then
                    Coord = Split(line, " ")
                    X = Coord(2)
                    Y = Coord(1)
                    Z = Coord(3)
                    Exit While
                End If
            End While
        Catch ex As Exception
            Return Nothing
        End Try
    End Function


Jusque là tout va bien.

Et c'est là que je demande de l'aide :)


Tout d'abord je dois obtenir 2 tables (une pour les X et une pour les Y) avec les données correspondants à la taille de la cellule, et non plus les coordonnées des points, de la forme suivante :

'Y
5.0 (5.0-0.0)
5.0 (10.0-5.0)
5.0 (15.0-10.0)
'X
5.0
5.0
5.0
5.0
'Z
20.0

2° je dois obtenir deux tables différentes pour pouvoir faire des opérations dessus.

Table Y
5.0
5.0
5.0

Table X
5.0
5.0
5.0
5.0

3° je dois effectuer une multiplication pour obtenir la superficie de la cellule, avec un fichier de sortie de la forme :

S1
S2
S3
S4
S5
S6
S7
S8
...

en sachant que la grille est représentée comme suit :

S1 S2 S3 S4
S5 S6 S7 S8
S9 S10 S11 S12

Voilà, j'espère avoir été complet dans mes explications, merci d'avance à ceux qui pourront m'aider :)

5 réponses

Neiflheim1 Messages postés 31 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 20 janvier 2010
19 nov. 2009 à 09:15
J'ai trouvé mon erreur.

J'avais en fait une ligne vide en fin dans chacun de mes tableauYF et XF, du coup le tableauArea n'était pas assez dimensionné... Problème résolu :)
3
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
16 nov. 2009 à 13:15
Salut, c'est très complet

Par contre quel est ton soucis ?

Chris...
- La vérité n'est pas ailleurs, elle est sous le nez de chacun, quelques mouvements neuronale permettent de l'entrevoir -
MCPD (webform-winform) / MCSA / MCDST / MCT
0
Neiflheim1 Messages postés 31 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 20 janvier 2010
16 nov. 2009 à 13:19
Ben je bloque pour effectuer les trois points que j'ai indiqué, à commencer par créer un tableau en soustrayant la ligne actuelle à la ligne juste après ;)
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
16 nov. 2009 à 13:38
Bon je vais admettre que pour cela tu as besoin d'une datatable

Dim dt as New DataTable()
dt.Columns.add(new DataColumn("toto", System.Type.GetType("System.Double"))) 'Si je ne me trompe pas

Ensuite pour chaque ligne tu doit insérer ta ligne déjà calculée, tu peux faire comme cela :

Dim dr as DataRow = dt.NewRow()
dr("toto") = (36-5)

etc... etc...

Chris...
- La vérité n'est pas ailleurs, elle est sous le nez de chacun, quelques mouvements neuronale permettent de l'entrevoir -
MCPD (webform-winform) / MCSA / MCDST / MCT
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Neiflheim1 Messages postés 31 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 20 janvier 2010
18 nov. 2009 à 13:48
Je ne souhaite pas utiliser de datatable pour le moment, c'est pour cela que j'ai attendu d'avancer dans mon code pour répondre de nouveau.

Voilà ou j'en suis, j'ai réussi à faire les 2 premiers points qui me bloquais, il ne me reste plus que le 3eme, qui est en passe de se terminer, mais j'ai une petite erreur du type :
Une exception de première chance de type 'System.IndexOutOfRangeException'

...
'CALCUL CELL AREA
                If cnt = (7 + X + Y + 1) Then

                    Dim TableauArea(Ci - 1) As String
                    For Each Item As Object In TableauYF
                        j = 0
                        For Each Item2 As Object In TableauXF
                            TableauArea(k) = (TableauYF(i) * TableauXF(j))
                            j = j + 1
                            k = k + 1
                        Next Item2
                        i = i + 1
                    Next Item

'VISUALISATION DES RESULTATS
                    Dim résultat As String = "résultat X*Y : " & Chr(13) & Chr(13)
                    For k = 0 To Ci
                        résultat = résultat & TableauArea(k) & Chr(13)
                    Next k
                    MsgBox(résultat)


                End If


Le problème dois se situer dans mes deux boucles For each, ou dans l'utilisation de string...


Merci d'avance pour votre aide
0
Rejoignez-nous