Perl, un truc tout bidon

tout_fou Messages postés 96 Statut Membre -  
tout_fou Messages postés 96 Statut Membre -
Salut a tous,

je viens juste de me mettre au PERL.

Je souhaiterai savoir si il est possible de faire :

- ouverture d'un fichier .txt
- ecrire le mot "babar" au debut du fichier( tout en concervant le contenu initiale)
- sauvegarder et fermer le fichier.

Puis-je avoir un exemple de votre pars ?

Merci

Seb
Configuration: Windows 2000
Firefox 2.0

5 réponses

  1. oliver91 Messages postés 52 Statut Membre 3
     
    La syntaxe pour ouvrir un fichier est la suivante :

    open(FILEHANDLER,"nom_de_la_ressource");
    Ce qui donnera par exemple : open(FILE,">toto.txt");
    Lorsque le nom du fichier n'est précédé d'aucun signe particulier il s'agit d'une ouverture en lecture seule.
    Lorsque le nom du fichier est précédé du signe supérieur > il s'agit d'une création de fichier.
    Lorsque le nom du fichier est précédé du double signe supérieur >> il s'agit d'une ouverture en écriture.

    La fonction open() retourne une valeur indiquant la réussite (true) ou l'échec (false) de l'ouverture du fichier.

    La fonction close() admet comme unique argument le descripteur de fichier :

    close(FILEHANDLER);
    0
  2. tout_fou Messages postés 96 Statut Membre 1
     
    Merci olivier,

    Comment fait on pour inserer un mot en debut de fichier (tout en gardant le reste du texte) ?

    Merci encore

    Seb
    0
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    voilà quelques possibilités
    $ cat fichier.txt
    ligne1
    ligne2
    $ perl -pi -e 's/^/barbar1\n/ if $.==1' fichier.txt
    $ cat fichier.txt
    barbar1
    ligne1
    ligne2
    $ perl -pi -e 's/^/barbar11\n/ if 1..1' fichier.txt
    lami20j@debian:~/trash$ cat fichier.txt
    barbar11
    barbar1
    ligne1
    ligne2
    $ perl -pi -e 'next unless $.==1;s/^/barbar111\n/' fichier.txt
    $ cat fichier.txt
    barbar111
    barbar11
    barbar1
    ligne1
    ligne2
    
    0
    1. tout_fou Messages postés 96 Statut Membre 1
       
      Salut l'amis,

      merci de ton aide, mais j'ai oublié de preciser que je voulais créer un fichier executable (babar.pl).

      open(TOTO,>"doc.txt") ;

      ecrire "babar" en debut de fichier
      ...


      close(TOTO);
      0
  4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    d'accord

    Dans ton exemple tu utilises le mode d'ouverture ">" qui correspond à "w" qui veut dire écrire

    Quoi que tu fasses dans ton script le contenu de fichier sera écraser, donc ce n'est pas bon.

    Il y a plusieurs possibilités

    1. tu ouvres en mode ajout (append) ">>"
    tu renverse le fichier
    tu écrit la ligne
    et tu renverse à nouveau le fichier
    Pour des grands fichiers ce n'est pas outils

    2. tu écris ta ligne dans un fichier temporaire
    tu ajoute le contenu du fichier
    tu écrase le contenu de fichier existant en le remplacant avec le contenu de fichier temporaire
    tu supprime le fichier temporaire

    3. tu utilise au début de script

    #!/usr/bin/perl -pi.orig
    et tu utilises une de mes commandes, bien sûr adapter à la situation

    Je n'ai pas énumeré toute les possibilités, je suis au boulot et je n'ai pas le temps.
    En revanche ce soir je vais te donner quelques exemples.

    je viens juste de me mettre au PERL.

    Alors ne soit pas si impatient :-)) quoi que pour un Perlien c'est une vertue :-)
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. tout_fou Messages postés 96 Statut Membre 1
     
    Salut,

    en effet j'ai utiliser la methode avec un fichier temporaire et sa fonctionne niquel.

    Je ne suis pas impatient, mais j'ai chercher sur internet sans jamais trouver une fonction qui permet d'ecrire en haut d'un fichier.
    J'ai d'ailleurs appris que ca ne pouvait pas se faire, et ce dans la pluspart des languages... ( pas directement en tout cas ).

    Maintenant, j'attaque l'autre parti de mon programme qui est de lister un répertoire et de recuperer le nom de tous les fichiers de ce dernier.

    Est ce que ce bout de code n'est pas censer m'afficher la liste de tous les fichier du repertoire d:\perl:\bin ?

    $chemin="D:\Perl\bin";
    opendir(REP,$chemin);
    @fichiers=readdir(REP);
    closedir(REP);

    foreach $fichier (@fichiers)
    {
    print "$fichier";
    }

    Merci de ton aide, je continu a chercher pourquoi cela ne focntionne pas.*

    Seb
    0