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