IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Cobol Discussion :

Instruction START et affichage


Sujet :

Cobol

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 25
    Points : 18
    Points
    18
    Par défaut Instruction START et affichage
    Bonjour,

    Je dois écrire trois petits programmes en COBOL pour un cours. Sachez qu'on a pas étudié le cobol en profondeur (pas d'exercices).

    Les deux premiers programmes sont relativement simples. Il fallait créer un fichier contenant des informations sur des logements d'étudiants (matricule de l'étudiant, numéro du logement, adresse, loyer, ...). Le deuxième devait afficher tous les logement triés de manière croissante en fonction du loyer. Le dernier est pour un moi un peu plus compliqué.

    En effet, je dois pouvoir afficher tous les établissement qui sont compris entre deux matricules d'étudiants à l'aide de l'instruction START.

    Je n'arrive pas à voir comment faire, j'avoue être un peu perdu avec cette instruction. Pourriez-vous me donner un coup de main ?

    Je tiens à signaler que je ne demande pas de code, ou qu'on le fasse pour moi. Je tiens réellement à comprendre ce que je fais et pouvoir le faire moi-même.

    Je vous remercie d'avance.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 362
    Points : 419
    Points
    419
    Par défaut
    Bonjour Herlock,

    Après avoir ouvert ton fichier, tu peux :
    - soit faire des accès directs sur clé (lire les infos pour l'étudiant x) en accès mode RANDOM ou DYNAMIC, par READ ;
    - soit commencer à balayer le fichier par son début (selon la clé choisie), dans le cas d'un accès mode SEQUENTIAL ou DYNAMIC, par une série de READ NEXT ;
    - soit décider de commencer le balayage à un autre endroit du fichier, toujours en SEQUENTIAL ou DYNAMIC, à l'aide de l'instruction START :
    1) tu alimentes la zone clé avec la première valeur recherchée ;
    2) tu exécutes le START ;
    3) tu balayes par une série de READ NEXT.

    Est-ce que ça répond à ta question ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Lille
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Lille

    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Points : 17
    Points
    17
    Par défaut comment faire
    j'ai bien compris comment résoudre le problème avec la clef infer et super, mais je ne trouve pas de source me donnant un bonne explication de comment faire. Mon idée est donc d'utiliser l'instruction start affin de lire à partir d'un certain point (préalablement recu) j'usqu'a l'autre (également recu). Mais, comment préciser que 'le key' fait référence aux matricules, comme dans l'exemple donné plus haut ? Ensuite, comment dois je testé si l'on est arrivé à la clef supererieur ; en faite, quel variable/instruction me dit quel matricule je suis en train de traiter ? Merci d'avance

  4. #4
    Membre à l'essai
    Homme Profil pro
    Lille
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Lille

    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Points : 17
    Points
    17
    Par défaut suite...
    j'y pense ; le invalid ne fait que testé si le key est valide, peut-on déffinir le critère de validité ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Lille
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Lille

    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    ou donc, avant de faire le read next, je teste la condition (plus petit que le matricule maximale) Pour commencer, il faudrait que je sache coment associer la clef au num de matricule...

  6. #6
    Membre à l'essai
    Homme Profil pro
    Lille
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Lille

    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Points : 17
    Points
    17
    Par défaut ma solution
    Voil ce que j'ai fait... (également dispo en fichier attaché)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    INPUT-OUTPUT SECTION.
    FILE-CONTROL.
        SELECT Inp ASSIGN TO "Fichier.seq"
            ORGANIZATION IS SEQUENTIAL;
            ACCESS MODE IS SEQUENTIAL.
        SELECT Tmp ASSIGN TO "Fichier.tmp"
        SELECT Out ASSIGN TO "Fichier.out"
            ORGANIZATION IS SEQUENTIAL
            ACCESS MODE IS SEQUENTIAL.
    
    DATA DIVISION.
    FILE SELECTION.
    FD Inp.
    01 Inp-Rec.
          02  Numid       PIC X(10).
          02  Adresse     PIC X(20).
          02  Campus      PIC X(10).
          02  Loyer       PIC 9(4).
          02  Matricule   PIC 9(6).
    SD Tmp.
    01 Tmp-Rec.
          02  Numid       PIC X(10).
          02  Adresse     PIC X(20).
          02  Campus      PIC X(10).
          02  Loyer       PIC 9(4).
          02  Matricule   PIC 9(6).
    FD Out.
    01 Out-Rec.
          02  Numid       PIC X(10).
          02  Adresse     PIC X(20).
          02  Campus      PIC X(10).
          02  Loyer       PIC 9(4).
          02  Matricule   PIC 9(6).
    
    
    WORKING-STORAGE SECTION.
    01 Dsp-Rec
          02  Numid       PIC X(10).
          02  FILLER      PIC X, VALUE ",".
          02  Adresse     PIC X(20).
          02  FILLER      PIC X, VALUE ",".
          02  Campus      PIC X(10).
          02  FILLER      PIC X, VALUE ",".
          02  Loyer       PIC 9(4).
          02  FILLER      PIC X, VALUE ",".
          02  Matricule   PIC 9(6).
    77  FILLER    PICTURE 9.
    88  Valid     VALUE IS 1.
    88  Existe    VALUE IS 1.
    88  Fini      VALUE IS 1.
    
    PROCEDURE DIVISION.
    00-Main.
        SORT Tmp ON ASCENDING KEY Matricule IN Tmp-Rec,
                   USING Inp, GIVING Out.
        OPEN INPUT Out.
        PERFORM 01-Range, UNTIL Valid.
        PERFORM 01-Init, UNTIL Existe.
               PERFORM 01-Body THRU 01-Init, WITH TEST BEFORE, UNTIL Fini.
               CLOSE Inp.
               STOP RUN.
    
        01-Range.
                DISPLAY "Entrez le matricule minimale".
                ACCEPT Debut.
                DISPLAY "Entrez le matricule maximale".
                ACCEPT Fin.
                IF Debut <= Fin
                THEN
                   SET Valid TO TRUE
                END-IF.
    
        01-Init.
               START Out, KEY = Debut
               INVALID KEY
                   ADD 1 TO Debut
               NOT INVALID KEY
                   MOVE TRUE TO Existe
               END-START.
    
        01-Body.
               MOVE CORRESPONDING Out-Rec TO Dsp-Rec.
               DISPLAY Dsp-Rec.
    
        01-Proc.  
               READ Out NEXT RECORD;
                    IF Matricule > Fin
                    THEN
                    MOVE TRUE TO FINI
                    END-IF.
               AT END SET Fini TO TRUE;
               //NOT AT END SET Fini TO FALSE;
               END-READ.
        
    
    END PROGRAM Affichage.
    Fichiers attachés Fichiers attachés

  7. #7
    Membre à l'essai
    Homme Profil pro
    Lille
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Lille

    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Points : 17
    Points
    17
    Par défaut erreur
    ya une faute ; dans le main, ce n'e daoi pas être

    PERFORM 01-Body THRU 01-Init, WITH TEST BEFORE, UNTIL Fini.

    mais PERFORM 01-Body THRU 01-Proc, WITH ...

    et a un edroit je mets // car pas sur si nécessaire

  8. #8
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Bonjour.

    En revenant à la question précise du START.

    Primo sa syntaxe et son comportement dépendent du compilateur même s'il s'agit du même os.

    Pour le ILE COBOL pour AS400/iSeries

    START Fich1 KEY opérateur nom-clé INVALID ...
    START Fich1 KEY opérateur EXTERNALLY-DESCRIBED-KEY
    INVALID ...
    Opérateur peut être : EQUAL (=), GREATER (>), NOT LESS (not <) GREATER OR EQUAl (>=)
    nom-clé est le chemin d'accès complet pouvant être constitué de plusieurs champs, dans ce cas écrire champ1 champ2 champ3 ...

    Le START permet de se positionner sur l’enregistrement d’un fichier indexé ou relatif, quel que soit le mode d’accès, dont la valeur de la clé répond à la condition. Cette opération n’est pas une opération de lecture et ne remplit donc pas le buffer d’entrée du fichier.

    Les champs constituants la clé doivent être remplis en totalité ou en partie avant de passer au START.

    Les champs mineurs constituant la clé doivent tout de même être initialisés en fonction de leur nature à SPACES, ZEROS, etc... TRES GRANDE SOURCE D'ERREURS.

    La condition INVALID est «vrai» si aucun enregistrement ne peut être pointé.
    attention à l'opérateur "=", le INVALID est vrai s'il n'y a pas d'enregistrement dont la clé répond à la clé du START (remplie avant le START), çà ne veut dire qu'il n'a y a pas d'autres enregistrements qui partagent la partie majeure de la clé du START.

    Pour certains compilateurs, le START ne s'applique pas sur l'organisation séquentielle ou directe (relative).

    Attention aussi si certains champs sont dans l'ordre descendant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Instructions pour l'affichage dans un programme de tri
    Par Meayan dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 28/04/2014, 21h46
  2. [10g] Problème avec l'instruction START WITH TO_DATE
    Par NFHnv dans le forum PL/SQL
    Réponses: 6
    Dernier message: 18/10/2013, 23h45
  3. Affichage d'un Splash screen avec Java Web Start
    Par Gob4 dans le forum Eclipse Platform
    Réponses: 0
    Dernier message: 13/02/2013, 10h38
  4. Réponses: 2
    Dernier message: 18/03/2010, 14h09
  5. [a-03] Instruction Format Affichage de nombres
    Par Gandalf24 dans le forum VBA Access
    Réponses: 7
    Dernier message: 09/01/2009, 11h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo