MATH_SerieVersTableau [Utilitaires]
Par Teddy Linet (Math4D v1)
Nouvelle recherche
Si (Faux)
` MATH_SerieVersTableau [Teddy Linet 25/07/02] v0;91
` ---------------------------------------------
` Méthode de création d'un tableau de travail pour les fonction sur
` des séries
` Permet aux fonctions qui y font appel d'utiliser comme paramètre
` pointeur un champ (accompagné éventuellement d'un ensemble)
` ou un tableau (avec typecasting en réel des booléen pour les calculs)
` ---------------------------------------------
` MATH_SerieVersTableau (->Paramètre; ->TableauRésultat; {Ensemble})
` Paramètre (Pointeur) Pointeur vers tableau, variable ou champ
` TableauRésultat (Pointeur) Pointeur vers tableau résultat (tableau de travail)
` Ensemble (Chaine optionnelle) Nom de l'ensemble
` ---------------------------------------------
` MATHERROR
` 0 -> Pas d'erreur
` ---------------------------------------------
`
Fin de si
C_ENTIER LONG(MATHERROR)
MATHERROR:=0
C_POINTEUR($1;$vPointeurParam_W;$vTable_W) ` pointeur d'un tableau ou d'un champ
C_POINTEUR($2;$vPointeurTableau_W) ` Tableau de travail pointé
C_ALPHA(32;$3;$vEnumération_S32)
C_ALPHA(32;$vNomVar_S32)
C_REEL($vNumTable_F;$vNumChamp_F)
$vPointeurParam_W:=$1
$vPointeurTableau_W:=$2
$vEnumération_S32:=$3
TABLEAU REEL($vPointeurTableau_W->;0) ` On efface tout !
` Ce qui veut aussi dire que le tableau est nul en cas d'erreur
RESOUDRE POINTEUR($vPointeurParam_W->;$vNomVar_S32;$vNumTable_F;$vNumChamp_F)
` Il ne s'agit pas d'un champ (donc à priori une variable)
Si ($vNumChamp_F=0)
Au cas ou
` Cas des tableau simples => recopie
: ((Type($vPointeurParam_W->)=Est un tableau entier ) | (Type($vPointeurParam_W->)=Est un tableau entierlong ) | (Type($vPointeurParam_W->)=Est un tableau numérique ))
COPIER TABLEAU($vPointeurParam_W->;$vPointeurTableau_W->) ` Ici le typecasting semble superflus
` Cas des tableaux de booleens => typecasting en reel (0 ; 1)
: (Type($vPointeurParam_W->)=Est un tableau booléen ) ` Pourquoi pas après tout
Boucle ($i;0;Taille tableau($vPointeurParam_W->))
$vPointeurTableau_W->{$i}:=Num($vPointeurParam_W->{i})
Fin de boucle
Fin de cas
` Cas ou il s'agit d'un champ
Sinon
$vTable_W:=Table($vNumTable_F) ` Renvoie le pointeur de la table
COPIER SELECTION($vTable_W->;"Tempo") ` On ne modifie pas la sélection courante et surtout l'enregistrement courant
Si (Nombre de parametres=2) ` Utilise l'ensemble si nécessaire
UTILISER ENSEMBLE($vEnumération_S32)
Fin de si
DEBUT SELECTION($vTable_W->)
Au cas ou
` Cas d'un champ dans une sélection et d'un type numérique
: ((Type($vPointeurParam_W->)=Est un entier ) | (Type($vPointeurParam_W->)=Est un entier long ) | (Type($vPointeurParam_W->)=Est un numérique ))
Boucle ($i;1;Enregistrements trouves($vTable_W->))
INSERER LIGNES($vPointeurTableau_W->;1) ` L'ordre est ici sans importance
$vPointeurTableau_W->{1}:=$vPointeurParam_W->
ENREGISTREMENT SUIVANT($vTable_W->)
Fin de boucle
` Cas d'un champ dans une sélection et d'un type booleen
: (Type($vPointeurParam_W->)=Est un booléen )
Boucle ($i;1;Enregistrements trouves($vTable_W->))
INSERER LIGNES($vPointeurTableau_W->;1) ` L'ordre est ici sans importance
$vPointeurTableau_W->{1}:=Num($vPointeurParam_W->)
ENREGISTREMENT SUIVANT($vTable_W->)
Fin de boucle
Fin de cas
UTILISER SELECTION("Tempo") ` On reste propre
EFFACER SELECTION("Tempo") ` Et on fait le ménage
Fin de si