Les ordres d'entrée/sortie en RPG IV LECTURE: CL0N01Factor1+++++++Opcode&ExtFactor2+++++++Result++++++++Len++D+HiLoEq READ (N) Fichier (DS) xxyy Format lecture séquentielle d'un fichier. Si facteur 2 contient un nom de fichier en interne ou si vous êtes en V6 vous pouvez mettre un nom de DS ,pour y placer l'enregistrement. Si facteur 2 contient un nom de fichier externe,l'enregistrement suivant sera lu (quelque soit son format) Si facteur 2 contient un nom de format, l'enregistrement suivant AYANT LE FORMAT demandé sera lu. N en option (N) demande une lecture sans verrouillage (UPDATE impossible) xx = ON en cas d'erreur d'entrée/sortie yy = ON en fin de fichier |
CL0N01Factor1+++++++Opcode&ExtFactor2+++++++Result++++++++Len++D+HiLoEq C READP (N) Fichier (DS) xxyy Format Même caractéristique que READ,sauf que la lecture est faite en ordre inverse (du dernier au premier) et donc yy = début de fichier. CL0N01Factor1+++++++Opcode&ExtFactor2+++++++Result++++++++Len++D+HiLoEq Arg. CHAIN (N) Fichier (DS) zzxx Format Accès direct/même caractéristiques pour facteur 2,ZR et N que READ Si le fichier est utilisé sur le rang (sans clé ou non utilisée), facteur 1 doit contenir un n° de rang (const. ou zone num. 0 décimales) Si le fichier est utilisé avec clé, facteur 1 doit contenir un argument de recherche comparable à la clé du fichier zz = ON si l'enregistrement n'est pas trouvé xx = ON en cas d'erreur d'entrée/sortie. |
1/ nom de zone L'argument de recherche peut-être une clé partielle Si plusieurs enregistrements correspondent à l'argument, le premier (dans l'ordre des clés) est retourné au programme. sinon, indiquez 2/ nom de KLIST,pour clé composée ++++ CL0N01Factor1+++++++Opcode&ExtFactor2+++++++Result++++++++Len++D+HiLoEq C nom KLIST ^ KFLD societe à utiliser en KFLD nocli facteur 1 du CHAIN ... Les zones KFLD doivent être comparables une à une avec les clés du fichier (même définition, même longueur), le nom n'importe pas. |
3/ nom de DS déclarée par LIKERCD [V5R20 uniquement] ++++ DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++Comments++++++++++++ Dnom DS LIKEREC(nom-format : *KEY) à utiliser en traitement format libre /free CHAIN %KDS(nom) fichier ; /end-free 4/ liste de champs utilisée directement lors du CHAIN [V5R20 uniquement] /free CHAIN (societe : nocli) fichier ; /end-free |
CL0N01Factor1+++++++Opcode&ExtFactor2+++++++Result++++++++Len++D+HiLoEq Arg. SETLL Fichier aabbcc Positionnement (pas de lecture) sur le premier enregistrement correspondant à l'argument de recherche Si aucun enregistrement ne correspond, positionnement sur le premier enreg. ayant une clé plus grande à l'argument. aa = non positionné (arg. supérieur à la plus grande des clés) bb = erreur E/S cc = positionné par égalité ainsi aa indique un "non-positionnement" naa et ncc indique un positionnement par > naa et cc indique un positionnement par = |
exemple : F1 Codop F2 >><<== ............... 'A1' SETLLfichier 80 81 : rang ! clé : --> position sur rang 1 (80 = OFF, 81 = ON) : 1 ! A1 : : 2 ! A2 : 'A3' SETLLfichier 80 81 : 3 ! B2 : --> position sur rang 3 (80 = OFF, 81 = OFF) : 4 ! C1 : : 5 ! C1 : 'FF' SETLLfichier 80 81 : 6 ! D1 : --> position sur aucun enreg (80 = ON,81 = OFF) :.............: 'C1' SETLLfichier 80 81 --> position sur rang 4 (80 = OFF, 81 = ON) CL0N01Factor1+++++++Opcode&ExtFactor2+++++++Result++++++++Len++D+HiLoEq Arg. SETGT Fichier aabb Positionnement (pas de lecture) sur le premier enregistrement ayant une clé plus grande à l'argument. (pratique pour lire le dernier enregistrement d'un groupe =SETGT + REDPE) aa = non positionné (arg. supérieur à la plus grande des clés) bb = erreur E/S |
exemple : F1 Codop F2 >><<== ............... 'A1' SETGTfichier 80 : rang ! clé : --> position sur rang 2 (80 = OFF) : 1 ! A1 : : 2 ! A2 : 'A3' SETGTfichier 80 : 3 ! B2 : --> position sur rang 3 (80 = OFF) : 4 ! C1 : : 5 ! C1 : 'FF' SETGTfichier 80 : 6 ! D1 : --> position sur aucun enreg (80 = ON) :.............: 'C1' SETGTfichier 80 --> position sur rang 6 (80 = OFF) CL0N01Factor1+++++++Opcode&ExtFactor2+++++++Result++++++++Len++D+HiLoEq Arg. READE (N) Fichier xxyy Lecture séquentielle de l'enregistrement suivant, SI la clé de l'enreg. est identique à argument (clé complète ou clé partielle), SINON fin de fichier "logique" signalée par yy = ON. |
CL0N01Factor1+++++++Opcode&ExtFactor2+++++++Result++++++++Len++D+HiLoEq Arg. READPE(N) Fichier xxyy Idem READE, mais en lecture arrière (yy = "début de fichier") CL0N01Factor1+++++++Opcode&ExtFactor2+++++++Result++++++++Len++D+HiLoEq UNLOCK Fichier yy Déverrouille l'enregistrement verrouillé par le programme en cours pour ce fichier. Le fichier doit être ouvert en mise à jour (U). Si aucun enregistrement n'est verrouillé, aucune erreur n'est signalée. CL0N01Factor1+++++++Opcode&ExtFactor2+++++++Result++++++++Len++D+HiLoEq (*NOKEY) CLEAR Format Réinitialise une structure de donnée (Format de fichier par exemple) Si *NOKEY est indiqué en facteur 1, les zones clé de ce fichier NE SONT PAS remises à l'état initial. |
CL0N01Factor1+++++++Opcode&ExtFactor2+++++++Result++++++++Len++D+HiLoEq WRITE Format (DS) xxyy Fichier Ecriture dans un fichier d'un nouvel enregistrement Pour les fichiers en interne utiliser Fichier en facteur 2 et un nom de DS en zone résultat. Pour les fichiers en externe, nom de format ! CL0N01Factor1+++++++Opcode&ExtFactor2+++++++Result++++++++Len++D+HiLoEq UPDATE Format (DS) xxyy Fichier Mise à jour du dernier enregistrement lu (même syntaxe que WRITE) - mise à jour partielle [V5R20 uniquement] - UPDATE admet une liste des zones à modifier avec la fonction %FIELDS() UPDATE format %FIELDS(nom : adr1 : tel) ; |
CL0N01Factor1+++++++Opcode&ExtFactor2+++++++Result++++++++Len++D+HiLoEq (arg.) DELETE Format (DS) xxyy Fichier Suppression d'un enregistrement (si facteur 1 à blanc = dernier enreg lu) Si facteur 1 est renseigné cela représente un CHAIN + DELETE CL0N01Factor1+++++++Opcode&ExtFactor2+++++++Result++++++++Len++D+HiLoEq EXFMT Format xx POUR UN DSPF : lecture puis écriture d'un format. (équivalent à WRITE suivit de READ) CL0N01Factor1+++++++Opcode&ExtFactor2+++++++Result++++++++Len++D+HiLoEq READC Format xx POUR UN DSPF : lecture séquentielle des enregistrements MODIFIES d'un format d'enregistrement SOUS-FICHIER et voir COMMIT et ROLBK pour les fichiers B de D sous contrôle de validation. |
Depuis la version 4.20 de l'OS les indicateurs sur les ordres d'E/S sont facultatifs et remplacés par les fonctions : %EOF | vrai en fin de fichier (READ, READP, READE, ...) | %EQUAL | vrai si SETLL est positionné | %FOUND | vrai si la dernière E/S a trouvé (SETLL,SETGT,CHAIN,DELETE) | %ERROR | signale une erreur en utilisant l'option (E) sur l'ordre C code chain ARTICLE C IF %FOUND C .... C .... C ENDIF C code chain ARTICLE C code chain ENTETCDE C IF not %FOUND(ARTICLE) and %FOUND(ENTETCDE) C .... C ENDIF |
La même chose en format libre. rappellez vous, dans ce contexte la règle est : ORDRE(opt) F1 F2 ; //recherche de l'article CHAIN code ARTICLE ; IF %FOUND ; .... ; .... ; ENDIF; //recherche de l'article et de ces commandes chain code ARTICLE ; chain code ENTETCDE; IF not %FOUND(ARTICLE) and %FOUND(ENTETCDE); .... ENDIF; |