Soutenez-nous
Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Discussion: variable dans tableau

  1. #1
    Nouveau Membre du Club
    Inscrit en
    mars 2006
    Messages
    552
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 552
    Points : 33
    Points
    33

    Par défaut variable dans tableau

    Bonjour,

    J'ai un certain nombre de variable que je souhaiterai placé sur une ligne dans un fichier, mais dans des positions prédéfinis.

    exemple :
    my $va1=45689;
    my $va2=dupont;
    my $va3=15612345;
    Je souhaiterai le résultat de ces variables soit dans un fichier comme l'exemple ci-dessous :
    45689 dupont 15612345

    Entre les variables, je veux mettre un certain nombre d'espace, entre le 9 et d, je souhaiterai 4 blanc.
    Entre t et 1, 8 blancs.

    En sachant que le premier caractére de ma variable $va3, doit toujours être en position 23. Ma variable $2, en position 9.......

    Comment puis je faire ?

  2. #2
    Membre Expert

    Homme Profil pro Laurent R.
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    988
    Détails du profil
    Informations personnelles :
    Nom : Homme Laurent R.
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2012
    Messages : 988
    Points : 2 139
    Points
    2 139

    Par défaut

    Déclare des variables comportant les espaces:
    Code :
    my ($sp4, $sp8) = ("    ", "        ");
    ou bien:

    Code :
    1
    2
    my $sp4 = " " x 4;
    my $sp8 = " " x 8;
    Ensuite:

    Code :
    my $ligne = $var1 . $sp4 . $var2 . $sp8 . $var3 . "\n";

    Ou encore par interpolation directe dans une chaîne de caractères:

    Code :
    my ligne = "$var1    $var2        $var3\n";
    Mes articles sur ce site: La programmation fonctionnelle en Perl - Partie 1: les opérateurs de liste et La programmation fonctionnelle en Perl - Partie 2: les fonctions d'ordre supérieur
    ______

    Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés.

  3. #3
    Membre régulier Avatar de elvivo
    Inscrit en
    mai 2002
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : mai 2002
    Messages : 105
    Points : 71
    Points
    71

    Par défaut

    Il semble que tu souhaite rendre tes donnees au dans un format fixed-width.
    Dans ce cas tu devrait utiliser pack, particulierement bien adapte a ce genre de fonction:
    Code :
    1
    2
    3
    4
    5
    6
    7
     
    use strict;
    use warnings;
     
    my @row = (45689, 'dupont', 15612345);
    my $out = pack "A9A14A10", @row;
    print "$out\n";
    Tu as preciser que le premier et le second champ devaient toujours faire 9 et 14 characteres mais tu n'as rien dit pour le dernier donc j'ai mis 10 histoire que ca tienne. Tu n'as qu'a remplacer par la taille que tu desires.
    In code we trust !!

  4. #4
    Nouveau Membre du Club
    Inscrit en
    mars 2006
    Messages
    552
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 552
    Points : 33
    Points
    33

    Par défaut

    Je pense que je me suis mal exprimé dans ma demande.

    En fait, je dois créer une ligne qui ne dépasse pas 160 caractéres. Chaque zone correspond à des données bien définis.

    Par exemple
    Le matricule sur 5 caractéres, doit être en position 1.
    Le Nom de la personne sur 20 caracteres maximum doit etre en position 6.
    le prenom de la personne sur 10 caracters en position 26.

    Comment puis je faire, en sachant que par exemple pour le nom, il peut y avoir que 10 caractéres, donc le reste serait combler par des blancs.

    Merci

  5. #5
    Membre Expert

    Homme Profil pro Laurent R.
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    988
    Détails du profil
    Informations personnelles :
    Nom : Homme Laurent R.
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2012
    Messages : 988
    Points : 2 139
    Points
    2 139

    Par défaut

    La fonction pack proposée par Elvivo ajoutera les caractères de bourrage nécessaires. Sinon, il y a aussi la fonction sprintf qui peut faire la même chose, mais ce sera souvent un peu plus compliqué. Et aussi la fonction format, plus orientée format de la ligne complète.
    Mes articles sur ce site: La programmation fonctionnelle en Perl - Partie 1: les opérateurs de liste et La programmation fonctionnelle en Perl - Partie 2: les fonctions d'ordre supérieur
    ______

    Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés.

  6. #6
    Membre régulier Avatar de elvivo
    Inscrit en
    mai 2002
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : mai 2002
    Messages : 105
    Points : 71
    Points
    71

    Par défaut

    Disons que pack pour de l'ascii c'est simple pour des formats plus exotics ca peur devenir assez tordu
    Sinon il te suffit d'adapter la solution que j'ai donner en modifiant les tailles que j'ai mis. Chaque nombre dans le premier argument de pack represent la taille d'un champ donc il te suffit de changer pour coller au format final.
    In code we trust !!

  7. #7
    Nouveau Membre du Club
    Inscrit en
    mars 2006
    Messages
    552
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 552
    Points : 33
    Points
    33

    Par défaut

    merci pour ta solution, je vais essayer de me débrouiller.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •