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

Langage Perl Discussion :

inserer des "array" en colonne dans un fichier texte


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 23
    Par défaut inserer des "array" en colonne dans un fichier texte
    Bonjour a tous !
    Voila mon soucis. Je dispose de trois array, appelee @X_array, @Y_array et @Z_Array. les trois array sont des colonnes de coordonnes. Par exemple, @X_array ressemble a ca:

    0.000254
    0.33698
    0.145


    mon @Y_array est:

    0.000
    0.123
    0.741


    mon Z_array est:

    8.88
    9.99
    4.44


    Les trois array ont le meme nombres de valeurs, avoisinant les 5000 (je n'ai mis qu'un extrait ici).
    je souhaiterais imprimer ces trois arrays dans un fichier .txt en colonne: mon fichier text ressemblerais a ca
    "
    coordinate : origin x=0.000254 y=0.000 z=8.88
    coordinate : origin x=0.33698 y=0.123 z=9.99
    coordinate : origin x=0.145 y=0.741 z=4.44
    "

    je pense que je peux me debrouiller a ajouter les string coordinate : origin x= ainsi que y= et z=
    Mais je ne sais pas comment imprimier dans mon texte les array de maniere a ce que la premiere valeur de @X_array soit a cote de la premiere valeur de @Y_array et de @Z_array

    Voila ce que j'ai essaye de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      open (TEMPLATE, "<", "Compact_explicit.inp") or warn 'scale input not found';    #open a template file, where I need to copy the coordinates
      open (INPUT, ">", "Compact_explicit_final.inp");   # open a new file in which I'll copy the template plus the coordinate 
      @INP = <TEMPLATE>;   #put the template file in an array
      for my $line(@INP){       #read the template line one by one 
        print INPUT $line;         #print the template lines into my input 
        if ($line =~ /flag/) {      #if the word flag shows up, I would like to copy my coordinates
          for ($i=1;$i <10; $i++){  
            print INPUT "coordinate  :  origin x=@X_array[$i]    @Y_array[$i]";    
           }
        }

    Cela retourne une erreur
    Pouvez vous m'aider s'il vous plait?

    Merci beaucoup !

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 198
    Par défaut
    Bonjour,

    une solution simple pour dépanner en attendant une réponse plus propre.

    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
    use strict;
    use warnings;
    use feature 'say';
     
    my @x = qw(0.000254 0.33698 0.145);
     
    my @y = qw(0.000 0.123 0.741);
     
    my @z = qw(8.88 9.99 4.44);
     
    my $incrementation = 0;
     
    for (@x) {
    	say "X = $_ Y = $y[$incrementation] Z = $z[$incrementation]";
    	$incrementation ++;
    }
    Résultat:
    X = 0.000254 Y = 0.000 Z = 8.88
    X = 0.33698 Y = 0.123 Z = 9.99
    X = 0.145 Y = 0.741 Z = 4.44

  3. #3
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 3 612
    Billets dans le blog
    1
    Par défaut
    Le code que tu présentes ne ressemble pas trop à la description que tu donnes. Du coup, ce n'est pas très clair.

    Questions: es-tu sûr que tes trois tableaux auront toujours le même nombre d'éléments? Tu as en entrée trois tableaux, ou deux tableaux et un fichier?

    Selon tes réponses, je reviendrai proposer une solution, mais, pour l'instant, il y a au moins cette erreur dans ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print INPUT "coordinate  :  origin x=@X_array[$i]    @Y_array[$i]";
    Il faudrait changer les @ en $, donc ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print INPUT "coordinate  :  origin x=$X_array[$i]    $Y_array[$i]";

    En outre, il faudrait sans doute ajouter une fin de ligne. Appeler INPUT un filehandle de sortie n'est vraiment pas d'une grande clarté.

  4. #4
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 3 612
    Billets dans le blog
    1
    Par défaut
    Bonsoir caramon _majere,

    Citation Envoyé par caramon _majere Voir le message
    Bonjour,

    une solution simple pour dépanner en attendant une réponse plus propre.

    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
    use strict;
    use warnings;
    use feature 'say';
     
    my @x = qw(0.000254 0.33698 0.145);
     
    my @y = qw(0.000 0.123 0.741);
     
    my @z = qw(8.88 9.99 4.44);
     
    my $incrementation = 0;
     
    for (@x) {
    	say "X = $_ Y = $y[$incrementation] Z = $z[$incrementation]";
    	$incrementation ++;
    }
    Ça marche et c'est propre, pas de problème, mais ce serait un peu plus "perlien" d'itérer sur un intervalle entre 0 et le dernier indice du tableau et d'écrire quelque chose du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    # use ...
     
    my @x = qw(0.000254 0.33698 0.145);
    my @y = qw(0.000 0.123 0.741);
    my @z = qw(8.88 9.99 4.44);
     
    for my $i (0 .. $#x) {
    	say "X = $x[$i] Y = $y[$i] Z = $z[$i]";
    }

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 198
    Par défaut
    Voila la réponse plus propre
    C'est plus propre et plus rapide à écrire.


    Citation Envoyé par Lolo78 Voir le message
    Bonsoir caramon _majere,



    Ça marche et c'est propre, pas de problème, mais ce serait un peu plus "perlien" d'itérer sur un intervalle entre 0 et le dernier indice du tableau et d'écrire quelque chose du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    # use ...
     
    my @x = qw(0.000254 0.33698 0.145);
    my @y = qw(0.000 0.123 0.741);
    my @z = qw(8.88 9.99 4.44);
     
    for my $i (0 .. $#x) {
    	say "X = $x[$i] Y = $y[$i] Z = $z[$i]";
    }

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/11/2016, 21h24
  2. Ecrire des vecteurs colonnes dans un fichier text
    Par Ballim dans le forum MATLAB
    Réponses: 6
    Dernier message: 14/11/2008, 10h08
  3. Séparateur de colonnes dans un fichier texte
    Par robert323 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/01/2008, 13h02

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