chaîne vers numérique [ Résolu] [Cobol] - Divers - Programmation
Marsh Posté le 20-12-2006 à 16:44:46
Kilyn a écrit : |
Essaye ca pour ta déclaration :
05 CHAINE
10 NOMBRE PIC 9(18).
ou meme avec un 88
Marsh Posté le 20-12-2006 à 17:17:51
polo021 a écrit : Essaye ca pour ta déclaration : ou meme avec un 88 |
Merci pour ta réponse. Le problème c'est que je récupère le contenu d'une SYSIN dans CHAINE qui doit forcément être un PIC X. Et ta solution ne compile pas.
Marsh Posté le 20-12-2006 à 17:24:01
Ca fait longtemps que je n'ai plus fait de cobol mais quand tu déclares sur plusieurs niveaux, le niveaux supérieur est toujours implicitement reconnu comme du char.
Qu'as tu comme erreur qd tu compiles ceci ?
05 CHAINE2.
10 NOMBRE PIC 9(18).
MOVE CHAINE (de ta sysin) TO CHAINE2.
ou bien quand tu compiles ceci? :
05 CHAINE2 PIC X(18).
05 NOMBRE redefines CHAINE2 PIC 9(18).
MOVE CHAINE (de ta sysin) TO CHAINE2.
Marsh Posté le 20-12-2006 à 17:27:22
polo021 a écrit : Ca fait longtemps que je n'ai plus fait de cobol mais quand tu déclares sur plusieurs niveaux, le niveaux supérieur est toujours implicitement reconnu comme du char. MOVE CHAINE (de ta sysin) TO CHAINE2.
|
Je viens de penser au REDEFINES donc j'attends la fin de la compilation (j'avais fait une faute de frappe pour le mot clé REDEFINES ).
PS : Elle est longue cette compilation.
Marsh Posté le 20-12-2006 à 17:42:56
Bon quel que soit la méthode ça me fait ça à la compilation :
Data items "CHAINE (ALPHANUMERIC REFERENCE MODIFIED ITEM)" and "NOMBRE (NUMERIC INTEGER)" had overlapping storage. An overlapping move will occur at execution time
A reference modifier with a non-positive value was found. A value of 1 was substituted.
Vais me pendre si on ne me débarasse pas de ce langage de @$^§.
Marsh Posté le 20-12-2006 à 18:03:50
Bonjour,
Il n'existe pas de conversion implicite entre de l'alpha-numérique et du numérique en Cobol. Il faut donc écrire soi-même une routine de conversion ou utiliser celle d'une bibliothèque.
Voici un petit programme de conversion :
IDENTIFICATION DIVISION. |
Marsh Posté le 20-12-2006 à 18:17:41
Bon ça marche avec le redefines. J'avais juste oublié d'enlever le MOVE CHAINE TO NOMBRE.
Marsh Posté le 21-12-2006 à 12:50:58
J'ai parlé trop vite. Ça ne marche pas. J'opte donc pour la solution de olivthill. Il faudrait qu'il m'explique le type des variables et à quoi sert DECIMAL_NUMBER.
Marsh Posté le 21-12-2006 à 13:03:09
olivthill a écrit : Bonjour, Il n'existe pas de conversion implicite entre de l'alpha-numérique et du numérique en Cobol. Il faut donc écrire soi-même une routine de conversion ou utiliser celle d'une bibliothèque. Voici un petit programme de conversion : |
Bon j'ai compris que DECIMAL_NUMBER était le nombre en sortie qu'on voulait. Et ça marche. Suis trop contente. Merci à toi olivthill. Merci aussi à polo021 d'avoir essayé de m'aider. Grâce à vous et à ce forum je ne perds pas trop de temps sur ces difficultés techniques.
Marsh Posté le 20-12-2006 à 16:06:56
Plantage du décor :
Deux variables :
05 CHAINE PIC X(18).
05 NOMBRE PIC 9(18).
La variable CHAINE contient un numérique de taille variable (ça peut être 5 comme 523487936545632018).
Besoin : Mettre CHAINE DANS NOMBRE.
Problème : Ça ne marche pas quand on a 5 dans CHAINE (quand toute la chaîne n'est pas remplie). En debug, au moment du MOVE CHAINE TO NOMBRE j'ai INVALID DECIMAL.
Question : Comment faire ?
Idée : Je dois m'y prendre mal avec mes tentatives de cadrage à droite (JUST RIGHT) ou encore le remplacement (INSPECT CHAINE REPLACING LEADING SPACES BY ZEROES).
Merci pour vos réponses.
Message édité par Kilyn le 21-12-2006 à 13:08:17
---------------
Nous ne sommes pas des êtres humains vivant une exprérience spirituelle. Nous sommes des êtres spirituels vivant une expérience humaine.