Fil d’Ariane du forum – Vous êtes ici :ForumForums techniques: AS/400Lecture des enregistrements d'un …
Vous devez vous identifier pour créer des messages et des sujets.

Lecture des enregistrements d'un fichier dans l'IFS via RPGLE

Bonsoir,

J'ai modifié mon programme pour utiliser les fonction _C_IFS_xxxxx et j'ai un problème ! ! ! !

Au lieu de me lire mes 2 enregistrements, il m'en lit 8.
Le 1er puis le 2ème puis de nouveau le 1er et encore le 2ème etc... pour aboutir à 8 lectures dans la boucle du fgets

Mais que se passe-t-il ? ? ?

FRED

J'ai essayé avec un fichier construit directement dans l'IFS, puis avec un autre issu de Windows, je n'ai pas eu de problèmes.
Est-ce que la fin de ligne est bien gérée ?
(ligne dow (fgets(%addr(data): %size(data): fd) *null);
)

Bonjour,

Voici mon code :
nomfic = '/fic1.TXT';

fd = fopen(%trim(nomfic): 'r');

if fd = *null;
// erreur ouverture
ptrToErrno = get_errno();
idmsg = 'Erreur ouverture CPE' + %char(errno);
dsply idmsg;
idmsg = ' sur le fichier ' + %trim(nomfic) ;
dsply idmsg;
*inlr = *on;
return;
endif;

// lecture du fichier
dow (fgets(%addr(data): %size(data): fd) *null);
FDEQTZ =
%subst(%str(%addr(data)):1:%len(%trim(%str(%addr(data))))-1);
dsply FDEQTZ;
enddo;

// Fermeture du fichier
ret = fclose(fd);

et le résultat :

ent0908061513.CSV
lig0908061513.CSV
ent0908061513.CSV
lig0908061513.CSV
ent0908061513.CSV
lig0908061513.CSV
ent0908061513.CSV
lig0908061513.CSV

Alors que mon fichier n'a que 2 enregistrements...

Est-ce qu'il ne manque pas
*inlr = *on;
return;

en fin de programme ?

Ce morceau de code n'est qu'une partie de mon programme qui lui contient bien l'instruction *inlr = *on; 😀

Je ne vois pas. Comme je l'ai indiqué, cela fonctionne pour moi (nous sommes en V5R4), avec le code que j'ai indiqué plus haut et un fichier de test généré comme suit dans l'IFS :
print 'Hello, world' > fichtest.txt
print 'Goodbye, world' >> fichtest.txt

Peut-être cela vaut-il la peine d'essayer avec un tel fichier ?

Fred,
Fais un copier-coller de ton fichier fic1.TXT ici stp.

En fait, j'ai 2 enregistrements :

ent0908061513.CSV
lig0908061513.CSV

Mon programme ne boucle pas, il traite 8 lectures

Bizarre, bizarre ! J'ai fait un essai comme remit mais à partir du fichier fic1.txt que tu viens de coller et je ne rencontre pas d'ennuis. Le seul truc un peu étrange et qui je pense est à la source de ton problème, c'est ce
%subst(%str(%addr(data)):1:%len(%trim(%str(%addr(data))))-1);
qui m'échappe, n'en voyant pas l'utilité, car
%str(%addr(data));
devant a priori suffire. Cela laisse supposer que ton fichier entrée n'est pas structuré comme on imagine qu'il devrait l'être.

Aussi, si tu veux, envoie-moi un mel à mon adresse privée ci-contre en y joignant le fichier fic1.txt stp, pour que j'y voie un peu + clair et puisse reproduire au plus près le cas qui te préoccupe.

Comment mettre une PJ à partir du lien sur ton adresse mail sur le forum ???