Aller au contenu
Base de données · 4 / 5

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.

92la longueur par défaut
6 + 6séquence et date, avant le texte
80caractères de source en 92
100caractères de source en 112

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.

FichierSourcesValeur par défaut de
QRPGLESRCRPG ILE CRTBNDRPG, CRTRPGMOD
QCLSRCCL CRTBNDCL, CRTCLPGM
QDDSSRCDDS 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 :

Un enregistrement de fichier source Un enregistrement de fichier source de 92 octets : SRCSEQ, le numéro de séquence, 6 chiffres dont 2 décimales ; SRCDAT, la date de la ligne, 6 chiffres ; SRCDTA, le texte du source, 80 caractères. Avec RCDLEN(112), SRCDTA fait 100 caractères. SRCSEQ6 chiffres (6,2) SRCDAT6 chiffres SRCDTARCDLEN - 12 caractères RCDLEN(92) : 6 + 6 + 80 caractères de source RCDLEN(112) : 6 + 6 + 100 caractères de source
La longueur d'enregistrement moins 12 : c'est la place laissée au texte du source.

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.
Vérifiez la longueur avant de copier un source. Une copie vers un fichier plus court tronque sans prévenir : le dégât n'apparaît qu'à la compilation, ou pire, dans un commentaire coupé qu'on ne remarque pas.

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é)
PointFichier sourcePF de données
Type de fichier (FILETYPE)*SRC (SOURCE)*DATA (DATA)
ZonesImposées : SRCSEQ, SRCDAT, SRCDTALes vôtres, décrites en DDS ou en SQL
MembresUn par source, nombre illimité par défautEn règle générale un seul
Membre à la créationAucun (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 membreRPGLE, CLLE, PF, LF… (SRCTYPE)Sans objet
UsageÉditeurs et compilateursProgrammes 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 :

  1. 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.
  2. 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.