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

Shell et commandes POSIX Discussion :

Utilisation de bc


Sujet :

Shell et commandes POSIX

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Points : 539
    Points
    539
    Par défaut Utilisation de bc
    Bonjour,
    Aprés avoir beaucoup joué avec dc, je cherche a utiliser bc qui est le standard posix.
    bc permet de définir des variables tableaux mais les pages de man sont plutôt avare d'explications.
    Avec un fichier texte comme suit :
    J'obtient le résultat attendu :
    Mais en utilisant un tableau :
    J'obtient une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cat infile | bc
    (standard_in) 1: syntax error
    0
    J'ai essayé de séparer les variables par ; , . ... sans succès !
    Quelqu'un a une idée ?
    Merci.

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Bonjour

    L'initialisation en masse par constantes n'existe simplement pas.
    il faut faire :
    Mais si tu y tiens, tu peux filouter avec awk;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo -e "a[]={2,5};\na[1];" | awk -F'[[{,}]' '/[[:alnum:]_]*\[\]={.*};?/{for (i=3;i<NF;i++) print $1"["i-3"]="$i";";next;} 1' |bc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo -e "bill[]={2,5,6,8,9,7,2,3,4,5,89,23};\nbill[5];" | awk -F'[[{,}]' '/[[:alnum:]_]*\[\]={.*};?/{for (i=3;i<NF;i++) print $1"["i-3"]="$i";";next;} 1' |bc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ cat infile
    autre[]={0,1,2,3,4};
    autre[5];
    autre[3];
    $ cat infile | awk -F'[[{,}]' '/[[:alnum:]_]*\[\]={.*};?/{for (i=3;i<NF;i++) print $1"["i-3"]="$i";";next;} 1' |bc
    0
    3
    Par contre, interdiction, avec cette formule, de mettre autre chose sur la ligne de définition d'un tableau.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Points : 539
    Points
    539
    Par défaut
    Bonjour et merci pour la réponse.
    Je cherche a comprendre comment utiliser bc donc pas de awk.

    Citation Envoyé par Flodelarab Voir le message
    Bonjour
    L'initialisation en masse par constantes n'existe simplement pas.
    il faut faire :
    Apparemment, le tableau n'est pas une bonne idée pour ce que je cherche a faire d'ou le changement d'intitulé.
    Je dispose d'un fichier de données:
    Avec dc, j'écris un fichier de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cat comp_code_dc 
    zsasbsc[somme = ]nlblc+dsdp[moyenne = ]nldla/p
    ou en plus aéré:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    cat code_dc 
    z sa sb sc
    [somme = ] n lb lc + d sd p
    [moyenne = ] n ld la / p
    puis je lance la commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cat data code_dc | dc
    somme = 20
    moyenne = 10
    Ici, les données sont stockées dans la pile. Je les lis une par une et leurs affectent un nom b, c.
    Je cherche a faire la même chose avec bc mais je ne vois pas de notion de pile.
    J'ai l'impression que mon fichier data doit ressembler a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cat data_bc
    a=12
    b=8
    pour que je puisse l'utiliser.
    Une idée?
    Cordialement.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par ctac_ Voir le message
    Je dispose d'un fichier de données:
    ...
    J'ai l'impression que mon fichier data doit ressembler a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cat data_bc
    a=12
    b=8
    pour que je puisse l'utiliser.
    Une idée?
    Un coup de sed pour mettre les données en forme ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ cat data
    12 8
    $ sed -e 's/\([0-9]*\) \([0-9]*\)/a=\1; b=\2; a*b/' data | bc
    96

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/06/2019, 17h14
  2. Les tableaux dans une boucle
    Par Savory dans le forum Langage
    Réponses: 3
    Dernier message: 18/09/2012, 17h01
  3. Positionner les tableaux dans la page
    Par enicnath dans le forum ODS et reporting
    Réponses: 7
    Dernier message: 21/07/2011, 14h09
  4. Réponses: 14
    Dernier message: 01/09/2003, 22h46

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