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

Linux Discussion :

Gestion des nombres


Sujet :

Linux

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Gestion des nombres
    Bonjour,

    J'ai un problème ici, et début la programmation en linux. Nous avons appris un peu de commandes, mais j'ai un numéro que je dois faire, et ne comprends pas par ou commencer. Voici le probleme:

    Je dois rédiger un script qui va permettre de corriger le salaire des employés selon la date courante lors de l’application du script.

    Voici un exemple du contenu du fichier Salaire.dat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #Travailleur Nom DateEmbauche Salaire
     
    23423534 Dany 17/06/2003 100000
    21345236 Daniel 22/03/2004 67876
    23478234 Luc 10/04/2005 54000
    14636466 Lucie 12/02/2001 72903
    Voici le barême d’augmentation du salaire selon le nombre de jours à l’emploi

    • 0 – 365 jours Pas d’augmentation
    • 366 jours – 730 jours 3%
    • 731 jours – 1095 jours 4%
    • 1096 jours et plus 5 %


    Je crois qu'il serait possible de concaténer sous un autre fichier, comme salaire2.dat, et ensuite le modifier. Je ne sais pas par quoi commencer, et je déute a ce sujet!!! De l'aide serait appréciée

    PS: Il ne faut pas tenir des variations de 30 31 jours. Ce script doit être simple...

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    en fait pour faire ça proprement il faut ecrire un script avec des fonctions comme :

    #calcul nombre de jours
    sera appelée par calculnbjrs()

    #agmentation de X %
    #genere la variable salairnoveau
    sera appelé par agmente(X)

    ce qui donne un if du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for Nom in `awk '{print $2}' Salaire.dat`
    do
       calculnombredejours($Nom)
    # faire le test du nombre de jour du plus petit cas au plus grand cas
    # pour ne pas avoir à verifier que le pourcentage à déjà été calculé ou non
    # pour simplifier l'exemple seul le dernier taux est ecrit ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            if [ $nombredejours -gt 1096 ]; then
                 pourcentage=5
            fi
    #selection du salaire actuel doit absoluement etre fait avant ou dans
    # augmente() dans cet exemple je le fais avant
    # mais une méthode propre consisterai à le faire dedans !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      salaire=`grep -i $Nom | awk '{print $4}'`
    #calcul de salairnouveau
    #modification live dans le fichier
    #en utilisant le meilleur editeur disponnible sur le marché :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      vi -c "g/$Nom/$salaire/$salairnouveau/|:wq" Salaire.dat 
    done
    attention cette methode là j'édite en live le fichier Salaire.dat sans faire de deuxième fichier !!!!!

    N'oublies pas pour calculnombredejour de generer la date actuelle dans le meme format que la date dans le fichier Salaire.dat pour pouvoir calculer le nombre de jour par simple soustraction !

    résume :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for Nom in `awk '{print $2}' Salaire.dat`
    do
       calculnombredejours($Nom)
       if [ $nombredejours -gt 1096 ]; then
                 pourcentage=5
       fi
       salaire=`grep -i $Nom | awk '{print $4}'`
    augmente($pourcentage)
    vi -c "g/$Nom/$salaire/$salairnouveau/|:wq" Salaire.dat
    done[/code]

  3. #3
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    à vérifier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $ cat salaire.dat
    23423534 Dany 17/06/2003 100000
    21345236 Daniel 22/03/2004 67876
    23478234 Luc 10/04/2005 54000
    14636466 Lucie 12/02/2001 72903
    $ perl -ne 'use Date::Parse;@f=split("[ /]",$_);$d=(time-str2time($f[3]."/".$f[2]."/".$f[4]))/86400;print $f[0]." ".$f[1]." ".$f[2]."/".$f[3]."/".$f[4]." ";if ($d<366){print $f[5]}elsif($d<731){print($f[5]*1.03)}elsif($d<1096){print($f[5]*1.04)}else{print($f[5]*1.05)};print "\n"' -i salaire.dat
    $ cat salaire.dat 
    23423534 Dany 17/06/2003 105000 
    21345236 Daniel 22/03/2004 70591.04 
    23478234 Luc 10/04/2005 55620
    14636466 Lucie 12/02/2001 76548.15
    perl me parait bien adapté dans ce cas, non

  4. #4
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par laurentschneider
    perl me parait bien adapté dans ce cas, non
    Je ne peux qu'abonder dans ce sens.

    Une petite retouche cosmétique : en ajoutant une option -a à la ligne de commande, on passe en mode "autosplit". Cela remplit automatiquement le tableau @F (passer donc tous les $f en majuscule dans ce cas) et évite d'avoir à faire le split.

    Sinon, awk aussi doit pouvoir être utilisé de la même façon (mais je confesse ne même pas avoir essayé).
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    ah oui, autosplit, merci du rappel

Discussions similaires

  1. Gestion des nombres au format BCD
    Par gl dans le forum Télécharger
    Réponses: 0
    Dernier message: 30/11/2010, 16h07
  2. Réponses: 2
    Dernier message: 15/03/2010, 14h14
  3. Gestion des Nombres complexes
    Par Lalanne dans le forum C++
    Réponses: 6
    Dernier message: 16/09/2009, 10h52
  4. Gestion des nombre Hexadecimaux
    Par 250583 dans le forum Simulink
    Réponses: 8
    Dernier message: 25/04/2007, 12h13
  5. Réponses: 3
    Dernier message: 10/03/2006, 16h41

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