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 :

Variable de longueur fixe


Sujet :

Shell et commandes GNU

  1. #1
    Membre habitué
    Profil pro
    DevOps
    Inscrit en
    Décembre 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : DevOps

    Informations forums :
    Inscription : Décembre 2008
    Messages : 254
    Points : 144
    Points
    144
    Par défaut Variable de longueur fixe
    Bonjour,

    Pour un échange de données avec un client j'ai besoin de générer un fichier de stock.
    Les prérequis sont définis et il faut plusieurs données dans un fichier texte.
    Le fichier sera impérativement en longueur fixe sans séparateur.
    Par exemple le premier champ dois être un numéro incrémental mais le champ doit être de longueur fixe (17 caractères).
    Si par exemple mon numéro est 1234 il faut que je complète ce numéro par des espace pour que j'arrive à 17 caractères au total.

    Je ne sais pas du tout comment procéder, j'ai fait quelques recherches mais sans trouver.
    Auriez vous une commande magique pour faire cela ?

  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
    Bonjour,

    Citation Envoyé par tiamat59 Voir le message
    Le fichier sera impérativement en longueur fixe sans séparateur.
    Par exemple le premier champ dois être un numéro incrémental mais le champs doit être de longueur fixe (17 caractères).
    Sans séparateur cela risque d'être assez ardu

    A défaut peut-on avoir la nature de chaque champ (chiffres, lettres, etc.) ?

  3. #3
    Membre habitué
    Profil pro
    DevOps
    Inscrit en
    Décembre 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : DevOps

    Informations forums :
    Inscription : Décembre 2008
    Messages : 254
    Points : 144
    Points
    144
    Par défaut
    Et bien j'aurais les 2, des lettres et des chiffres.

    Par exemple une de mes fonctions est de compter le nombre de lignes d'un ficher.
    Donc par exemple j'obtiens 12 lignes
    ce chiffre 12 je dois le mettre dans un nouveau fichier et le combler de 4 espaces pour que la longueur soit de 6.


    J'ai commencé des test en faisant cela mais ça ne fonctionne pas et je me vois mal faire ce test à chaque chaine à ajouter.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    nbl="abcd"
    until test [${#nbl} -ne 6]
    do
    nbl=$nbl" "
    done
     
    echo nbl

  4. #4
    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
    Ok, c'est plus clair

    Un exemple parmi d'autres sûrement... j'ai mis un tiret pour une meilleure visualisation, à remplacer par ce que tu veux :

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

  5. #5
    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 : 48
    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 262
    Points
    12 262
    Par défaut
    utiliser des longueur fixes n'est pas nécessairement une mauvaise idée en soit, mais vu le besoin, ne serait il pas plus malin d'utiliser une variable de type tableau tout simplement pour 1 case 1 donnée tu traites ainsi sans te soucier de compter les longueurs à chaque traitement, ça évitera les erreurs, et lenteurs.

    une fois les données traitées, là tu mets en forme une seule fois chaque ligne du tableau obtenu dans un fichier que tu échangeras avec ton client.

    C'est beaucoup plus souple et surtout si les besoins évoluent ou autre... ce sera modifiable.

    var[1]=truc
    var[2]=45
    var[..]=...
    var[x]=treter


    et après tu mets en forme
    ça permettra aussi de tester chaque valeurs indépendamment, d'arrondir si nécessaire les valeurs chiffrées, de découper si nécessaire les données textuelles etc.... bref de faire un vrai contrôle d'erreur avant d'envoyer ton fichier au client.

    et oui effectivement là tu peux te passer totalement de séparateur.

  6. #6
    Membre habitué
    Profil pro
    DevOps
    Inscrit en
    Décembre 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : DevOps

    Informations forums :
    Inscription : Décembre 2008
    Messages : 254
    Points : 144
    Points
    144
    Par défaut
    Merci pour cette fonction zipe31

    Par contre pour les tableaux je ne pense pas que ce soit nécessaire car sur mon fichier sans séparateur il n'y a qu'un ligne en faite.
    J'ai un deuxième fichier qui aura lui plein de lignes mais d'après la doc du client lui il aura des séparateurs |, j'ai demander confirmation.
    En plus les tableaux en sh je ne sais pas trop les utiliser mais a voir.
    De toute façon sur le traitement existant que je dois adapter à cette situation le deuxième fichier lui est traité en php (langage que je maitrise beaucoup mieux) donc je crois que je ne serai plus bloqué.

    Merci pour votre aide.
    Je laisse le sujet un peu ouvert pour l'instant, j'aurais peut être d'autre questions bientôt sur le sujet .

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 481
    Points
    19 481
    Par défaut
    Bonjour,

    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var=1234
    printf "%-17s<-par exemple\n" $var
    1234             <-par exemple
    ouf!

  8. #8
    Membre habitué
    Profil pro
    DevOps
    Inscrit en
    Décembre 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : DevOps

    Informations forums :
    Inscription : Décembre 2008
    Messages : 254
    Points : 144
    Points
    144
    Par défaut
    Je viens de me rendre compte que la partie sh du script qui générait cette ligne en fait ne fonctionnait pas et cela était doublé dans le php (ce qui est complétement con, il aurait pu effacer la partie sh si elle ne servait pas) enfin bref.

    En faite il me faudrait la même chose mais en php.
    Je sais que ce n'est pas le bon forum mais je tente quand même on ne sait jamais.

  9. #9
    Membre habitué
    Profil pro
    DevOps
    Inscrit en
    Décembre 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : DevOps

    Informations forums :
    Inscription : Décembre 2008
    Messages : 254
    Points : 144
    Points
    144
    Par défaut
    trouvé avec str_pad

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Longueur variable et longueur fixe
    Par Arola78 dans le forum Access
    Réponses: 3
    Dernier message: 22/11/2007, 18h29
  2. Réponses: 9
    Dernier message: 13/10/2006, 16h39
  3. string de longueur fixe
    Par Rychi dans le forum C++
    Réponses: 11
    Dernier message: 14/09/2006, 22h46
  4. Déclarer un tableau de longueur fixe
    Par horneth dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 18/08/2006, 23h26
  5. Comment enregistrer un stream de longueur fixe ?
    Par Alcarbone dans le forum MFC
    Réponses: 5
    Dernier message: 13/04/2003, 21h14

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