Précédent   Forum des professionnels en informatique > Autres langages > Autres langages > Cobol
Cobol Forum d'entraide sur la programmation en langage Cobol
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 12/12/2008, 21h23   #1 (permalink)
Nouveau membre du Club
 
Date d'inscription: mai 2008
Messages: 79
Par défaut [AS/400] unstring et string

Bonjour,
j'ai un fichier contenant une dizaine de chaines de caractères (une par ligne). Je dois "décortiquer" chaque chaine de caractère et récupérer différentes informations, ensuite je dois recomposer une nouvelle chaine de caractère et l'écrire dans un autre fichier.
Je n'ai aucun problème pour récupérer une chaine de caractère de mon fichier et écrire la nouvelle chaine dans le deuxième fichier mais j'ai des problèmes pour "décortiquer" la chaine.

Chaque chaine (une ligne) présente dans le fichier est représentée de la facon suivante: UN OU PLUSIEURS BLANCS suivis de DEUX CARACTERES NUMERIQUES suivis de "***" suivi de DIX CARACTERES MAXIMUM suivi de "--" suivi de UN OU PLUSIEURS ESPACES suivis de HUIT CARACTERES NUMERIQUES
ex:
" 10 ***MACHAINEEE-- 12345678"

J'aimerais récupérer les trois données et les placer dans des variables à l'aide de UNSTRING: "10" dans CPT, "MACHAINEEE" dans CHAINE et "12345678" dans NOMBRE.

Pouvez vous m'aider? Merci!
alex2746 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 13/12/2008, 15h13   #2 (permalink)
Modérateur
 
Avatar de Hédhili Jaïdane
 
Date d'inscription: juin 2007
Messages: 1 307
Envoyer un message via MSN à Hédhili Jaïdane Envoyer un message via Yahoo à Hédhili Jaïdane Envoyer un message via Skype™ à Hédhili Jaïdane
Par défaut

Bonjour.

Voici un petit exemple en ILE 400, il y a sûrement d'autres possibilités. Une petite boucle ferait l'affaire aussi.
Code :
0002   IDENTIFICATION DIVISION.
0008   PROGRAM-ID. ALEX.
0009   AUTHOR. H. JAIDANE.
0010   ENVIRONMENT DIVISION.
0011   CONFIGURATION SECTION.
0012   SOURCE-COMPUTER. IBM-AS400.
0013   OBJECT-COMPUTER. IBM-AS400.
0014   SPECIAL-NAMES.
0015                  DECIMAL-POINT IS COMMA
0016                  LOCAL-DATA IS LOCALDATA
0017                  REQUESTOR IS MONTERMINAL.
0018   INPUT-OUTPUT SECTION.
0019   FILE-CONTROL.
0032   DATA DIVISION.
0033   FILE SECTION.
0050   WORKING-STORAGE SECTION.
0050   77  CHAINE pic x(35) value "   10***MACHINEEE--   12345678".
0050   77  CHW    pic x(35).
       77  CH1    pic x(10).
       77  PTR    pic 9(4) comp-4.
       77  NBR    pic xx.
       77  NB1    pic xx.
       77  NB2    pic x(8).
0201   PROCEDURE DIVISION.
0202  0204   TRAITEMENT SECTION.
0209   DEBUT.
           move 0 to PTR.
           inspect CHAINE tallying PTR for leading spaces.
           add 1 to PTR.
           unstring CHAINE into NB1 pointer PTR.
           display PTR "-" NB1 "/" upon MONTERMINAL.
      *
           add 3 to PTR.
           unstring CHAINE delimited by "--" into CH1 pointer PTR.
           display PTR "-" CH1 "/" upon MONTERMINAL.
      *
           unstring CHAINE into CHW pointer PTR.
           move 0 to PTR.
           inspect CHW tallying PTR for leading spaces.
           add 1 to PTR.
           unstring CHW into NB2 pointer PTR.
           display PTR "-" NB2 "/" upon MONTERMINAL.
      *
0210       stop run.
Résultats de l'affichage :
Citation:
0006-10/
0020-MACHINEEE /
0012-12345678/
Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 14/12/2008, 11h54   #3 (permalink)
Nouveau membre du Club
 
Date d'inscription: mai 2008
Messages: 79
Par défaut

Merci pour ton aide! J'ai néanmoins quelques petits problèmes à régler.
Le premier nombre (nb1 dans ton programme) peut être également suivi de quelques espaces et MACHAINE peut être séparée par un espace (MA CHAINE SEPAREE) et peut être terminée par plusieurs espaces (avant --) que j'aimerais supprimer(mais je pense que ce cas ne pose pas de problème vu qu'on a le délimiteur --, prenons l'exemple de "chaine à décortiquer" suivant:

" 08 ***MA CHAINE SEPAREE --12340692 "

Je pensais pouvoir rajouter ceci au code, pour récupérer la ch1, mon problème est: est ce que les espaces seront considérés comme des CHARACTERS et bien comptés?
Code :
 MOVE 0 TO PTR
 INSPECT CHAINE TALLYING PTR FOR CHARACTERS BEFORE INITIAL "***"
 ADD 4 TO PTR
 UNSTRING CHAINE DELIMITED BY "--" INTO CH1TEMP 
                  WITH POINTER PTR
Pourriez vous tester mon code et me dire s'il y a des erreurs?

Merci d'avance.
alex2746 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 14/12/2008, 13h20   #4 (permalink)
Modérateur
 
Avatar de Hédhili Jaïdane
 
Date d'inscription: juin 2007
Messages: 1 307
Envoyer un message via MSN à Hédhili Jaïdane Envoyer un message via Yahoo à Hédhili Jaïdane Envoyer un message via Skype™ à Hédhili Jaïdane
Par défaut

Citation:
Envoyé par alex2746 Voir le message
...Pourriez vous tester mon code et me dire s'il y a des erreurs?

Merci d'avance.
Bonjour.

Maintenant c'est à toi de jouer
Inspire toi de l'exemple que je tai donné et adapte le à tes besoins.
Si tu n'as pas d'AS/400 disponible, voici un site sur lequel tu peux t'inscrire gratuitement et utiliser un AS/400 à volonté : http://www.rzkh.de/english/indexeng.html

Bonne continuation.
Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 14/12/2008, 20h37   #5 (permalink)
Nouveau membre du Club
 
Date d'inscription: mai 2008
Messages: 79
Par défaut

Merci pour le lien, je me suis inscrit et ça m'a bien aidé.
Il me reste un dernier petit problème que je n'arrive pas à résoudre.

Apriori, je ne connais pas la longueur de "MACHAINEE", je sais juste qu'elle fait maxium 40 caractères, c'est pour celà qu'on la déclare donc en PIC X(40).
Seulement, par après je doit éditer une nouvelle ligne dans un fichier du genre :
"01 MACHAINEE 12345678",
mon problème est que ayant déclaré en PIC X(40) l'édition dans le fichier se fait comme suit:
"01 MACHAINEE ^^^^^^^^^^^^^^^^^^^^ 12345678"
(les ^ étant les blancs de fin de zone)

Je n'arrive pas à supprimer ces blancs de fin de zone...

Une idée?

Merci d'avance!

Dernière modification par alex2746 ; 14/12/2008 à 20h51.
alex2746 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 14/12/2008, 22h24   #6 (permalink)
Modérateur
 
Avatar de Hédhili Jaïdane
 
Date d'inscription: juin 2007
Messages: 1 307
Envoyer un message via MSN à Hédhili Jaïdane Envoyer un message via Yahoo à Hédhili Jaïdane Envoyer un message via Skype™ à Hédhili Jaïdane
Par défaut

Citation:
Envoyé par alex2746 Voir le message
...
mon problème est que ayant déclaré en PIC X(40) l'édition dans le fichier se fait comme suit:
"01 MACHAINEE ^^^^^^^^^^^^^^^^^^^^ 12345678"
(les ^ étant les blancs de fin de zone)

Je n'arrive pas à supprimer ces blancs de fin de zone...

Une idée?

Merci d'avance!
- Si ta "MACHAINEEE" ne contient pas d'espaces au milieu tu peux faire un STRING DELIMITED BY SPACE,
- Sinon au moment de faire le UNSTRING DELIMITED BY "--" tu insères un "/" avec DELIMITER IN et tu l'utilses dans le STRING DELIMITED BY "/". Une autre solution, dans ce dernier cas, consiste à compter les espaces à la fin de chaine en faisant une boucle perform varying en commençant par la fin de la chaine et puis tu utilises une reference modifier machaine(1:n), n = Long chaine - nbre espaces de fin.

Regarde dans le site Infocenter d'IBM les docs pdf et descends le Cobol Reference (gratuit), il y a un tas d'explications et d'exemples.
http://publib.boulder.ibm.com/infoce...v5r4/index.jsp

Dernière modification par Hédhili Jaïdane ; 14/12/2008 à 22h42.
Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 15/12/2008, 13h09   #7 (permalink)
Membre éprouvé
 
Avatar de Homer-ac
 
Date d'inscription: octobre 2007
Localisation: région parisienne
Messages: 450
Par défaut

Citation:
Une autre solution, dans ce dernier cas, consiste à compter les espaces à la fin de chaine en faisant une boucle perform varying en commençant par la fin de la chaine et puis tu utilises une reference modifier machaine(1:n), n = Long chaine - nbre espaces de fin.
J'avais déjà signalé un 'truc' plus lite il me semble : la fonction REVERSE si disponible, qui permettra de passer les blancs de fin au début d'une zone de travail. Tellement simple qu'il me semble que c'est utile à rappeler
Code :
If MY-DATA not = SPACE
   Move function Reverse(MY-DATA) to MY-DATA-WORK     
   Move 0  to WS-CNT                                         
   Inspect MY-DATA-WORK     Tallying WS-CNT For Leading space  
   Compute LONGUEUR-MY-DATA = length of MY-DATA-WORK  - WS-CNT
   Display MY-DATA(1:LONGUEUR-MY-DATA) ' SUITE .... '
End-if
La zone de travail doit être naturellement > ou = à celle d'origine
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 15/12/2008, 13h35   #8 (permalink)
Modérateur
 
Avatar de Hédhili Jaïdane
 
Date d'inscription: juin 2007
Messages: 1 307
Envoyer un message via MSN à Hédhili Jaïdane Envoyer un message via Yahoo à Hédhili Jaïdane Envoyer un message via Skype™ à Hédhili Jaïdane
Par défaut

Citation:
Envoyé par Homer-ac Voir le message
J'avais déjà signalé un 'truc' plus lite il me semble : la fonction REVERSE si disponible, qui permettra de passer les blancs de fin au début d'une zone de travail. Tellement simple qu'il me semble que c'est utile à rappeler...
Bonjour.

Et elle existe bien en ILE Cobol/400 à côté des fonctions TRIM, TRIML et TRIMR.
Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 16/12/2008, 22h20   #9 (permalink)
Nouveau membre du Club
 
Date d'inscription: mai 2008
Messages: 79
Par défaut

Merci beaucoup
alex2746 est déconnecté   Envoyer un message privé Réponse avec citation
NEWS AUTRESAdaAlgorithmiqueBasicCobolFortranLaTeXMATLABPrologPurebasicRubyXMLRAD

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > Autres langages > Autres langages > Cobol



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 16h20.


Vos questions techniques : forum d'entraide Autres - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.