salut a tous j'aimerai procede a une refenrence sur un dossier et cela ne me reussi pas peut etre
quelqu'un pourrai m'aide merci bien.
$file1 = shift @ARGV ; #ligne 24
open my $file1, "<", 'C:\Users\Desktop\SysCompare_v01\CSV\InputData\default_sys.xml';
open my @files = glob 'C:\Users\Desktop\SysCompare_v01\InputData\*.xml'; #ligne 28
lorsque j'execute il me renvoi l'erreur suivant
C:\Users\Desktop\SysCompare_v01\PerlScript>perl parser.pl default_sys.xml *.xml
Global symbol "$file1" requires explicit package name at parser.pl line 24.
BEGIN not safe after errors--compilation aborted at parser.pl line 28.
C:\Users\Desktop\SysCompare_v01\PerlScript>
# Plusieurs trucs bizarres…
Posté par anaseto . Évalué à 2.
Ce n'est pas comme ça que fonctionne
open
, je te conseille de lire un tutoriel quelconque dessus (ou justeperldoc -f open
). La syntaxe c'estopen my $descripteur, '<', $nom_du_fichier_a_ouvrir
.De plus, tu déclares avec
my
une variable ($file1
) que tu as déjà utilisée avant (d'où ton message d'erreur), mais de toutes façons, tu confonds nom de fichier et descripteur de fichier. Tu voulais peut-être écrire plutôt :mais c'est difficile à savoir.
[^] # Re: Plusieurs trucs bizarres…
Posté par Henri . Évalué à -6.
J'aimerai qu'il ouvre un fichier se trouvant dans un dossier, c'est cela mon probleme
[^] # Re: Plusieurs trucs bizarres…
Posté par NeoX . Évalué à 3.
Deux possibilités :
avec le chemin codé en dur dans le code :
et avec le chemin, pris en argument de la ligne de commande :
ou plus loin, tu fais un GLOB du dossier pour prendre tous les fichiers,
il faudra alors boucler sur le tableau @files pour lire le nom de chacun des fichiers.
[^] # Re: Plusieurs trucs bizarres…
Posté par totof2000 . Évalué à 2.
Dit autrement, le nom de fichier doit être passer en dernier argument de open.
le premier argument (file_handler) est une variable que tu dois fournir à la fonction open, mais que tu ne dois pas initialiser. C'est la fonction open qui lui affectera sa valeur. Ensuite cette variable te servira de référence vers le fichier que tu as ouvert pour lire, écrire, etc … dedans.
Le nom de fichier n'est utile qu'à l'ouverture, après tu utilises la référence.
[^] # Re: Plusieurs trucs bizarres…
Posté par NeoX . Évalué à 2.
pour completer ce que dit totof2000
[^] # Re: Plusieurs trucs bizarres…
Posté par Henri . Évalué à -6. Dernière modification le 06 octobre 2015 à 14:56.
je suis desole ca ne marche pas
[^] # Re: Plusieurs trucs bizarres…
Posté par Henri . Évalué à -6. Dernière modification le 06 octobre 2015 à 17:57.
comment je peut splitter cette chaine
j'aimerai qu'il me renvoi juste default
[^] # Re: Plusieurs trucs bizarres…
Posté par Nicolas Casanova . Évalué à 1.
[^] # Re: Plusieurs trucs bizarres…
Posté par Henri . Évalué à -6.
Merci Nicola
ca fonctionne
[^] # Re: Plusieurs trucs bizarres…
Posté par NeoX . Évalué à 3.
c'est sur qu'avec cette reponse, on va pouvoir t'aider,
tu as essayé quoi ?
ca dit quoi ?
tu as compris comment on ecrit le open et comment on utilise le file_handler ?
[^] # Re: Plusieurs trucs bizarres…
Posté par Henri . Évalué à -6. Dernière modification le 06 octobre 2015 à 18:25.
Neox
voila tout le code, les fichiers xml se trouvent tous dans le dossier InputData
[^] # Re: Plusieurs trucs bizarres…
Posté par NeoX . Évalué à 2.
oui, donc visiblement tu n'as pas compris qui fait quoi dans les bout de code qu'on t'a donné, je me suis arrété apres les 3 premieres lignes
rien que sur les 3 premieres lignes…
ligne 1 : ton $file1, c'est une variable prise depuis la ligne de commande
ligne 2 : finalement non, tu definis $file1 en dur pour lui dire que c'est C:\Users\Desktop…..default_sys_156778.xml'
ligne 3 : tu n'as pas compris la construction du OPEN
je le redis ici :
en supposant que tu veuilles ouvrir, en lecture, le fichier definit à la ligne 1 OU à la ligne 2
il faut ecrire
puis quand tu voudras lire une ligne de ce fichier tu liras du $FH et non sur $ile1
par exemple un peu plus loin tu le fais comme il faut avec FileResult (le fichier) et FHresult (le handler)
[^] # Re: Plusieurs trucs bizarres…
Posté par Henri . Évalué à -7.
Neox,
qu'es ce que tu veus vraiment dire je vais te dire ce code fonctionne sans probleme lorsque les fichiers et mon script se trouvent dans le meme dossier, dire que qu'on m'a donne le code je te remerci bien. comme je suis si bete que je ne peus pas ecrire le moindre code en perl. Merci de la remarque.
Mon probleme est que mon script puisse retrouver les fichiers dans un dossier
[^] # Re: Plusieurs trucs bizarres…
Posté par NeoX . Évalué à 2.
bien,
admettons que le code fonctionne malgré les 3 premiers lignes qui ne font rien.
tu definis ensuite un tableau avec les fichiers avec
j'imagine que c'est ca que tu veux remplacer par un autre dossier, pour pouvoir lancer, par exemple :
et bien il faut appliquer ce que tu as appris depuis 3 mois.
1°) recuperer l'argument de la ligne de commande dans presenté dans $ARGV
2°) l'utiliser dans le
open my @files...
à la place du chemin en dure.ca donnerait un code qui ressemble à ca :
[^] # Re: Plusieurs trucs bizarres…
Posté par Henri . Évalué à -6.
Salut Neox,
pourquoi faut il encore preciser la direction comme tu ecrit ici plus haut
ruby
perl tonscript.pl "c:\Users\Desktop\UnAutreDossier\"
alors que pour faire demarre un script dans perl command-line il faut au prealable trouve le dossier dans lequel se trouve le script a savoir du genre
ruby
c:\Users\Desktop\Dossier ou le script se trouve> perl .........
[^] # Re: Plusieurs trucs bizarres…
Posté par NeoX . Évalué à 2.
pour que toi tu cherches à lancer le script qui se trouve dans
alors que moi je lances le script, evidemment depuis le dossier ou il est
mais avec des fichiers xml qui se trouvent ailleurs, et c'est ce chemin que je fournit en ARGUMENT du script.pl
chemin que tu recuperes dans ARGV à l'interieur du script, et qui te permet alors de faire ton GLOB pour avoir ton tableau de fichiers xml (@files)
de faire la boucle de traitement sur $file1 pris parmis @files
[^] # Re: Plusieurs trucs bizarres…
Posté par Henri . Évalué à -6.
voila j'ai fait comme tu me l'as demande il me renvoi cette erreur
la ligne 65 si tu regardes le script est :
[^] # Re: Plusieurs trucs bizarres…
Posté par NeoX . Évalué à 2.
et tu remplis bien ton @files comme proposé un peu plus tot ?
suivi d'une boucle pour traiter $file1 pris dans @files ?
ou tu as laisser ton
qui tente d'ouvrir un fichier, là ou vient de lui donner un DOSSIER.
[^] # Re: Plusieurs trucs bizarres…
Posté par Henri . Évalué à -6.
voila ce qu'il me revoi, si j'ai bien compris je dois encore declare ma variable $file1
[^] # Re: Plusieurs trucs bizarres…
Posté par NeoX . Évalué à 2.
ou relire les commentaires precedents,
y a des lignes qui ne font rien,
qui remplissent $file1
qui est tout de suite apres remplacer par autre chose.
ensuite la logique de ta demarche veut que dans l'ordre :
- tu recuperes le dossier contenant les xml à partir de @ARGV, disons dans une variable $MYDIR
- tu recuperes la liste des fichiers contenus dans ce $MYDIR pour stocker cette liste dans un tableau @FILES
- tu parcours ce tableau pour creer $FILE1 et effectuer le traitement qui t'interesse
[^] # Re: Plusieurs trucs bizarres…
Posté par anaseto . Évalué à 3.
Juste une remarque par rapport à une erreur qui se propage depuis tout à l'heure : faut enlever le
open
en trop ici, et ouvrir ensuite chaque fichier séparément dans une boucle sur@files
(si c'est vraiment le but de la manœuvre).[^] # Re: Plusieurs trucs bizarres…
Posté par NeoX . Évalué à 2.
je laisse volontairement certaines erreurs de l'utilisateur car à l'entendre son code fonctionne mais ne fait pas ce qu'il veut.
le but etant d'apprendre à l'utilisateur "comment pecher ?", pour devenir autonome, plutot que de donner de la nourriture tous les jours.
dans le meme genre y a le
my $file1=shift @ARGV;
suivit quelques lignes plus loin par
open my $file1,<,"c:\chemin\vers\fichier"
encore suivi un peu plus loin du fameux
open my @files= glob….
ou l'on imagine qu'il va remplacer le $file1 par le contenu de @files…
[^] # Re: Plusieurs trucs bizarres…
Posté par anaseto . Évalué à 2.
En même temps, avant qu'il ajoute ces lignes au début, peut-être que ça faisait quelque chose, c'est sans doute ce qu'il veut dire, j'imagine.
Je comprend ta démarche pédagogique, mais je pense que le mieux ce serait qu'henri lise un tutoriel en français qui reprend les bases de la programmation en Perl dans l'ordre, parce que sinon, forcément, on bloque sur des trucs de base.
[^] # Re: Plusieurs trucs bizarres…
Posté par Henri . Évalué à -6.
Anaseto,
merci bien du tutoriel, mais je voulais justedire que meme les experes programmeurs sont parfois confronte a des problemes. on peu bien pouvoir Programmer et etres confronter a certains petit problem.
je suis pas un bon programmeur je fait de mon mieu et mon sourci ici est que j'aimerai que mon code aille chercher ler fichier se trouvant dans un dossier und qu'il les traitent et ensuite stocke le fichier de sorti dans un autre dossier.
comme vous l'avez remarque le $file1 et @files sont dans un meme dossier.
sans toute fois aller cherche le fichiers xml dans un dossier lorsque ce script se trouve dans le meme dossier que les fichier xml il effectue tres bien son boulot, juste pour dire que ce code fonctionne tres bien.
c'est maintenant un probem de direction qui me menace.
Merci bien
[^] # Re: Plusieurs trucs bizarres…
Posté par NeoX . Évalué à 2.
si la direction en est à te menacer, va chercher le livre de programmation PERL.
parce qu'à notre niveau on ne peut plus grand chose.
on t'a montré :
perl monscript.pl monparametre
$MONPARAMETRE=shift @ARGV
open my $FH,'<',$file1
ou
open my $FH,'<','C:\chemin\vers\le\fichier.xml'
glob @FILES 'c:\chemin\connu\*.xml'
il te faut maintenant composer avec tout cas pour :
puis on en revient au basic elementaire :
faire une boucle sur tous les fichiers contenus dans @FILES
dans cette boucle
faire le traitement, qui ecrira sa sortie dans $DESTINATION
[^] # Re: Plusieurs trucs bizarres…
Posté par Henri . Évalué à -6.
pourquoi il ne trouve pas le fichier suivant a la ligne 66
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.