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 :

[PC] Percobol Legacy : comment accéder et tester un élement particulier sur fichier séquentiel indexé


Sujet :

Cobol

  1. #1
    Débutant Avatar de razily
    Inscrit en
    Février 2009
    Messages
    376
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 376
    Points : 154
    Points
    154
    Par défaut [PC] Percobol Legacy : comment accéder et tester un élement particulier sur fichier séquentiel indexé
    Bonjour ,
    je suis confronté à un problème que j'ai dû mal à régler sur un projet que je fais en ce moment ; en fait c'est tjrs lié à l'autre sujet que j'ai évoqué .
    j'explique l'enchainement :
    j'ai un fichier principal (fench ): y a des gagnants (G) et des perdants >
    après je dois recenser à partir de ce fichier seulement les gagnants (G) disons je vais stocker les gagnants dans un fichier (Intermédiaire ) dc dans ce dernier fichier on peut avoir des données de ce type :
    CLE PRIMAIRE(numlot,numach)
    cle secondaire(numach)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    numlot   numach AEXP EtatO montant Datench
    001       1           "o"   "G"      100        2000
    001       2           "n"    "G"      100        2004
    001       3           "o"   "G"       100        2005
    
    002      1            "n"    "G"      90          2007
    
    003      2            "n"    "G"      120         2008
    004      4            "o"   "G"       400          2007
    le problème comme vous pouvez le voir c'est qu'il se peut qu'il y a des exequos cas du lot num 001 et on a décidé que le premier qui propose qui gagne donc ici c'est 1 (mais si il gagne après plusieurs offres c'est le cas on le considère comme gagnant au sort donc on change EtatO à H)
    mais s'il gagne avec une offre unique cas de 1 sur le lot numlot 002 il gagne et son Etat0 reste G
    donc le reste 2 et 3 sont considérés perdant au sort et il faudrait changer leur EtatO Q

    ma question face à ce genre de problème c'est que comment reconnaitre qu'il y a une autre offre sur le même lot après
    par exemple si on la reference est sur l'aheteur 1 du lot numlot 001
    comment reconnaitre qu'il ya encore d'autres offres sur ce lot afin de changer l'Etat0 de numach 1
    j'ai fait un algo mais je coince sur ce point :
    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
    
    ouvrir (Intermédiaire,lecture)
    lire(Intermédiaire)
    tant que non fdf (Intermédiaire) faire 
    ref1 = Intermédiaire.numlot
    place = 0 ; // pr savoir son rang dans l'offre
    tantque Intermédiaire.numlot = ref1 faire 
         si place = 0
              Intermédiaire.Etat0 = "G" ou "H" // c'est ici on ne sait pas le suivant
             place ++ // pr dire qu'il y déjà une offre
       sinon
            //les perdants au sort
               Intermédiaire.Etat0 = "Q"
       finsi 
            liresuivant(Intermédiaire)
    fintanque
    fintanque
    fermer(Intermédiaire)
    mais je ne sais pas trop comment 'y prendre face à ce genre de problème vu qu'on ne connait pas l'élement suivant
    je ne sais pas mais j'ai appris qu'il y a un indice permettant de tester la référence la plus haute d'une clé spécifique mais je ne sais pas si on pourra le tester avec HIGH-VALUEou à quoi çà sert vraiment
    il y a aussi l'instruction Start


    merci d'avance pour vos aides précieuses

  2. #2
    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.

    - pour accéder aux synonymes il n'y a que le start >= (en précisant la clé) et le READ ... NEXT en testant bien qu'on n'a pas changé de clé ou de la partie majeure de la clé. (ACCES DYNAMIC).

    - si tu veux lire un fichier selon sa clé secondaire, il faut commencer par le starter sur cette clé (même initialisée à low-value pour le premier)

    - dans ce genre de cas, j'utilise une méthode classique qui a fait ses preuves. Pour ne pas perdre mon pointeur de lecture tout en allant se balader dans le fichier, je déclare deux fichiers symboliques internes (objet du SELECT) avec des noms différents mais qui pointent sur le même fichier externe (ASSIGN), l'organisation doit être la même mais les modes d'accès et d'ouverture sont différents.

    - si ton compilateur admet les READ PRIOR, tu peux starter sur la clé +1 et faire READ PRIOR

    - si tu fais un READ direct (Random) sur des synonymes, c'est le premier qui est donné

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/03/2010, 15h54
  2. Réponses: 3
    Dernier message: 14/08/2008, 12h17
  3. Réponses: 4
    Dernier message: 24/03/2005, 19h20
  4. Réponses: 9
    Dernier message: 03/12/2004, 11h35
  5. comment tester la connexion depuis un fichier BATCH
    Par philippe_Aix dans le forum Oracle
    Réponses: 13
    Dernier message: 11/10/2004, 16h56

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