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 :

[fichier] test d'existance du fichier ne fonctionne pas


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 21
    Par défaut [fichier] test d'existance du fichier ne fonctionne pas
    BOnjour à tous,

    J'ai parcouru la FAQ, les cours et ça ne fonctionnt toujours pas

    j'utilise un script Perl pour générer des fichiers XML

    le nom du fichier n'est pas fixe mais pourrait être le même
    et donc je voudrais une condition qui demanderai à l'utilisateur "si il veut vraiment écraser l'ancien fichier " selon l'existance ou pas du fichier.

    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
    17
    18
    19
     
    #des lignes de code avant mais je doute que ça a un rapport avec le non fonctionnement de la boucle
    # j'entre un nom de fichier
    my $hostname = shift;
     
    if (-e $nomTemplate ) {
    			print "voulez vous vraiment remplacer le fichier existant? ";
    			print "tapez 'Y' ou 'N' !! ";
    			my $rep=<STDIN>;
    					if ($rep==N){
    					exit;
    					}
    					elsif ($rep==Y){
    			open XML, ">$nomTemplate.xml";
    					}
    			}
    			else {open XML, ">$nomTemplate.xml";}
     
    print XML "tessssssssst";
    quelqu'un pourrait me dire si j'ai tout faux dans mon raisonnement ou ma syntaxe et à ce moment là me donner conseils;

    merci

  2. #2
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par défaut
    Je ne comprend pas la condition de ta boucle if...
    Ensuite une erreur que je vois, c'est que "N" et "Y" sont des caractères littéraux, et donc tu ne peux tester l'égalité via un " == " mais il te faut utiliser l'opérateur de comparaison de String :

    EDIT: en fait c'est bon, je suppose que nomTemplate correspond au nom complet de ton fichier...

    Après je vois peut être un souci sur ta récuperation de <STDIN>, il me semble que tu devrais faire un chop() pour éliminer le caractère parasite de fin de ligne...

    EDIT2: Les parenthèse ne sont-elles pas nécessaires pour faire ton OPEN ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open(FICHIER,">tonfichier.txt");

    EDIT3: Dans ta boucle if du départ tu utilise un nom de fichier " $nomTemplate" , mais à l'interieur tu cherches à ouvrir un fichier " $nomTemplate.txt "

    Cela n'est pas le même fichier....

    soit $nomTemplate correspond à "tonfichier.txt" et dans ce cas tu enlève le ".txt" que tu as rajouté,
    soit $nomTemplate corresponf à "tonfichier" et dans ce cas tu dois mettre à chaque fois

    en lieu et place de $nomnTemplate.

  3. #3
    Membre chevronné Avatar de Beniou
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 357
    Par défaut
    Citation Envoyé par michon
    Je ne comprend pas la condition de ta boucle if...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (-e $nomTemplate )
    C'est un opérateur de test sur les fichiers. Celui-ci test l'existence d'un fichier. Il y en a d'autres comme -d qui test l'existence d'un répertoire, -r si un fichier possède les droits de lectures etc.
    De ce côté là ok sauf qu'effectivement comme le dit Michon, tu testes l'existance de $nomTemplate et ensuite tu essayes d'ouvrir $nomTemplate.xml... A toi de voir si ta variable doit contenir le nom du fichier+son extension ou bien seulement le nom. Dans le premier cas, ta condition if est bonne sinon il faut mettre quelque chose du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(-e $nomTemplate.".xml")
    De plus effectivement, la comparaison de chaine se fait avec "eq" et non "==". Par contre, attention à la casse etc.
    Tu peux faire par exemple pour le non où tu n'autorises que la lettre N ou n:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if($rep =~ /^n$/i)
    Ensuite à toi d'adapter et de gérer tous les cas possibles.
    Tu peux regarder aussi ce tuto pour bien gérer ce que tapes l'utilisateur : http://perl.developpez.com/sources/?page=Terminal#Term

    Enfin, tu ouvres tu essayes d'écrire dans ton fichier même si l'utilisateur répond non : place ceci au bon endroit.
    Et finalement, ne pas oublier de fermer ton descripteur

  4. #4
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 21
    Par défaut Merci mais pas trop compris [ /^n$/i ]



    beh moi je voulais justement tester l'existence du fichier! merci


    et ça marche

    parcontre je suis allée sur le lien que tu m'as filé, trés interessant mais ça ne m'a pas éclairé sur cette écriture

    pourrais tu m'en dire plus stp ? ou me donner un lien ou je pourrais mieux comprendre cette ecriture?

    je te remercie

  5. #5
    Membre chevronné Avatar de Beniou
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 357
    Par défaut
    C'est une expression régulière. Ca fourmille d'exemples et de tutos partout sur le net. Par exemple si tu n'es pas réfractaire à l'anglais, une doc bien complète : http://perldoc.perl.org/perlre.html

    Sinon pour expliquer cet exemple :
    L'expression régulière se compose de :
    le "^" -> début de chaîne
    lt "n" -> la lettre n
    le "$" -> fin de chaîne
    le "i" -> insensible à la casse

    En gros si rep contient la chaîne "n" ou "N" alors cela revoit vrai. Dans tous les autres cas cela renvoit faux. Par exemple si on tape "non" ca ne marchera pas car le n est encadré par le symbole début de chaîne - fin de chaîne ce qui oblige le contenu de la chaîne a être réduit à la simple lettre n ou N.

    bon je suis un peu brouillon mais les différents tutos devraient rapidement t"éclairer. Et si jamais tu a des questions: le forum est là pour ca

  6. #6
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 21
    Par défaut
    Merci je comprends mieux maintenant

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

Discussions similaires

  1. ouvrir fichier Excel dans page HTML : macro ne fonctionne pas
    Par bella1 dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 30/06/2011, 09h50
  2. Test d'existence de fichier
    Par Gabirups dans le forum Général Java
    Réponses: 2
    Dernier message: 26/01/2010, 18h52
  3. Test d'Existence de fichier et joker * / touch
    Par asouquieres dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 21/08/2009, 16h48
  4. Réponses: 1
    Dernier message: 03/09/2008, 13h35
  5. test d'existence de fichier
    Par hugoclo dans le forum VBA Access
    Réponses: 5
    Dernier message: 18/03/2008, 10h45

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