cycle GAP en free

08-01-2007 à 12:14:11
Bonjour,

Est-ce que le cycle GAP en prog free est le même ?
Sinon comment dois-je faire car je suis en train de boucler dans mon programme.

/free

// Lecture primaire
DoW Not %Eof(NomFic);
If S_Joentt='PT';
Chain KCLE1 FICHIER1;
If Not %Found;
Leave(re-lecture);
EndIf;
If (Autre test pas bon);
Leave(re-lecture));
EndIf;
etc...
EndIf;
EndDo;

/end-free

Merci


--Message édité par le 05-01-07 à 08:51:51--

--Message édité par le 05-01-07 à 08:52:35--
  • Liens sponsorisés



05-01-2007 à 09:30:25
Bonjour,

si tu utilises le "Nomfic" en fichier primaire tu n'as pas besoin de faire une boucle %eof(nomfic) : lorsque tu arrives en carte C - traitement détail, une lecture; les "LEAVE" sont donc inutiles dans ce cas.

Mais personnellement, je ne vois pas l'intérêt d'utiliser le cycle GAP en free ou en tout cas je ne sais pas comment on utilise les niveaux de rupture détail et total Lx en free (ce qui est à mon sens l'intérêt du cycle GAP).

Wilfrid.
05-01-2007 à 11:43:59
Saavik,

1/ Ce que tu fais n'est pas "du cycle GAP".
2/ Je ne vois aucun READx dans ta boucle DOW qui puisse faire avancer le fichier

Wilfrid,

Tu testes les indicateurs Lx "détail" avec un simple " IF ":
/free
If L1 (ou bien If L1 = '1')
En revanche, il faut revenir en mode colonné pour tester les indicateurs "total" :
/end-free
CLx exsr total
...
05-01-2007 à 12:00:51
Philippe,

c'est bien ce que je pensais ! beurk !
05-01-2007 à 12:10:41
Merci messieurs.

Effectivement, ce n'est pas un cycle GAP c'est juste une lecture en IP ! Oups !

[


Je soupçonnais bien un truc du genre que tu as dit Philippe.

Je vais faire autrement.
05-01-2007 à 15:01:44
Saavik,
Si tu lis en IP, alors tu utilises bien le cycle et ta boucle pourrait être OK, à qq chose près:
/free

// Lecture primaire assurée par GAP puisque fichier ouvert en IP

Do;
If S_Joentt='PT';
Chain KCLE1 FICHIER1;
If Not %Found;
Leave(re-lecture);
EndIf;
If (Autre test pas bon);
Leave(re-lecture));
EndIf;
etc...
EndIf;
EndDo;
/end-free

En outre, tu n'as pas besoin de savoir si LR est *On. Le cycle se charge de fermer les fichiers en LR.
Si tu veux faire qqch en last Record (LR), alors tu dois tester cet indicateur par ex. de cette façon :
/end-free
CLR EXSR TOTAL
CLR RETURN
08-01-2007 à 08:49:05
FicPrimai IP E DISK Prefix(P_)

/free

Do;
Si test Ok sinon LEAVE;
EndDo;


/end-free


Mais :

*RNF7030 30 008200 Le nom ou l'indicateur DO n'est pas
défini.

Serait-ce encore dû à ce cas particulier du "DO" tout seul dont nous avions déjà eu l'occasion d'en dicuter et où tu as posté un APAR ?
08-01-2007 à 11:17:37
Oui, "Do" seul n'est pas supporté en free.
Tu peux cependant ruser et faire une boucle infinie avec
DoW 1 = 1;

Tu en sors par une instruction Leave;
08-01-2007 à 12:14:11
Jai abandonné la lectur primaire par une lecture séquentielle et faire tant que not %eof...

Merci

--Message édité par Saavik le 08-01-07 à 12:14:44--
  • Liens sponsorisés