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

Langage Delphi Discussion :

Dateto .. chrono


Sujet :

Langage Delphi

  1. #1
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    760
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 760
    Points : 499
    Points
    499
    Par défaut Dateto .. chrono
    bonjours a tous !

    ce post est une suite au post ( dato ..int ) qui a ete passé a resolu .Merci pour vos reponses.

    Le but de ma recherche est de creer un "Chrono "(une liste de valeur numerique croissante dans la temps) qui permet d'identifier quel document a ete creé avant l'autre ( mais pas de savoir quand) .

    Mes contraines sont donc les suivantes .
    - Une liste croissante .
    - qui ne soit pas gerer par un fichier .!!
    - valeur sur 6 digit max.

    Donc aujourd'hui apres filtrage des ms j'ai pour l'heure une valeur [0..99999] et pour la date en considerant que je tiens pas compte des année precedante une valeur [1..9999]

    Mais j'en suis encore a 9 digit !!

    si quelqu'un a une idée pour savoir comment je peux diminuer ce nombre de digit ( utiliser ces deux valeur pour en obtenir une 3 eme , tout en conservant l'ordre croissant )!!

    merci et bonne journée a tous .

  2. #2
    Membre éclairé
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Points : 746
    Points
    746
    Par défaut
    pourquoi te limiter à 6 digits ?

  3. #3
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Bon, en admettant que tu "vire" aussi les secondes, pour l'heure ça te fait 1440 (24*60) valeurs possibles par jour.

    si tu ne veux pas dépasser 999999 pour coder ta date+heure (c'est à dire 1 millions de valeurs différentes), celà te donne un cycle de 1000000/1440=694,4444 jours)

    Bref, avec 6 digits, tu ne peux pas stocker plus de 694 jours/heures/minutes

    c'est mathématique et implacable : si tu en veux plus, il te faut plus de digits.

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 879
    Points : 11 377
    Points
    11 377
    Billets dans le blog
    6
    Par défaut
    tes digits sont-ils forcément décimaux, ou as-tu droit à des bases plus étendues ?

  5. #5
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    C'est vrai qu'en héxadécimal (base 16) ça marcherait mieux, ou carrément avec des une base perso (0..9,A..Z --> base 36), ce serait gagné

    Avec des Hexadécimaux, celà te ferait de 0 à FFFFFF, c'est à dire 16777215 valeurs possibles, autrement dit :
    194 jours avec jours/heure/minutes/secondes
    ou bien
    11650 jours (à peu près 30 ans) avec année/mois/jour/heures/minutes

    Avec une base 36, celà te donnerais
    2176782336 valeurs possibles, c'est à dire
    69 ans avec année/mois/jours/heure/minutes/secondes

  6. #6
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    760
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 760
    Points : 499
    Points
    499
    Par défaut
    resalut a tous .

    Oui je voyais çà aussi impossible , mais des fois ... une astuce tordu peut ouvrir des voies !

    - 6 digit car c'est la demande du client pour être adapter a son systeme qualité je pense . En fait 6 digits lui suffice car lui gere ses chronos manuellement , 1,2,3,...
    Tandit que dans mon cas j'ai obligatoirent une suite qui n'est pas composé de valeurs successives .

    J'avais pensé aussi au changement de base pour limiter les digits , mais cela deviens vite illisible pour reconnaitre l'ordre croissant de valeur Hexa pour des non habitués ce qui est le cas.

    Donc çà sera 10 digits , ou un fichier !

    merci pour vos idées ! bye

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,

    Dans un cas comme celui-ci, la première question à poser à ton client est:
    A quelle fréquence sont créés les documents. Ca peut varier beaucoup.

    * 1 à quelques uns par jour

    Dans ce cas, hors de la fréquence moyenne, connaitre le temps minimal séparant la création de 2 documents successifs.
    Cela pourra probablement diminuer la résolution temporelle de ton compteur, et donc simplifier le problème.
    [Comme tu dis qu'il fait ça à la main, tu te trouves probablement dans ce cas]

    * quelques centaines/milliers par jour

    Il faudra sans le moindre doute que tu utilises une des possibilités qui t'ont été données plus haut, à moins de bien expliquer à ton client que plus de 6 digits sont nécessaires dans ce cas, ne serait-ce que pour garder un code compréhensible au premier coup d'oeil.

  8. #8
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    J'ai une petite idée, comme ça, mais il faut que je sache si :

    - Les fichiers sont-il créés par un programme existant en Delphi que tu réalises ou que tu reprends ?
    Ou bien...
    - Sont ils archivés (et numérotés à cette occasion) par une seule personne ou par plusieurs ?
    - De quels type de documents s'agit-il (Word, TXT, autres) ?
    - Les fichiers sont-ils tous regrouppés sur une seule machine/répertoire/etc, ou sont-il disséminés un peu partout.
    - Disposes-tu d'un serveur (n'importe quel PC en réseau accessible à tous)
    - Pourquoi ne pas stocker l'information dans un fichier ?
    - Où et comment compte tu stocker ce compteur, et il est géré comment à l'heure actuelle (dans un petit fichier à part, dans le fichier lui même) ?
    - Le nombre de fichiers ainsi créés par jour (<10, <100) --> auquel cas 6 digits sont possibles (Numérotation possible sur respectivement 300 ans pour <10 et 30 ans pour <100) ?
    - Pourquoi ne pas utiliser QUE des lettres (pour la lisibilité) ?

    Voici le début de mon idée :
    - Stockage du "numéro" de fichier dans le fichier lui-même
    - stocker le compteur dans la base de registre

    Bref plein de questions pour une réponse éventuelle

  9. #9
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    760
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 760
    Points : 499
    Points
    499
    Par défaut
    salut waskol et tout le monde ,


    - Les fichiers sont-il créés par un programme existant en Delphi que tu réalises ou que tu reprends ?
    Oui a partir d'un programme dont j'ai le source .

    - Sont ils archivés (et numérotés à cette occasion) par une seule personne ou par plusieurs ?
    doivent etre archivé automatiquement , sans intervention d'une personne

    - De quels type de documents s'agit-il (Word, TXT, autres) ?
    fichier texte

    - Les fichiers sont-ils tous regrouppés sur une seule machine/répertoire/etc, ou sont-il disséminés un peu partout.
    En theorie toujours dans un meme ( nom de repertoire ) , si je suis sur plusieurs poste locaux , un digit permet de differencier sur quel poste je me trouve.

    - Disposes-tu d'un serveur (n'importe quel PC en réseau accessible à tous)
    en fonction du client , certain sont sur reseau d'autre non ( donc on peux dire non )

    - Pourquoi ne pas stocker l'information dans un fichier ?
    demande du client ( voir ci dessous )

    - Où et comment compte tu stocker ce compteur, et il est géré comment à l'heure actuelle (dans un petit fichier à part, dans le fichier lui même) ?
    l'info est stocké dans le document que j'archive. ( remarque ces fichiers peuvent migrer dans le temps et ne plus etre disponible ).
    - Le nombre de fichiers ainsi créés par jour (<10, <100) --> auquel cas 6 digits sont possibles (Numérotation possible sur respectivement 300 ans pour <10 et 30 ans pour <100) ?
    Nombre de fichier par jour aleatoire ,
    je pense que le temps minimun entre deux fichier est d'une 10 ene de secondes.

    - Pourquoi ne pas utiliser QUE des lettres (pour la lisibilité) ?
    Juste pour un probleme de lisibilité ! pourkoi pas .


    Quelque explication supplementaire ..

    Objectif : identifier chronologiquement des fichiers de résultats de test .
    Le nombre de fichier est fonction du nombre de test realisés par jour .
    Ce nombre de test est aleatoire ( on peut faire 10 tests concecutifs , puis plus aucun durant plusieurs jours) , mais on estime qu'un temps mini entre deux test successif est de 10 seconde.
    Remarque ce numero n'est pas sauvegarder dans une liste , juste dans le ficher et sert a identifier la chronologie des documents papier ( impression du fichier qui fait office de proces verbal )

    [format]
    Format de 6 digit + 1 digit pour le poste local.
    Le but n'est pas de gagner de la place sur le disque ou meme des problemes de taille memoire .Mais de m'adapter a un principe qualité déja etabli dans cette société et qui gere ses chronos sur ce nombre de digits.

    La lecture de cette valeur doit etre facilement identifiable par tout le monde ( d'ou la valeur numerique ) un changement de base risque de compliquer la lecture pour des gens non habitué a l'hexa par exemple

    [Utilisation]
    Le but n'est pas de retrouver la date depuis la valeur "calculée", mais juste d'etablir un ordre croissant de creation de fichier dans le temps.
    ( le fichier ID:620 est anterieur au fichier ID:1245 c'est tout , on cherche pas a savoir quand il a ete crée )

    [determination du numéro]
    Pourquoi ne pas utiliser un simple fichier dans lequel je stoke la valeur et que j'incremente quand il le faut ? , parceque un crach du disque ferai perdre le chrono
    ( poste local , pas toujours de reseau dispo , pas toujours de sauvegarde !! )


    merci de vos reponse .

  10. #10
    Membre éclairé
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Points : 746
    Points
    746
    Par défaut
    moi je ne vois pas d'autre solution que de stoquer ton dernier numéro utilisé quelquepart (fichier, base de registre, serveur) et de l'incrémenter à chaque fois que c'est nécessaire ....

  11. #11
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Haaaaaa, donc ton numéro est stocké dans les fichiers textes...

    -Où ça dans ton fichier texte ? au début, à la fin, n'importe où ?
    Bref j'imagine qu'il est sur la première ligne...

    -Il y-t-il un tag devant ou y'est-il en brut de brut ?

    Sinon, pour l'histoire de stocker le compteur en base de registre ou dans un autre fichier, ce n'est pas un problème même en cas de crash disque...

    Je m'explique :
    Il te faut, dans la moulinette que tu prépares (je ne sait pas si tu la fais dans le programme d'origine, ou non), il te faut 2 fonctionalités :

    - La première c'est la gestion du compteur et le "marquage" de tes fichiers : le compteur tu le gère dans un fichier ou la base de registre.
    - La deuxième , c'est un programme qui effectue une recherche tout les fichiers textes sur le disque, qui récupère l'ID la plus élevée : là tu tiens la restauration de ton compteur en cas de crash. Au passage, celà peut permettre de réaliser un inventaire de ces fichiers, affichés dans une tite TListBox et classés par ID.

    Cependant, tu peux très bien te passer du compteur, et lors du "marquage" de fichier, passer ta deuxième moulinette pour récupérer l'ID la plus élevée.
    - si tes fichiers sont disséminés un peu partout, ça risque d'être long pour l'utilisateur (scan du disque à chaque "marquage")
    - si c'est dans un répertoire bien précis, celà réduit le temps d'exécution.

    Lors du Scan, il te faudra penser à ignorer les répertoires Windows, Program Files, etc dans lequel ces fichiers ne sont pas censés se trouver. Ca évitera aussi de traiter les fichier texte du genre Readme.txt

    qu'en penses-tu ?

  12. #12
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 506
    Points : 2 778
    Points
    2 778
    Billets dans le blog
    10
    Par défaut
    voici trois fonctions qui peuvent t'être utiles
    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
     
     
    Function IntToBin (Value: Integer; Digits: Integer) : string ;
    var
      st1 : string ;
      i1 : integer ;
    begin
      st1 := '' ;
      for i1 := 0 to Digits-1 do
      begin
        if (Round(Power(2,i1)) and value) > 0 then
          st1 := '1'+st1
        else
          st1 := '0'+st1 ;
      end ;
      result := st1 ;
    end ;
     
    function IntToB32 (Value: Integer; Digits: Integer) : string ;
    var
      st1, st2,st3 : string ;
      i1,i2 : integer ;
      c1 : char ;
    begin
      st1 := intToBin (value,digits*5) ;
      st3 := '' ;
      for i1 := 0 to Digits-1 do
      begin
        st2 := copy(st1,i1*5+1,5) ;
        i2 := ((ord(st2[5])-48) * 1) +((ord(st2[4])-48) * 2)
             +((ord(st2[3])-48) * 4) +((ord(st2[2])-48) * 8) +((ord(st2[1])-48) * 16) ;
        if i2 < 10 then c1 := char(48+i2) else c1 := char(55+i2) ;
        st3 := st3+c1 ;
      end ;
      result := st3 ;
    end ;
    function B32ToInt (StValeur : String ) : integer ;
    var
      i1,i2,i3 : integer ;
    begin
      i3 := 0 ;
      for i1 := 0 to length(StValeur)-1 do
      begin
        i2 := Ord (StValeur[length(StValeur)-i1])-48 ;
        if i2>9 then i2 := i2 - 7 ;
        i3 := i3 + (i2 shl (i1*5)) ;
      end ;
      result := i3 ;
    end ;

  13. #13
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 444
    Points : 5 864
    Points
    5 864
    Par défaut
    salut

    Tu as donc 6 digit + 1 pour le poste
    Pourquoi ne pas prendre 4 digit pour le
    l'annee et le mois
    pour les deux dernier digit tu change de base
    tu prend des lettre
    le 5 etant le le numero 255 dossier par mois
    avec 255 release possible
    apriorie ce seras facilement identifiable
    exemple
    0602ZZ1
    c'est donc un dossier de 2006 du mois de fevrier
    dossier 255 ayant etant relisé 255 fois
    sur le poste 1
    ce qui te permet de faire environs 65000 test dans la mois

    sachant que tes compteur sont remis aa a chaque debut de mois

    @+ Phil

  14. #14
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    760
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 760
    Points : 499
    Points
    499
    Par défaut
    resalut a tous ,

    En effet waskol mon numero est dans le fichier et possede un flag pour le retrouver . J'avais pensé aussi a faire un scan . Mais comme je te l'ai mis dans le post plus haut , je ne suis pas sur d'avoir l'integralité des fichiers en permanence sur le disque.

    par contre tu dis
    Sinon, pour l'histoire de stocker le compteur en base de registre ou dans un autre fichier, ce n'est pas un problème même en cas de crash disque...
    je ne suis pas sur de comprendre!! , si j'utilise un scan et si mon disque est HS je n'ai plus de reference pour continuer ma numerotation , puisque je ne sais pas relire les fichiers present sur le disque ni un quelconque fichier ou j'aurai mis le numero?

    Je vais reflechir a la solution de anapurma aussi en creant une base 26 pour l'heure avec l'alphabet

    a bientot et merci pour votre temps .

  15. #15
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par petitcoucou31
    je ne suis pas sur de comprendre!! , si j'utilise un scan et si mon disque est HS je n'ai plus de reference pour continuer ma numerotation , puisque je ne sais pas relire les fichiers present sur le disque ni un quelconque fichier ou j'aurai mis le numero?
    En fait, si tu as un crash disque, de toute façon, tu n'as plus accès aux dits fichiers puisque eux non plus n'existent plus :
    - soit tu n'as plus les fichiers (c'est très probable), auquel cas ton compteur pourra redémarrer à zéro. Les fichiers n'existant plus, tu n'as plus besoin de les référencer.
    - soit tu les à tous récupéré, ou du moins une partie : ta moulinette est réinstallée sur un PC tout neuf avec ce qui a pu être sauvé (ou récupéré sur un autre poste), effectue un scan, relève l'ID la plus élevée et initialise son compteur en se basant sur cette ID.

    Dans la crainte d'un crash disque, j'espère que les fichiers sont archivés quelque part...

    Bref, ne pas vouloir stocker un compteur dans un fichier sous pretexte d'un crash disk éventuel est un non sens...

    Au pire, il y a peut-être la solution de stocker ta moulinette, le compteur et la référence des fichiers sur une clé USB dédiée pour ça--> là il n'y a plus de crash disque, les infos sont partageables, duplicables, archivables, etc... et les possibilités nombreuses. Oui, elle est peut-être là ta solution

  16. #16
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 506
    Points : 2 778
    Points
    2 778
    Billets dans le blog
    10
    Par défaut
    Si tu souhaites travailler en base 26 ou plus regardes un peu plus haut dans cette discution !

  17. #17
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    760
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 760
    Points : 499
    Points
    499
    Par défaut
    re ..

    Ok pour le crach du disque, pourkoi archiver quelque chose qui n'existe pas ou plus !

    En fait comme j'en parlais plus haut ce numero identifie un fichier de résultat qui sert a imprimer un proces verbal de conformité ( donc papier ).
    Apres un test mon ou mes clients , donne ce proces verbal de conformité a leur propre client avec le materiel testé, et il est pas possible de donner deux documents papier a un meme client ayant un meme ID. Ce qui peut ce passer avec un crach du disque si je recommence a mon compteur a 0.

    J'espere aussi que tout ces fichiers sont archivé , c'est ce que l'on preconise aussi , mais l'experience montre que ...( c'est prevus qu'on le fasse bientot !! ) si tu vois ce que je veux dire ! lol

    La cle USB est sympa aussi ! idée a retenir !

    Surtout que depuis hier soir j'ai des doutes sur l'utilisation de la date ( on peut la modifié , il y a les changements hivers .. ( meme si je suis pas sur que les gens bosse au moment du changement ..)

    Parfois une chose simple au premier abord peu devenir tres tordu a mettre en place !

    Dans tout les cas merci a tous .

Discussions similaires

  1. Gérer un chrono pour mesurer la performance d'une méthode.
    Par k o D dans le forum Général Java
    Réponses: 7
    Dernier message: 11/04/2006, 08h19
  2. Un script qui fermerait une page avec chrono ?
    Par beegees dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 31/03/2006, 10h01
  3. chrono
    Par eleve36 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 02/11/2005, 12h02
  4. Déclencher une action avec un chrono
    Par Oberown dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/09/2005, 14h22
  5. [Debutant(e)]chrono, effacement
    Par x-ben dans le forum API standards et tierces
    Réponses: 23
    Dernier message: 05/12/2004, 16h38

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