Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2481 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  [ Résolu] [Cobol] chaîne vers numérique

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ Résolu] [Cobol] chaîne vers numérique

n°1494358
Kilyn
Milé sek milé
Posté le 20-12-2006 à 16:06:56  profilanswer
 

:hello:  

 

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 cité 1 fois
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.
mood
Publicité
Posté le 20-12-2006 à 16:06:56  profilanswer
 

n°1494384
polo021
Posté le 20-12-2006 à 16:44:46  profilanswer
 

Kilyn a écrit :

:hello:  
 
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.


 
Essaye ca pour ta déclaration :  
05  CHAINE
     10 NOMBRE PIC 9(18).
 
ou meme avec un 88

Message cité 1 fois
Message édité par polo021 le 20-12-2006 à 16:45:25
n°1494411
Kilyn
Milé sek milé
Posté le 20-12-2006 à 17:17:51  profilanswer
 

polo021 a écrit :

Essaye ca pour ta déclaration :
05  CHAINE
     10 NOMBRE PIC 9(18).

 

ou meme avec un 88


 :hello:

 

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.

 


---------------
Nous ne sommes pas des êtres humains vivant une exprérience spirituelle. Nous sommes des êtres spirituels vivant une expérience humaine.
n°1494417
polo021
Posté le 20-12-2006 à 17:24:01  profilanswer
 

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.

Message cité 1 fois
Message édité par polo021 le 20-12-2006 à 17:26:18
n°1494420
Kilyn
Milé sek milé
Posté le 20-12-2006 à 17:27:22  profilanswer
 

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.
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).

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 :pfff: ).

 

PS : Elle est longue cette compilation.

 



---------------
Nous ne sommes pas des êtres humains vivant une exprérience spirituelle. Nous sommes des êtres spirituels vivant une expérience humaine.
n°1494432
Kilyn
Milé sek milé
Posté le 20-12-2006 à 17:42:56  profilanswer
 

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 @$^§.  :fou:


Message édité par Kilyn le 20-12-2006 à 17:44:46

---------------
Nous ne sommes pas des êtres humains vivant une exprérience spirituelle. Nous sommes des êtres spirituels vivant une expérience humaine.
n°1494445
olivthill
Posté le 20-12-2006 à 18:03:50  profilanswer
 

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.
*=======================
PROGRAM-ID. STR2DEC.
* Programme pour convertir une chaine de caractère en un nombre
 
DATA DIVISION.
*=============
WORKING-STORAGE SECTION.
*-----------------------
77  INPUT_BUFFER         PIC X(10).
77  DECIMAL_NUMBER       PIC 9(10).
77  TMP1_NUM             PIC 9(10) COMP.
 
77  CHAR                 PIC X JUST.
77  NUM                  PIC 9.
77  I                    PIC 9(2).
* =================================================================
PROCEDURE DIVISION.
 
MAIN.
*----
*   1. Getting a string of characters
    DISPLAY "INPUT A DECIMAL NUMBER"
    ACCEPT INPUT_BUFFER
 
*   2. Converting a string of characters to a decimal number
    INITIALIZE DECIMAL_NUMBER
    MOVE 1 TO I
    MOVE INPUT_BUFFER(I:1) TO CHAR
    ADD 1 TO I
    PERFORM UNTIL CHAR < "0" OR > "9" OR I > 10
       MOVE CHAR TO NUM
       COMPUTE DECIMAL_NUMBER = DECIMAL_NUMBER * 10 + NUM
       MOVE INPUT_BUFFER(I:1) TO CHAR
       ADD 1 TO I
    END-PERFORM
 
    DISPLAY DECIMAL_NUMBER WITH NO ADVANCING
    STOP RUN
    .

n°1494455
Kilyn
Milé sek milé
Posté le 20-12-2006 à 18:17:41  profilanswer
 

Bon ça marche avec le redefines. J'avais juste oublié d'enlever le MOVE CHAINE TO NOMBRE. :pfff:


---------------
Nous ne sommes pas des êtres humains vivant une exprérience spirituelle. Nous sommes des êtres spirituels vivant une expérience humaine.
n°1494459
polo021
Posté le 20-12-2006 à 18:24:12  profilanswer
 

\o/ j'ai pas tout oublié

n°1494798
Kilyn
Milé sek milé
Posté le 21-12-2006 à 12:50:58  profilanswer
 

J'ai parlé trop vite. Ça ne marche pas. :cry:  J'opte donc pour la solution de olivthill. Il faudrait qu'il m'explique le type des variables et à quoi sert DECIMAL_NUMBER.


---------------
Nous ne sommes pas des êtres humains vivant une exprérience spirituelle. Nous sommes des êtres spirituels vivant une expérience humaine.
mood
Publicité
Posté le 21-12-2006 à 12:50:58  profilanswer
 

n°1494800
Kilyn
Milé sek milé
Posté le 21-12-2006 à 13:03:09  profilanswer
 

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.  :love:  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.  :jap:


Message édité par Kilyn le 21-12-2006 à 13:03:45

---------------
Nous ne sommes pas des êtres humains vivant une exprérience spirituelle. Nous sommes des êtres spirituels vivant une expérience humaine.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  [ Résolu] [Cobol] chaîne vers numérique

 

Sujets relatifs
[Résolu][C#] Générer un PDF avec des images Dynamiques (ASP.Net 1.1)[Résolu] Problème de header session_start()
[Résolu] VBA dans excel pour lancer deux lignes de commandes DOS[Javascript] la fonction charAt(); [résolu]
[Résolu ] [Cobol et JCL] Paramètre d'un programmerecupéré debut d'une chaine de caractere
[RESOLU]Formulaire et tableau: maj tableCodage chaine caractère.
[Résolu] [MySQL] Contenu du répertoire data 
Plus de sujets relatifs à : [ Résolu] [Cobol] chaîne vers numérique


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR