Procédure @CSV pour enregistrement dans fichier externe |
gecorchard
|
Bonjour,
en réponse à une question du forum concernant l'enregistrement de données dans un fichier externe, je propose la procédure @CSV suivante. L'inclusion d'un fichier externe avec l'appel "UTIL PROC" ne marche pas. Une astuce est d'utiliser "OPTI DONN NOMFICH;" qui ferme le programme en cours et lancer Castem sur le fichier NOMFICH, sans, entre-temps effacer le contenu de la mémoire (cf. http://rdforum.free.fr/cast3m/viewtopic.php?t=178). L'aide pour l'utilisation se trouve au début de la définition. N'hésitez pas à m'envoyer vos commentaires et suggestions. Je cherche toujours en particulier le moyen d'utiliser un fichier externe pour stocker mes procédures de façon élégante. -------------------------------------------------------------------------------------- * DEFINITION PROCEDURE @CSV *$$$$ @CSV * @CSV PROCEDUR 2010-10-29 *----------------------------------------------------------- ****** PROCEDURE @CSV ****** * Gaël Ecorchard (IRCCyN) *----------------------------------------------------------- * SAUVEGARDE UNE TABLE (SOUS-STRUCTURE PROGRESSION) DANS UN * FICHIER CSV. * EXEMPLE: @CSV TAB1 'FICHIER.CSV'; OU TAB1 PEUT ETRE DE LA * FORME TAB1.X, TAB1.Y AVEC X,Y DES PROGRESSIONS DE * LONGUEUR IDENTIQUE. *----------------------------------------------------------- DEBP @CSV TAB1*TABLE FICHIER*MOT; * Format des nombres: FOR = '(F10.3)'; * Separateur: SEP = ','; TABI = INDE TAB1; NCOL = DIME TAB1; NLIG = DIME TAB1 . (TABI . 1); II = VALE IMPR; OPTI IMPR 10 IMPR FICHIER; J = 1; * Pour pouvoir depasser 72 caracteres, on cree plusieurs * chaines et on rentre NNPC nombres par chaine. * Nombre de nombres par chaine (entier): NNPC = 4; INDJ = TABI . J; TXT1 = CHAI INDJ; TXT2 = TEXT ' '; TXT3 = TEXT ' '; TXT4 = TEXT ' '; SI (EXIS TABI (J + 1)); REPE BOUCJ (NCOL - 1); J = J + 1; INDJ = TABI . J; SI ((&BOUCJ / NNPC) EGA 0); TXT1 = CHAI TXT1 SEP INDJ; FINS; SI ((&BOUCJ / NNPC) EGA 1); TXT2 = CHAI TXT2 SEP INDJ; FINS; SI ((&BOUCJ / NNPC) EGA 2); TXT3 = CHAI TXT3 SEP INDJ; FINS; SI ((&BOUCJ / NNPC) >EG 3); TXT4 = CHAI TXT4 SEP INDJ; FINS; FIN BOUCJ; FINS; MESS TXT1 TXT2 TXT3 TXT4; I = 1; REPE BOUCI NLIG; J = 1; INDJ = TABI . J; VECJ = TAB1 . INDJ; VALIJ = EXTR VECJ I; TXT1 = CHAI FORMAT FOR VALIJ; TXT2 = TEXT ' '; TXT3 = TEXT ' '; TXT4 = TEXT ' '; SI (EXIS TABI (J + 1)); J = J + 1; REPE BOUCJ (NCOL - 1); INDJ = TABI . J; VECJ = TAB1 . INDJ; VALIJ = (EXTR VECJ I); TXTTMP = CHAI FORMAT FOR VALIJ; SI ((&BOUCJ / NNPC) EGA 0); TXT1 = CHAI TXT1 SEP TXTTMP; FINS; SI ((&BOUCJ / NNPC) EGA 1); TXT2 = CHAI TXT2 SEP TXTTMP; FINS; SI ((&BOUCJ / NNPC) EGA 2); TXT3 = CHAI TXT3 SEP TXTTMP; FINS; SI ((&BOUCJ / NNPC) >EG 3); TXT4 = CHAI TXT4 SEP TXTTMP; FINS; J = J + 1; FIN BOUCJ; FINS; MESS TXT1 TXT2 TXT3 TXT4; I = I + 1; FIN BOUCI; OPTI IMPR II; FINP; * L'inclusion d'un fichier externe avec l'appel "UTIL PROC" ne marche pas. * Une astuce est d'utiliser "OPTI DONN NOMFICH;" qui ferme le programme en * cours et lance Castem sur le fichier NOMFICH, sans, entre-temps effacer * le contenu de la m?moire * (cf. http://rdforum.free.fr/cast3m/viewtopic.php?t=178). * Nous sommes ici dans un sous programme, nous devons donc revenir au * programme principal qui est identifi? par MAINPROG. Pour ce faire, il * faut avoir l'instruction "MAINPROG = PROG;", o? PROG est le nom du * fichier principal, dans le fichier principal. * De plus, pour ?viter d'appeler plusieurs fois le sous-programme, on utilise * Appel de sous-programmes * SI ((VALE SAUV) EGA ; * OPTI SAUV 99 ; * OPTI DONN 'csv.proc' ; * FINSI ; OPTI DONN MAINPROG; -------------------------------------------------------------------------------------- |
||||||||||||
_________________ Gaël Ecorchard |
Procédure @CSV pour enregistrement dans fichier externe |
|
||
Powered by phpBB Forum © phpBB Group
Design by phpBBStyles.com | Styles Database.
Content © RDforum.free.fr/Cast3M
Design by phpBBStyles.com | Styles Database.
Content © RDforum.free.fr/Cast3M