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 GNU Discussion :

Recherche sur le Shell un cut qui coupe mal?


Sujet :

Shell et commandes GNU

  1. #1
    Membre habitué Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 493
    Points : 152
    Points
    152
    Par défaut Recherche sur le Shell un cut qui coupe mal?
    bonjour,

    voici un script qui me pose bien des soucis

    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
     
    #!/bin/ksh
     
     
    #***************************************************************************
    #* Parametres                                                              *
    #***************************************************************************
    #Variable :
    NOW=`date +"%Y%m%d%H%M%S"`
    #Arborescence serveur :
    DIR=${HOME}/utils/Eric/ExtraireNOEMIE
    DIR_LOG=${DIR}/log
    DIR_RES=${DIR}/res
    DIR_TMP=${DIR}/tmp
    FIC_LOG=${DIR_LOG}/type00$NOW.log
    FIC_ligne=${DIR_TMP}/lignefic$NOW.txt
     
     
    # Element d'information Les structures NOEMIE d'identification
    # Norme NOEMIE -- ENTITE ---000. 
    type_000()   {    
      # echo $log
      #  echo "000"
      # NOE_TYE=`echo "${ligne}" | awk '{print substr( $0 , 4 , 2) }'`
        echo " extraction ENTITE ---000 ==  "  >> ${FIC_LOG}
     
        NOE_TYE=`echo "${ligne}" | cut -c 4-5`
     
        NOE_NUE=`echo "${ligne}" | cut -c 6-19`
        numemet=`echo "$ligne" | cut -c 6-19`
        NOE_NUE_000=`echo "${ligne}" | awk '{print substr( $0 , 6 , 14) }'`
     
           echo " en type 000 "
           echo "NOE_NUE:" ${NOE_NUE}
           echo "numemet:" ${numemet}
           echo "NOE_NUE_000:" ${NOE_NUE_000}
     
    }
     
    #***************************************************************************
    #* Traitement                                                              *
    #***************************************************************************
    echo "Debut du script : " `date +"%d/%m/%Y %H:%M:%S"` > ${FIC_LOG}
    echo " " >> ${FIC_LOG}
     
    # Verification de la presence du parametre de lancement
    if [ $# -ne 1 ];
      then
        echo " TEST000.ksh ==> Erreur : Veuillez entrer le nom du fichier a analyser  suivie du nom du fichier physique"  >> $log
        echo " TEST000.ksh ==  "  >> $log
        echo " TEST000.ksh ==> Fin extraction_NOEMIE "  >> $log
        echo " TEST000.ksh ==  "  >> $log
        exit 9
    fi
     
     
    # Acquisition du parametre
    FIC_IN=$1
    echo "TEST000"
     
     
    #Extraction des données du fichier logique
    while read ligne
     do
     
    	NOE_TYP=`echo "${ligne}" | cut -c 1-3`
    	NOE_NIV=`echo "${ligne}" | cut -c 4-5`
      	case $NOE_TYP in
    	 000 ) 
        echo "Directe dans le cast"	 
        echo "${ligne}"
        NOE_NUE=`echo "${ligne}" | cut -c 6-19`	 
        echo "NOE_NUE:" ${NOE_NUE}
    	 type_000;; 
     
    	esac		   
    done < $FIC_IN

    Et voici le fichier "text" a analyser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    000CP      01886600      ZU      8dd00294      QD014021401255689 000NU            000                                           
    01001456544d@
    000XC      01909000      ZU0000008cc00294      QRN01402140136688 000NU            000                                           
    01001456544d@
    000CP      01909000      ZU      8ee00294      QPN01402140146687 000NU            000                                           
    01001456544d@
    000XC      01909000      ZU0000008ff00294      QDN01402140156689 000NU            000                                           
    01001456544d@
    000CP      01909000      ZU0000008dd00294      QRN01402140116688 000NU            000                                           
    01001456544d@
    000XC      01909000      ZU0000008ee00294      QNN01402140116687 000NU            000                                           
    01001456544d@
    et donc on lancer nommer type000.ksh

    avec comme paramètre le nom du fichier text


    Pourquoi
    le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
           echo "NOE_NUE:" ${NOE_NUE}
           echo "numemet:" ${numemet}
           echo "NOE_NUE_000:" ${NOE_NUE_000}
    renvoi t'il comme valeur " 01886600" et non " 01886600" .
    ou son donc passer les 6 caractères blanc en début de cette zone?
    pourquoi y a t'il troncature de 5 caractères blanc pour les 6 présents.

    LEs autres zones qui suivent sont aussi troncquer? why ? Help.

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    ou son donc passer les 6 caractères blanc en début de cette zone?
    probablement dans les guillemets que tu n'as pas utiliser !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "NOE_NUE: >${NOE_NUE}<"
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre habitué Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 493
    Points : 152
    Points
    152
    Par défaut bienvue
    Citation Envoyé par N_BaH Voir le message
    probablement dans les guillemets que tu n'as pas utiliser !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "NOE_NUE: >${NOE_NUE}<"
    effectivement en déplace ces guillements cela fonction/ Mais pourquoi? quelle différence?

  4. #4
    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 458
    Points
    13 458
    Par défaut
    Bonjour

    Aucune différence entre les 2 commandes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo toto
    toto
    $ echo     toto
    toto
    Comme l'interpréteur de commande commence par remplacer ce qu'il peut, puis interprète la commande, alors les espaces (dans la valeur de variable) vont être ignorés si on ne les protège pas.

    Il y a 3 niveaux:
    • sans protection
    • protection par double quotes
    • protection par simple quotes


    Médite la sortie suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ a="toto    va     au marché."
    $ echo $a
    toto va au marché.
    $ echo "$a"
    toto    va     au marché.
    $ echo '$a'
    $a
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Membre habitué Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 493
    Points : 152
    Points
    152
    Par défaut Recherche sur le Shell un cut qui coupe mal?
    Si je poursuite la méthode.
    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
    local Z_NUMEMET_C1=`echo "${NOE_NUE}" | cut -c 1-1`
    Z_NUMEMET=`echo "${NOE_NUE}" | cut -c 7-14` 
    FICsqlSENT=/HOME/DEDALIOS/RESENTE.sql
     
    if [ "$Z_NUMEMET_C1" -eq "0" ];    then 
       Z_NUM_EMETTEUR=${NOE_NUE}       
    else          
       Z_NUMEMET=`echo "${NOE_NUE}" | cut -c 7-14` 
       eval  Z_NUM_EMETTEUR=${les_zero}${Z_NUMEMET}  
       echo "Z_NUM_EMETTEUR:${Z_NUM_EMETTEUR}"
       echo "Z_NUMEMET:${Z_NUMEMET}"
    fi
     
     
    echo " select * from Table-Z  Logique_C " >> ${FICsqlSENT}
    echo "  where " >> ${FICsqlSENT}
    echo "  NUM_EMETTEUR  = '${Z_NUM_EMETTEUR}' ">> ${FICsqlSENT}
    j'ai constater que dans le fichier résultant j’obtiens si la zone d'origine est " 02114001"

    ce la me donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from Table-Z  Logique_C
    where NUM_EMETTEUR  = ' 02114001'
    alors que je cherche a obtenir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from Table-Z  Logique_C
    where NUM_EMETTEUR  = '00000002114001'

    quelle est l'erreur ?

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Bonjour,

    On remarque surtout que tu pourrais utiliser la balise CODE ( le # )...

    Et aussi que dans ton code tu ne définis pas la variable les_zero.

    Et quel est l'utilité de la commande eval dans ton code ?
    Cordialement.

  7. #7
    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 458
    Points
    13 458
    Par défaut
    Citation Envoyé par dedalios Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from Table-Z  Logique_C
    where NUM_EMETTEUR  = ' 02114001'
    alors que je cherche a obtenir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from Table-Z  Logique_C
    where NUM_EMETTEUR  = '00000002114001'

    quelle est l'erreur ?
    L'erreur est d'imaginer qu'un SGBDR a besoin des zéros non significatifs à gauche dans un champ probablement numérique ...
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  8. #8
    Membre habitué Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 493
    Points : 152
    Points
    152
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Bonjour,

    On remarque surtout que tu pourrais utiliser la balise CODE ( le # )...

    Et aussi que dans ton code tu ne définis pas la variable les_zero.

    Et quel est l'utilité de la commande eval dans ton code ?
    --- désolé un simple oublie

    Citation Envoyé par Flodelarab Voir le message
    L'erreur est d'imaginer qu'un SGBDR a besoin des zéros non significatifs à gauche dans un champ probablement numérique ...
    est non , L'erreur est de croire le contraire . Surtout quand les champ de la susdite base son de type varchar : le système réagit très mal même si l'on pourrais penser que les outils d'interprétation d’Accès à la base puisse interprété




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from Table-Z  Logique_C
    where NUM_EMETTEUR  =2114001
    au même titre que


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from Table-Z  Logique_C
    where NUM_EMETTEUR  ='2114001'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from Table-Z  Logique_C
    where NUM_EMETTEUR  =' 02114001'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from Table-Z  Logique_C
    where NUM_EMETTEUR  ='0000002114001'


    ce n'est pas toujours le cas....

    les faits sont les faits....Ils peuvent contredire certaines supputation

  9. #9
    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 458
    Points
    13 458
    Par défaut
    Argh... C'est juste ce que je ne voulais pas entendre. Il y a un ingénieur qui a choisi de mettre une série de chiffres dans un varchar.

    Mais tu ne dis pas si ton problème est résolu. Pour la mise en forme, il y a la fonction printf (connue dans de nombreux langages: bash, awk, php ...) ou sprintf

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ printf "%08i\n" 23
    00000023
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

Discussions similaires

  1. fonction qui écrit dans une barre de recherche sur internet
    Par ubssecurities dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/08/2008, 10h36
  2. Réponses: 8
    Dernier message: 13/04/2008, 14h44
  3. Recherche tutoriel sur le shell
    Par licorne dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 29/03/2006, 13h23
  4. Réponses: 8
    Dernier message: 10/09/2004, 17h30
  5. Recherche sur champ calculé
    Par srvremi dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/07/2004, 14h04

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