Le fichier source : un PF où chaque membre est un programme
QRPGLESRC, QCLSRC, QDDSSRC : les sources de l'IBM i vivent dans des fichiers physiques un peu particuliers. Comment les créer, pourquoi la longueur d'enregistrement compte (et ce qui arrive à une ligne trop longue), et ce qui les distingue d'un PF de données, démontré sur un IBM i 7.5.
En une phrase
Un fichier source est un fichier physique de type
*SRC, aux trois zones imposées (numéro de séquence, date, texte), où chaque
membre contient un source : un programme, un CL, une description
DDS. C'est le fichier multi-membre que tout le monde utilise.
Créer un fichier source
Une seule commande, CRTSRCPF. Notre démonstration en a créé trois :
CRTSRCPF FILE(JOBIPOK/QDDSSRC) RCDLEN(92) TEXT('Sources DDS de la demonstration')
CRTSRCPF FILE(JOBIPOK/QRPGLESRC) RCDLEN(112)
CRTSRCPF FILE(JOBIPOK/QCLSRC) RCDLEN(92)
CPC7301 Fichier QRPGLESRC créé dans la bibliothèque JOBIPOK.
Le fichier naît sans membre : le paramètre MBR de CRTSRCPF vaut *NONE
par défaut, et le nombre de membres est illimité (MAXMBRS(*NOMAX)). Chaque source devient
ensuite un membre, créé par l'éditeur (SEU, VS Code avec Code for IBM i) ou par
ADDPFM, avec un type de source : RPGLE, CLLE, PF, LF…
Les noms habituels ne sont pas une obligation, mais ce sont les valeurs par défaut des compilateurs : sans précision, chaque commande cherche son source dans ce fichier, et dans le membre qui porte le nom de l'objet à créer.
| Fichier | Sources | Valeur par défaut de |
|---|---|---|
QRPGLESRC | RPG ILE | CRTBNDRPG, CRTRPGMOD |
QCLSRC | CL | CRTBNDCL, CRTCLPGM |
QDDSSRC | DDS des fichiers physiques et logiques | CRTPF, CRTLF |
Notre QDDSSRC contient ainsi un membre par fichier de la démonstration, chacun de son type :
SELECT SYSTEM_TABLE_MEMBER, SOURCE_TYPE, NUMBER_ROWS
FROM QSYS2.SYSPARTITIONSTAT
WHERE TABLE_SCHEMA = 'JOBIPOK' AND TABLE_NAME = 'QDDSSRC'
ATTAQUE PF 7 POKEFEU LF 4
POKEATK LF 5 POKEJOIN LF 9
POKEDEX PF 6 POKEMON PF 7
POKETYPE LF 4
La longueur d'enregistrement
Chaque ligne de source est un enregistrement de trois zones :
Le catalogue SQL le confirme sur nos deux fichiers :
SELECT SYSTEM_TABLE_NAME, COLUMN_NAME, DATA_TYPE, LENGTH, NUMERIC_SCALE
FROM QSYS2.SYSCOLUMNS WHERE TABLE_SCHEMA = 'JOBIPOK' …
QCLSRC SRCSEQ NUMERIC 6 2
QCLSRC SRCDAT NUMERIC 6 0
QCLSRC SRCDTA CHAR 80
QRPGLESRC SRCSEQ NUMERIC 6 2
QRPGLESRC SRCDAT NUMERIC 6 0
QRPGLESRC SRCDTA CHAR 100
92 est la longueur par défaut de CRTSRCPF : IBM la décrit comme 6 octets de numéro de séquence, 6 de
date et 80 de source. 80 colonnes, c'est la largeur des sources en colonnes : spécifications RPG,
DDS, CL. Le RPG en format libre, lui, écrit volontiers des lignes plus longues : nos exemples en
contiennent de 83 caractères. D'où l'habitude de créer QRPGLESRC en RCDLEN(112), soit
100 caractères de source.
Ce qui arrive à une ligne trop longue
Copions le programme LIREATK, écrit dans QRPGLESRC (112), vers QCLSRC (92). CPYF refuse d'abord, puis
accepte avec FMTOPT(*MAP) :
CPYF FROMFILE(JOBIPOK/QRPGLESRC) TOFILE(JOBIPOK/QCLSRC) FROMMBR(LIREATK) TOMBR(COURT)
CPF2962 FMTOPT(*MAP) ou FMTOPT(*NOCHK) obligatoire pour la copie.
CPYF … FMTOPT(*MAP)
CPC2955 22 enregistrement(s) du membre LIREATK copié(s).
Aucun avertissement. Pourtant, les deux lignes de 83 caractères ont perdu leurs trois derniers :
Avant : snd-msg %trim(format) + ' : ' + %trim(attaque) + ' (' + %char(puiss) + ')';
Après : snd-msg %trim(format) + ' : ' + %trim(attaque) + ' (' + %char(puiss) + '
La copie ne compile plus :
RNF5177 Opération ENDyy manquante pour le groupe d'opérations DOW
RNF0267 Character literal has missing trailing apostrophe; …
RNS9310 La compilation a échoué. Le programme COURT n'a pas été créé dans la bibliothèque JOBIPOK.
Fichier source ou PF de données ?
Les deux sont des fichiers physiques, attribut PF. Le catalogue
QSYS2.SYSFILES les distingue par leur type :
TABLE_NAME FILE_TYPE MAXIMUM_RECORD_LENGTH NUMBER_MEMBERS MAXIMUM_MEMBERS
POKEMON DATA 27 1 1
QCLSRC SOURCE 92 1 (illimité)
QRPGLESRC SOURCE 112 3 (illimité)
| Point | Fichier source | PF de données |
|---|---|---|
| Type de fichier (FILETYPE) | *SRC (SOURCE) | *DATA (DATA) |
| Zones | Imposées : SRCSEQ, SRCDAT, SRCDTA | Les vôtres, décrites en DDS ou en SQL |
| Membres | Un par source, nombre illimité par défaut | En règle générale un seul |
| Membre à la création | Aucun (MBR(*NONE) par défaut) | Un, du nom du fichier |
| Clé | Aucune par défaut (ordre d'arrivée) | Celle du format, ou aucune |
| Type de membre | RPGLE, CLLE, PF, LF… (SRCTYPE) | Sans objet |
| Usage | Éditeurs et compilateurs | Programmes et requêtes |
Comme tout PF, un fichier source se lit en SQL, à condition de désigner le membre par un ALIAS :
CREATE ALIAS JOBIPOK.SRC_LIREATK FOR JOBIPOK.QRPGLESRC (LIREATK);
SELECT SRCSEQ, SRCDAT, SRCDTA FROM JOBIPOK.SRC_LIREATK WHERE SRCSEQ BETWEEN 18 AND 19;
SRCSEQ SRCDAT SRCDTA
18.0 0 endif;
19.0 0 read pokeatk;
La date vaut 0 : ces lignes ont été envoyées par notre outil de démonstration, qui ne la renseigne pas ; c'est une zone que les éditeurs utilisent pour dater les lignes modifiées.
Enfin, un source n'est plus obligé de vivre dans un fichier source : les compilateurs savent aussi
lire un fichier de l'IFS, par le paramètre SRCSTMF de CRTBNDRPG ou de CRTBNDCL, ce qui permet de ranger ses sources dans Git.
À retenir
- CRTSRCPF crée un PF de type *SRC, sans membre, aux membres illimités.
- Longueur = 6 (séquence) + 6 (date) + texte : 92 donne 80 caractères, 112 en donne 100.
- Une copie vers un fichier plus court tronque sans prévenir (CPYF FMTOPT(*MAP)).
- QRPGLESRC, QCLSRC, QDDSSRC sont les noms par défaut des compilateurs.
Sources
Les exemples ont été créés et relevés sur un IBM i 7.5 (voir la méthode). Les définitions et les règles viennent de ces sources, consultées le 16 octobre 2026 :
- IBM i 7.5 Database : Database programming, IBM (PDF). Définitions du fichier physique, du fichier logique (« contains no data ») et du membre ; un seul membre « en règle générale » et au moins un membre avant toute entrée-sortie ; premier membre choisi selon la date et l'heure de création ; fichier de référence de zones et fichier créé MBR(*NONE) ; attributs des fichiers source (92 = 6 + 6 + 80, sans clé, plusieurs membres) ; LF qui présente l'ancien format ; règles des LF de jointure (lecture seule, pas de DFU, clé du fichier primaire, JDFTVAL, un seul format) ; vu de SQL, LF = vues et index.
- L'aide en ligne des commandes citées, livrée avec IBM i 7.5 et reprise en français dans les fiches des commandes CL de ce site. Paramètres de CRTPF, CRTLF, CRTSRCPF, ADDPFM, OVRDBF, UPDDTA, DSPPFM, RGZPFM, CPYF, CRTBNDRPG et CRTBNDCL.
Questions fréquentes
Comment créer un fichier source ?
Avec CRTSRCPF, par exemple CRTSRCPF FILE(MABIB/QRPGLESRC) RCDLEN(112). Le fichier est créé sans membre ; chaque source devient ensuite un membre, avec son type (RPGLE, CLLE, PF, LF…).
Pourquoi un fichier source fait-il 92 de long ?
Chaque ligne contient un numéro de séquence de 6 caractères (SRCSEQ), une date de 6 (SRCDAT) et le texte du source (SRCDTA). Avec la longueur par défaut de CRTSRCPF, 92, il reste 80 caractères de source ; avec 112, il en reste 100.
Quelle longueur choisir pour QRPGLESRC ?
Une longueur supérieure à 92 dès que les lignes dépassent 80 caractères, ce qui arrive vite en format libre : 112 donne 100 caractères. Une ligne trop longue copiée dans un fichier plus court est coupée sans avertissement par CPYF FMTOPT(*MAP), et le source ne compile plus.
Quelle différence entre un fichier source et un PF ?
Un fichier source est un PF de type *SRC : trois zones imposées (SRCSEQ, SRCDAT, SRCDTA), pas de clé, un nombre de membres illimité par défaut, un membre par source avec un type. Un PF de données a son propre format, décrit en DDS ou en SQL, et en règle générale un seul membre.