[Perl] Problème de de print dans une chaine!!

Problème de de print dans une chaine!! [Perl] - Perl - Programmation

Marsh Posté le 13-05-2005 à 21:08:26    

Bon je savais que j'étais pas fait pour la prog mais la j'en peux plus!!!!
 
#! /usr/bin/perl
 
use strict;
my $val;
my $vall;
my @FCS_file;
my @FCS_mesure=(0,0,109,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
my $file = 'FCS_buffer.txt';
 
open(FIC,$file) or die;
@FCS_file = <FIC>;
close(FIC);
 
print "FCS_file  = @FCS_file\nFCS_mesure= @FCS_mesure\n";
 
my $val = @FCS_file[2];
print "FCS_file[2] = $val\n";
 
my $vall = @FCS_mesure[2];
print "FCS_mesure[2] = $vall\n";
 
RESULTAT!!!!
 
FCS_file  = 0 0 109 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
FCS_mesure= 0 0 109 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
FCS_file[2] =  
FCS_mesure[2] = 109
 
 
POURQUOI LES FCS_FILE NE S AFFICHE PAS !!!!!!! GRRRRRRRRRRRRRR


Message édité par mc40 le 16-05-2005 à 10:00:03
Reply

Marsh Posté le 13-05-2005 à 21:08:26   

Reply

Marsh Posté le 14-05-2005 à 15:17:17    

non personne ne px voir ma connerie elle doit etre énorme et je la voie meme pas !!!

Reply

Marsh Posté le 14-05-2005 à 17:07:00    

La question ne s'adressait pas à moi donc je n'ai pas répondu, mais c'est "my $val = $FCS_file[2];".

Reply

Marsh Posté le 15-05-2005 à 12:42:51    

Alors donc comme tu me dis j'ai changer ça :
#! /usr/bin/perl
 
use strict;
my $val;
my $vall;
my @FCS_file;
my @FCS_mesure=(0,0,109,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
my $file = 'FCS_buffer.txt';
 
open(FIC,$file) or die;
@FCS_file = <FIC>;
close(FIC);
 
print "FCS_file  = @FCS_file\nFCS_mesure= @FCS_mesure\n";
 
my $val = $FCS_file[2];
print "FCS_file[2] = $val\n";
 
my $vall = $FCS_mesure[2];
print "FCS_mesure[2] = $vall\n";
 
Mais le résultat est toujours le meme !!!
 
FCS_file  = 0 0 109 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
FCS_mesure= 0 0 109 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
FCS_file[2] =  
FCS_mesure[2] = 109
 
 
La franchement je vois pas !!!

Reply

Marsh Posté le 15-05-2005 à 13:05:25    

Alors la je dream!!
 
si j'assigne le contenue du fichier a ma variable FCS_file et que je print toute la chaine ok ça print bien mais si je veux print une valeur dans la chaine ça marche pas!!!
mais si j'init ma var FCS_file directement dans le prog alors la ça marche !!!!!!

Reply

Marsh Posté le 16-05-2005 à 09:43:31    

:pt1cable: :pt1cable: :pt1cable: .....

Reply

Marsh Posté le 16-05-2005 à 09:50:29    

ca me parait bizare ton truc
deja en faisant @file = <FIC> tu devrait avoir des retour ligne à la fin de chaque element de ton tableau, donc ca devrait se voir dans ton print

Reply

Marsh Posté le 16-05-2005 à 09:52:03    

tu pourrais changer ton titre ? [:kiki]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 16-05-2005 à 09:57:17    

tu vx quoi comme titre?

Reply

Marsh Posté le 16-05-2005 à 09:57:53    

un truc qui veuille dire quelque chose


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 16-05-2005 à 09:57:53   

Reply

Marsh Posté le 16-05-2005 à 10:00:31    

Et la c'est mieux ? ;)


Message édité par mc40 le 16-05-2005 à 10:00:54
Reply

Marsh Posté le 16-05-2005 à 10:03:17    

ben voilà \o/


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 16-05-2005 à 10:08:54    

Dans ton fichier, tout est stocké sur une seule ligne.
 
Par conséquent, $FCS_file[2] n'existe pas.
Tu peux contrôler en imprimant la valeur de scalar(@FCS_file), pour voir.
 
Il faut utiliser une ligne du type :

Code :
  1. my @buffer = split /\s/, (join '', @FCS_file);


 
 
Et, par pitié, utilise les balises [cpp][/cpp] pour rendre ton code lisible.


Message édité par Elmoricq le 16-05-2005 à 10:09:45
Reply

Marsh Posté le 16-05-2005 à 10:11:01    

Bon mise a part mon titre tu voie pas une solution!!! J'ai due oublier un truc a la c** encore mais je voie vraiment pas!! quand je print la chaine entière qui vient de mon fichier c'est ok je voie bien toute la chaine mais quand je vx afficher une valeur de la chaine en particulier et bien je n'arrive jamais a l'afficher a l'ecran!!
 
Mais bon moi a la base je vx juste comparer chaque rang des deux chaines:
le rang 0  de la chaine 1 est-il plus grand que le meme rang de la chaine 2.
J'ai bien lu le poste qui plus bas mais j'ai rien compris!!

Reply

Marsh Posté le 16-05-2005 à 10:12:54    

ok on en apprend tout les jours je vais tester ça de suite!!

Reply

Marsh Posté le 16-05-2005 à 11:19:06    

bon en effet c'est GOOD ta solution!
Donc je récapitule mon problème:
 
1=> je met dans un fichier le contenue d'une chaine. Scalar(@chaine) me retournait bien 50 donc 50 valeures.
2=> Apres j'ouvre mon fichier et j'affecte son contenue à @chaine2 si j'effectue un print de chaine2 j'avais bien ma chaine de type valeur espace valeur espace .... mais lorsque je faisais scalar(@chaine2) cela me retournai 1 donc pas bon!!!!
3=> donc la solution proposée par Elmoricq est( attention utilisation de cpp ;) lol:
 

Code :
  1. my @buffer = split /\s/, (join '', @FCS_file);


 
ce qui a pour effet de virer les espaces et d'en remttre d'autre donc apres mon scalar(@chaine2) je retrouve mes 50 valeures et la je px en choisir une parmis 50  
 
voila merci a tous!!!!


Message édité par mc40 le 16-05-2005 à 11:19:43
Reply

Marsh Posté le 16-05-2005 à 11:22:46    

mc40 a écrit :

1=> je met dans un fichier le contenue d'une chaine. Scalar(@chaine) me retournait bien 50 donc 50 valeures.
2=> Apres j'ouvre mon fichier et j'affecte son contenue à @chaine2 si j'effectue un print de chaine2 j'avais bien ma chaine de type valeur espace valeur espace .... mais lorsque je faisais scalar(@chaine2) cela me retournai 1 donc pas bon!!!!


 
Au lieu de t'embêter à tout ça, lorsque tu stockes dans le fichier, tu devrais plutôt stocker "join '\n', @chaine".
Comme ça, quand tu relis ton fichier, tu stockes directement 50 lignes, et pas une ligne de 50 valeurs. Et tu n'as plus besoin de bricoler (parce que, bon, le split/join c'est pas tres beau comme procédé, je trouve)

Reply

Marsh Posté le 16-05-2005 à 12:08:11    

Citation :

pospos a dit: ca me parait bizare ton truc  
deja en faisant @file = <FIC> tu devrait avoir des retour ligne à la fin de chaque element de ton tableau, donc ca devrait se voir dans ton print


 
Excuse moi j'avais pas vu ta réponse!! ;)  
En effet je suis d'acord mais non il me met un espace entre mes valeures donc dans mon fichier je n'ai qu'une ligne enfin!!!
 
En suite Elmoricq j'ai en effet mis join "\n" mais à ma grande surprise il m'a pris mon \n comme des caractères et non comme un retour chario!!! alors que dans l'éditeur il me le met bien en rose donc il a reconnu mon \n je capte pas tout mais bon la ça marche!!

Reply

Marsh Posté le 16-05-2005 à 14:10:49    

Parce que tu as mis '\n' et pas "\n".

Reply

Marsh Posté le 16-05-2005 à 14:25:29    

Hmm. Une erreur de ma part dans mon post.
Evidemment avec des apostrophes, ça ne peut pas marcher. Désolé.

Reply

Marsh Posté le 16-05-2005 à 16:05:16    

ok je test mdr ;)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed