Page 1 sur 1

[R] Aide pour _ArrayAdd sur un tableau 2D

Posté : jeu. 06 août 2009 14:18
par GhostLine

Code : Tout sélectionner

; *************************************************************
; * INTERFACAGE DE FICHIER PLAT - ECRIT PAR GHOST LINE - 2009 *
; *************************************************************

#include <Array.au3>

; -------------------------------------------------------------
; * DECLARATION DES VARIABLES                                 *
; -------------------------------------------------------------

$fichier_entree = "c:\test.paq"
Dim $array[100][6]
$i = 1 ; permet de sauter la première ligne

; -------------------------------------------------------------
; * PROGRAMME                                                 *
; -------------------------------------------------------------

; * BLOC LECTURE                                              *

$fichier_a_traiter = FileOpen($fichier_entree,0)
While 1
    $ligne = FileReadLine($fichier_a_traiter,$i+1)
    If @error = -1 Then ExitLoop ; code erreur de FileReadLine : on arrive a la fin du fichier ? on quitte la boucle
    $num_commande = StringMid($ligne,7,9)
    $recept_caisse = StringMid($ligne,41,5)
    $commentaire = StringMid($ligne,54,20)
    $quantite = StringMid($ligne,90,10)
    $date_exped = StringMid($ligne,115,8)
    $stock_dest = StringMid($ligne,154,5)

    $array[$i-1] [0] = $num_commande
    $array[$i-1] [1] = $recept_caisse
    $array[$i-1] [2] = $commentaire
    $array[$i-1] [3] = $quantite
    $array[$i-1] [4] = $date_exped
    $array[$i-1] [5] = $stock_dest
$i=$i+1
WEnd
_ArrayDisplay($array)
J'aimerai savoir de quelle manière je dois procéder pour réussir à ne pas avoir à déclarer un nombre de lignes dans mon array ...

HELP !

Re: [..] Aide pour _ArrayAdd sur un tableau 2D

Posté : jeu. 06 août 2009 15:27
par tolf
Plusieurs solutions :
- vous comptez le nombre de lignes avec _FileCountLines.
- vous utilisez l'udf Array2D : http://www.autoitscript.fr/forum/viewto ... =21&t=1332

Ici, je vous conseille la première solution car sinon, vous devrez redimensionner à chaque fois l'array, ce qui risque de devenir lent, d'autant plus quand la taille de l'array est grande (à la fin du traitement).

Re: [..] Aide pour _ArrayAdd sur un tableau 2D

Posté : jeu. 06 août 2009 16:21
par GhostLine
Le "problème" est que je ne connais pas à l'avance les noms des fichiers que je vais traiter (ils vont l'être sur des paramètres, type date de création, ou certaines informations contenues dans les fichiers) ... je vais essayer de voir comment je peux goupiller ca.

Re: [..] Aide pour _ArrayAdd sur un tableau 2D

Posté : jeu. 06 août 2009 16:54
par tolf
Vous déclarez le nombre de lignes dynamiquement en utilisant une variable :P
Je ne vois pas où est le problème :roll:

Re: [..] Aide pour _ArrayAdd sur un tableau 2D

Posté : jeu. 06 août 2009 17:44
par GhostLine
Je suis en train de faire mes tests et comptages avant la déclaration de l'array en fait (enfin j'essaye) : je compte les lignes des fichiers qui correspondent à mes critères, puis je créé l'array avec l'addition de ces lignes.

Edit : tolf, je ne suis pas sûr de bien comprendre votre réponse : il est possible de redimensionner une array à la volée sans en perdre le contenu ? ou bien vous parlez de créer une table de transition qui comporte l'ancien nombre d'entrée de la table + le nombre relevé dans le fichier suivant ?

Re: [..] Aide pour _ArrayAdd sur un tableau 2D

Posté : jeu. 06 août 2009 20:03
par tolf
Ah votre array combine donc plusieurs fichiers, je pensais qu'elle ne contenait que le contenu d'un seul fichier.
Dans ce cas, vous pouvez faire comme cela :

Code : Tout sélectionner

$fichier1 = "nom du fichier"
$taille = _FileCountLines[$fichier1]
Dim $array[$taille][6]
_Traitement($fichier1, $array)

$fichier2 = "nom du fichier 2"
$taille = _FileCountLines[$fichier2]
$taille_array = Ubound($array)
ReDim $array[$taille_array  + $taille][6]
_Traitement($fichier1, $array, $taille_array)

Func _Traitement($fichier_a_traiter, ByRef $array, $start = 0)
    While 1
        $ligne = FileReadLine($fichier_a_traiter,$i+1)
        If @error = -1 Then ExitLoop ; code erreur de FileReadLine : on arrive a la fin du fichier ? on quitte la boucle
        $num_commande = StringMid($ligne,7,9)
        $recept_caisse = StringMid($ligne,41,5)
        $commentaire = StringMid($ligne,54,20)
        $quantite = StringMid($ligne,90,10)
        $date_exped = StringMid($ligne,115,8)
        $stock_dest = StringMid($ligne,154,5)

        $array[$start + $i-1] [0] = $num_commande
        $array[start + $i-1] [1] = $recept_caisse
        $array[start + $i-1] [2] = $commentaire
        $array[start + $i-1] [3] = $quantite
        $array[start + $i-1] [4] = $date_exped
        $array[start + $i-1] [5] = $stock_dest
        $i += 1
    WEnd
EndFunc
Pour les fichiers suivants, vous faites comme le deuxième.

Re: [R] Aide pour _ArrayAdd sur un tableau 2D

Posté : jeu. 13 août 2009 12:41
par GhostLine
Juste pour remonter la manière dont j'ai procédé :)
► Afficher le texte