RPG (3 et 4, free), CL, SQL, etc...
manae
Messages : 58 Enregistré le : mar. 21 juin 2011, 07:08:24
Message
par manae » jeu. 15 sept. 2016, 10:15:24
Sans message d'erreur, impossible d’écrire dans un fichier texte.
Le fichier est bien créé mais reste vide.
Voici le code que j'utilise.
Code : Tout sélectionner
**free
ctl-opt option(*srcstmt) dftactgrp(*no);
dcl-pr OpenFile pointer extproc('_C_IFS_fopen');
*n pointer value; // file name
*n pointer value; // file mode
END-PR;
dcl-pr WriteFile pointer extproc('_C_IFS_fputs');
*n pointer value; // string to write
*n pointer value; // open mode
END-PR;
dcl-pr CloseFile extproc('_C_IFS_fclose') ;
*n pointer value ; // Misc pointer
end-pr ;
dcl-s PathFile char(50) ;
dcl-s OpenMode char(100);
dcl-s FilePtr pointer inz;
dcl-s SndData char(25);
dcl-s i packed(3);
PathFile = '/test_write.txt' + x'00';
OpenMode = 'w,o_ccsid=1252' + x'00';
FilePtr = OpenFile(%addr(PathFile):%addr(OpenMode));
if (FilePtr = *null) ;
dsply ('Unable to open file (1)');
return;
endif;
CloseFile(%addr(PathFile));
OpenMode = 'a,o_ccsid=1252' + x'00';
FilePtr = OpenFile(%addr(PathFile):%addr(OpenMode));
if (FilePtr = *null);
dsply ('Unable to open file (2)');
return;
endif;
for i = 1 to 10;
SndData = 'Write No. '+ %char(i)+x'0D'+x'0A';
WriteFile(%addr(SndData):FilePtr);
endfor;
CloseFile(%addr(PathFile));
*inlr=*on;
**end-free
Cordialement
cmasse
Site Admin
Messages : 813 Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :
Message
par cmasse » jeu. 15 sept. 2016, 16:21:01
Christian Massé (Volubis.fr)
cmasse
Site Admin
Messages : 813 Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :
Message
par cmasse » jeu. 15 sept. 2016, 16:27:39
Pour infos, OPTIONS(*STRING) évite d'ajouter X'00' et de passer %ADDR()
Code : Tout sélectionner
**free
ctl-opt option(*srcstmt) dftactgrp(*no);
dcl-pr OpenFile pointer extproc('_C_IFS_fopen');
*n pointer value options(*string); // file name
*n pointer value options(*string); // file mode
END-PR;
dcl-pr WriteFile pointer extproc('_C_IFS_fputs');
*n pointer value options(*string); // string to write
*n pointer value; // open mode
END-PR;
dcl-pr CloseFile extproc('_C_IFS_fclose') ;
*n pointer value ; // Misc pointer
end-pr ;
dcl-s PathFile char(50) ;
dcl-s OpenMode char(100);
dcl-s FilePtr pointer inz;
dcl-s SndData char(25);
dcl-s i packed(3);
PathFile = '/formation/test_write.txt';
OpenMode = 'w, o_ccsid=1252';
FilePtr = OpenFile(PathFile:OpenMode);
if (FilePtr = *null) ;
dsply ('Unable to open file (1)');
return;
endif;
CloseFile(FilePtr);
OpenMode = 'w';
FilePtr = OpenFile(PathFile:OpenMode);
if (FilePtr = *null);
dsply ('Unable to open file (2)');
return;
endif;
for i = 1 to 10;
SndData = 'Write No. '+ %char(i)+x'0D'+x'0A';
WriteFile(SndData:FilePtr);
endfor;
CloseFile(FilePtr);
*inlr=*on;
Christian Massé (Volubis.fr)
manae
Messages : 58 Enregistré le : mar. 21 juin 2011, 07:08:24
Message
par manae » jeu. 15 sept. 2016, 17:05:08
Merci pour votre réponse.
Cordialement
manae
Messages : 58 Enregistré le : mar. 21 juin 2011, 07:08:24
Message
par manae » mer. 21 sept. 2016, 14:27:22
Bonjour,
j'ai fait les modifs que vous préconisez.
Aprés un essai je constate un effet bizarre sur le nom des fichiers dans l'ifs
Opt Lien objet Type Attribut Texte
__ test_write.txt STMF
__ test_write.txt > STMF
Si dans le code je mets PathFile = '/marc/test_write.txt'+x'00'; j'ai la première ligne
Si je mets PathFile = '/marc/test_write.txt'; j'obtiens la 2éme ligne avec un >
Je pense que le x'00' reste utile pour la fin du nom de fichier.
Qu'en pensez-vous ?
Cordialement
[/code]
cmasse
Site Admin
Messages : 813 Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :
Message
par cmasse » lun. 26 sept. 2016, 07:29:04
doit ajouter un X'00 ou zéro héxa (obligatoire pour les chaines en C) automatiquement.
donc je dirais, non pas de concaténation de x'00'
ensuite WRKLNK ajoute un > à chaque fois que le nom de fichier ne s'affiche pas entièrement, F22 permet de voir le nom en entier....
Christian Massé (Volubis.fr)