[COBOL] Affichage en ordre alphabétique

Voir le sujet précédent Voir le sujet suivant Aller en bas

resolu [COBOL] Affichage en ordre alphabétique

Message  M. Pixel le Dim 11 Mar 2012, 13:06

Hello à tous,

Depuis les vacances, j'essaye d'afficher les noms de client en ordre alphabétique, pour la 3ième partie du projet Cobol.
J'ai fait beaucoup de recherches sur internet pour découvrir comment utiliser ces AIX, mais je ne suis pas encore sur à 100% d'avoir compris comment ils fonctionnent.

Afin d'exclure tout autre problème, j'ai ajouté un petit bout de code dans 1-OUVRIR qui terminera le programme dès qu'il a fini son exécution:

Code:
      1-OUVRIR.
          OPEN INPUT  VSCLI
          OPEN INPUT  VSCPTVUE
          OPEN INPUT  VSOPER
         
      **** BEGIN TEST CODE ****
          MOVE LOW-VALUE TO NOMCLI OF UN-VSCLIENT
          START VSCLI                                   
              KEY >= NOMCLI OF UN-VSCLIENT
              INVALID KEY                               
                  DISPLAY "Clé invalide: NOMCLI OF UN-VSCLIENT"       
                  STOP RUN                                           
          END-START
          DISPLAY "[START] STATUS: " VSCLI-STATUS
          DISPLAY SPACES
          READ VSCLI NEXT
              AT END SET VSCLI-IS-EOF TO TRUE
          END-READ
          PERFORM UNTIL VSCLI-IS-EOF
              DISPLAY "STATUS: " VSCLI-STATUS
              DISPLAY "MATCLI: " MATCLI OF UN-VSCLIENT
              DISPLAY "NOMCLI: " NOMCLI OF UN-VSCLIENT
              DISPLAY SPACES
              READ VSCLI NEXT
                  AT END SET VSCLI-IS-EOF TO TRUE
              END-READ
          END-PERFORM
          CLOSE VSCLI VSCPTVUE VSOPER
          STOP RUN
      **** END TEST CODE ****

      *    Reste du code...

J'utilise ces IDCAMS pour l'AIX de VSCLI:
Code:
      DEFINE AIX(  NAME(VSECOL.ANDR.TEST.ETUD128.VSCLI1)          -
                    RELATE(VSECOL.ANDR.TEST.ETUD128.VSCLI)          -
                    NONUNIQUEKEY                                    -
                    KEYS(20 0)                                      -
                    TRACKS(1,1))
      DEFINE PATH( NAME(VSECOL.ANDR.TEST.ETUD128.VSCLI.PATH)      -
                    PATHENTRY(VSECOL.ANDR.TEST.ETUD128.VSCLI1))
      BLDINDEX    INDATASET(VSECOL.ANDR.TEST.ETUD128.VSCLI)      -
                    OUTDATASET(VSECOL.ANDR.TEST.ETUD128.VSCLI1)
avec les liaisons (j'exclu les liaisons des autres fichiers):
Code:
/*                                                                   
http://GO.VSCLI      DD DSN=VSECOL.ANDR.TEST.ETUD128.VSCLI,DISP=MOD       
http://GO.VSCLI1    DD DSN=VSECOL.ANDR.TEST.ETUD128.VSCLI.PATH,DISP=MOD

Comme vous avez pu le constater, j'ai défini une variable de FILE STATUS. Celle-ci est toujours à 0.

A moins que je n'ai pas bien compris le fonctionnement des AIX, tout devrait bien fonctionner, non? Et bien non Sad
L'output:
Code:
000001 [START] STATUS: 00                                                     
000002                                                                         
000003 STATUS: 00                                                             
000004 MATCLI: CLI01                                                           
000005 NOMCLI: VAN DER GUCHT                                                   
000006                                                                         
000007 STATUS: 00                                                             
000008 MATCLI: CLI02                                                           
000009 NOMCLI: LAFFAYETTE                                                     
000010                                                                         
000011 STATUS: 00                                                             
000012 MATCLI: CLI05                                                           
000013 NOMCLI: LAGAFFE                                                         
000014                                                                         
000015 STATUS: 00                                                             
000016 MATCLI: CLI11                                                           
000017 NOMCLI: VAN DER GUCHT                                                   
000018                                                                         
000019 STATUS: 00                                                             
000020 MATCLI: CLI41                                                           
000021 NOMCLI: PERSONNE                                                       
000022                                                                         
000023 STATUS: 00                                                             
000024 MATCLI: CLI55                                                           
000025 NOMCLI: LAGAFFE                                                         
000026                                                                         
000027 STATUS: 00                                                             
000028 MATCLI: CLI88                                                           
000029 NOMCLI: DANIELSSON                                                     
000030                                                                         

Un gros merci d'avance pour toute suggestion!


Dernière édition par M. Pixel le Dim 11 Mar 2012, 18:07, édité 1 fois

M. Pixel

Nombre de messages : 19
Prénom : Etienne
Localisation : 0x7C00
Date d'inscription : 15/12/2010

Revenir en haut Aller en bas

resolu Re: [COBOL] Affichage en ordre alphabétique

Message  sawaka le Dim 11 Mar 2012, 15:10

En tout cas ton start est correct. Tu fais un delete de ton AIX à un moment ? Si ça ce trouve tu tournes avec un ancien AIX.

sawaka

Nombre de messages : 11
Prénom : Aziz
Date d'inscription : 13/01/2012

Revenir en haut Aller en bas

resolu Re: [COBOL] Affichage en ordre alphabétique

Message  Gus le Dim 11 Mar 2012, 15:13

Salut !

Tu rajoutes bien ALTERNATE RECORD KEY NOMCLI
WITH DUPLICATES

dans le SELECT de ton VSCLI ?

Gus

Nombre de messages : 7
Prénom : Auguste
Date d'inscription : 26/03/2011

Revenir en haut Aller en bas

resolu Re: [COBOL] Affichage en ordre alphabétique

Message  M. Pixel le Dim 11 Mar 2012, 17:08

Merci pour vos réponses!

J'ai bien indiqué ALTERNATE RECORD KEY ... WITH DUPLICATES, par contre, je n'ai pas fait de suppression des AIX!

Je viens de l'essayer, mais apparemment, les AIX sont supprimés automatiquement (j'ai cru lire quelque part que lorsqu'on supprime un fichier VSAM, ses AIX et PATHs sont également supprimés).
À présent, l'output est le même, avec un RC 08 pour le STEP3 où je supprime et crée mes AIX. Il me dit:
Code:
DELETE VSECOL.ANDR.TEST.ETUD128.VSCLI1                           
IDC3012I ENTRY VSECOL.ANDR.TEST.ETUD128.VSCLI1 NOT FOUND

Vous les supprimez manuellement, vos AIX?

J'ai oublié d'indiquer mes clauses SELECT (bien que je ne verrais pas ce qui peut mal tourner de ce coté):
Code:
      FILE-CONTROL.                                             
          SELECT VSCLI        ASSIGN VSCLI                     
              ORGANIZATION IS INDEXED                           
              ACCESS MODE IS DYNAMIC                             
              FILE STATUS IS VSCLI-STATUS                       
              RECORD KEY IS MATCLI OF VSCLI                     
              ALTERNATE KEY IS NOMCLI OF VSCLI WITH DUPLICATES. 
          SELECT VSCPTVUE      ASSIGN VSCPTVUE                   
              ORGANIZATION IS INDEXED                           
              ACCESS MODE IS DYNAMIC                             
              FILE STATUS IS VSCPTVUE-STATUS                     
              RECORD KEY IS COMPTE OF VSCPTVUE                   
              ALTERNATE KEY IS MATCLI OF VSCPTVUE WITH DUPLICATES.
          SELECT VSOPER        ASSIGN VSOPER                     
              ORGANIZATION IS RELATIVE                           
              ACCESS MODE IS DYNAMIC                             
              RELATIVE KEY KEY-VSOPER.                           

M. Pixel

Nombre de messages : 19
Prénom : Etienne
Localisation : 0x7C00
Date d'inscription : 15/12/2010

Revenir en haut Aller en bas

resolu Re: [COBOL] Affichage en ordre alphabétique

Message  benshusuke le Dim 11 Mar 2012, 17:44

non il ne faut pas supprimer de AIX, il se supprime automatiquement à la suppression du fichier VSAM auquel il y est attaché.

par contre quand tu définis ton AIX qui à ce moment là, il défini un nouvel index ... tu as donc 2 clés pour un même fichier ...

le nom de client et le matricule du client

DEFINE AIX( NAME(VSECOL.ANDR.TEST.ETUD128.VSCLI1) -
RELATE(VSECOL.ANDR.TEST.ETUD128.VSCLI) -
NONUNIQUEKEY -
KEYS(20 5) -
TRACKS(1,1))

benshusuke

Nombre de messages : 1
Prénom : Tuan
Date d'inscription : 06/10/2010

Revenir en haut Aller en bas

resolu Re: [COBOL] Affichage en ordre alphabétique

Message  efo le Dim 11 Mar 2012, 17:50

Merci à Tuan, plus rien à dire, j'arrive trop tard.

efo

Nombre de messages : 125
Age : 59
Prénom : Eric
Localisation : tournai
Date d'inscription : 08/08/2007

Revenir en haut Aller en bas

resolu Re: [COBOL] Affichage en ordre alphabétique

Message  M. Pixel le Dim 11 Mar 2012, 18:07

Ahh d'accord, et je demandais encore ce matin "tiens bizarre le '0' dans KEYS, il servirait à quelque chose?"...

Génial, ça fonctionne à présent!! Merci beaucoup! cheers

M. Pixel

Nombre de messages : 19
Prénom : Etienne
Localisation : 0x7C00
Date d'inscription : 15/12/2010

Revenir en haut Aller en bas

resolu Re: [COBOL] Affichage en ordre alphabétique

Message  Contenu sponsorisé Aujourd'hui à 20:42


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum