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 :

ajouter des espaces à une chaine de caractères


Sujet :

Shell et commandes POSIX

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 6
    Points : 13
    Points
    13
    Par défaut ajouter des espaces à une chaine de caractères
    bonjour,

    je suis néophytre en shell ( ksh ) et ca fait 4 jours que je tente et cherche en vain partout d'ajouter des blancs à une chaine de caractères. j'en ai fais des tests.

    j'ai un fichier plat en entrée sans séparateur. seul le positionnement des champs compte.
    exple :
    vvvvvvv 11111111 aaaaaa
    je sais que le champ corespondant à 11111 peut comporter 10 caractères et alors pas d'espace.la colonne aaaaaa doit toujours débuter en position 23.

    en entrée j'ai un paramètre de longueur variable 888 par exemple qui arrive. l'objectif est d'arriver à avoir dans le fichier
    vvvvvvv 888 aaaaaa

    les chmaps 11111111 et 888 sont de longueur variables entre 1 et 10 caractères.
    j'ai calculé leur longueur , fais la différence, puis écrit une boucle qui augmente 888 d'un espace ( " " ) à chaque mais ca ne marche pas.
    je ne peux pas utiliser car je travaille sur des chaînes et non pas une ligne de fichier.
    j'ai commencé à regardé le hawk mais c'est de l'hébreu.

    qui peut aider une femme en difficulté. merci d'avance.

  2. #2
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Rien compris

    Tu dis j'ai un fichier plat en entrée sans séparateur. et dans ton exemple tu mets des caractères séparateurs (espace)

    Tu parles de champs, ce qui sous entends un séparateur

    Donc merci de donner un exemple concret de ce que tu veux (AVANT => APRÈS) !

    Merci.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 6
    Points : 13
    Points
    13
    Par défaut apport d'informations
    rebonjour,

    sans entrer dans la notion des fichiers, je vais expliquer ce que je veux faire le plus clairement possible en isolant plus particulièrement ce qui me pose pb :

    voici la partie de mini-shell que j'ai écrite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    difference=8
    ctr_ancien=$1
    set -x
    	if [ ${difference} -gt 0 ]
    	then
    		echo 'difference coucou:' $difference
    		ctr_ancien_espace=`echo $ctr_ancien|sed -e :a -e 's/^.\{1,'$difference'\}$/& /;ta'`
    		echo 'contrat_ancien_espace: ' $ctr_ancien_espace'aaa'
    	fi
    set +x
    objectif :
    j'ai une chaine de caractères en entrée ( JD108 par exemple de 5 caractères en entrée mais ca peut être plus )

    je veux que cette chaine soit complétée avec 8 blancs ou espaces.

    dans mon dernier echo j'obtiens JD108 aaa au lieu de JD108 aaa.
    why?

    je te remercie de ton aide.

  4. #4
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 6
    Points : 13
    Points
    13
    Par défaut
    correctif à mon apport :

    dans mon dernier echo j'obtiens JD108 aaa au lieu de JD108 aaa.
    je veux 8 blancs après ma chaîne de caractères et non pas 1 seul.
    why?

  5. #5
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 6
    Points : 13
    Points
    13
    Par défaut suppléments
    c'est bizarre :
    l'édition du post dans le forum change lors de l'édition par rapport à ce que j'ai écris :

    dans mon dernier echo j'obtiens JD108 aaa alors que je veux 8 espaces (ou blancs) entre JD108 et aaa. j'en obtiens un seul malheureusement.
    why?

  6. #6
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Ton problème vient du fait que ta variable n'est pas quotée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ A=$(echo "JD108" | sed ':z;s/^.\{1,8\}$/& /;tz')
     
    $ echo ${A}aa
    JD108 aa
     
    $ echo "${A}aa"
    JD108    aa
     
    $

  7. #7
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 6
    Points : 13
    Points
    13
    Par défaut
    merci.

    fianlement, la partie la plus compliquée ' le sed' est bon. je maque de concentration merci.

  8. #8
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 6
    Points : 13
    Points
    13
    Par défaut question supllémentaire
    pourquoi ca mets 4 espaces et non pas 3 dans la réponse?

    on complète JD108 avec 3 espaces jusqu'à 8 et non pas 4 comme le montre ton dernier echo?

  9. #9
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par tricette Voir le message
    pourquoi ca mets 4 espaces et non pas 3 dans la réponse?

    on complète JD108 avec 3 espaces jusqu'à 8 et non pas 4 comme le montre ton dernier echo?
    Parce qu'il faut soustraire 1 au nombre final désiré, donc mettre "{1,7}". C'est le mécanisme de sed qui veut ça

    Nous sommes dans une équivalence de "inférieur OU égal à x" et non pas de "inférieur à x"

Discussions similaires

  1. Ajouter des caracteres à une chaine
    Par flatron dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/02/2008, 19h15
  2. Réponses: 6
    Dernier message: 14/12/2006, 17h27
  3. [String] Ajouter des espaces à une chaine
    Par jake84 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 13/02/2006, 16h56
  4. Réponses: 2
    Dernier message: 06/12/2002, 07h50

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