|
Publicité | ||||||||||||||||||||||
|
|
#1 (permalink) |
|
Nouveau membre du Club
![]() Date d'inscription: mai 2008
Messages: 79
|
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! |
|
|
|
|
|
#2 (permalink) | |
![]() |
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.
Citation:
__________________
Bienvenue sur le forum - Aide sur l'utilisation des boutons Règles du forum Pensez surtout au tag
|
|
|
|
|
|
|
#3 (permalink) |
|
Nouveau membre du Club
![]() Date d'inscription: mai 2008
Messages: 79
|
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
Merci d'avance. |
|
|
|
|
|
#4 (permalink) | |
![]() |
Citation:
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.
__________________
Bienvenue sur le forum - Aide sur l'utilisation des boutons Règles du forum Pensez surtout au tag
|
|
|
|
|
|
|
#5 (permalink) |
|
Nouveau membre du Club
![]() Date d'inscription: mai 2008
Messages: 79
|
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. |
|
|
|
|
|
#6 (permalink) | |
![]() |
Citation:
- 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
__________________
Bienvenue sur le forum - Aide sur l'utilisation des boutons Règles du forum Pensez surtout au tag
Dernière modification par Hédhili Jaïdane ; 14/12/2008 à 22h42. |
|
|
|
|
|
|
#7 (permalink) | |
|
Membre éprouvé
![]() Date d'inscription: octobre 2007
Localisation: région parisienne
Messages: 450
|
Citation:
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 |
|
|
|
|
|
|
#8 (permalink) | |
![]() |
Citation:
Et elle existe bien en ILE Cobol/400 à côté des fonctions TRIM, TRIML et TRIMR.
__________________
Bienvenue sur le forum - Aide sur l'utilisation des boutons Règles du forum Pensez surtout au tag
|
|
|
|
|
|
|
![]() |
||
[AS/400] unstring et string
|
||
| Outils de la discussion | |
|
|