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 :

window vs linux vs ....


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 46
    Points : 49
    Points
    49
    Par défaut window vs linux vs ....
    Bonjour à tous

    Voilà un code qui ne fonctionne pas comme je voudrais sous linux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    open (F , "+>>mon_fichier");
    foreach (<F>) {
      print "$_\n";
    }
    En fait il ne me sort rien. Cela marche si je rajoute un La documentation dit que la commande open avec +>>, se place différement en lecture suivant les systèmes.
    Citation de perlfunc :
    "Due to the rules and rigors of ANSI C, on some systems you have to do a seek whenever you switch between reading and writing."

    Donc ma question est comment cela fonctionne sur votre système windows ou autre ? Avez-vous besoin du seek, ou alors la lecture se fait au début du fichier ?

    Merci

  2. #2
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 866
    Points : 4 866
    Points
    4 866
    Par défaut
    Salut

    En fait, Jedai m'a passé un jour un chouette conseil que je te transmet (en fait c'est tiré du livre Perl Cookbook aux éditions O Reilly). Pour écrire au début du fichier, il faut se mettre ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #!/usr/bin/perl -w
     
    use strict;
     
    open FILE,"+< toto.txt" or die "$!\n";
    seek(FILE, 0, 0);
    print FILE "tata\n";
    close FILE;
    En espérant t'avoir aidé.

    @++

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 46
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par GLDavid
    Salut

    En fait, Jedai m'a passé un jour un chouette conseil que je te transmet (en fait c'est tiré du livre Perl Cookbook aux éditions O Reilly). Pour écrire au début du fichier, il faut se mettre ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #!/usr/bin/perl -w
     
    use strict;
     
    open FILE,"+< toto.txt" or die "$!\n";
    seek(FILE, 0, 0);
    print FILE "tata\n";
    close FILE;
    En espérant t'avoir aidé.

    @++
    Merci de ta réponse, mais je n'ai pas du bien m'exprimer dans mon post. En fait ce que tu me proposes, c est ce que je fais mais les pages du man de perlfunc supposent que le seek(FILE,0,0) n'est pas obligatoire suivant les systèmes sous lesquels tu fais tourner ton perl. Donc ma question était sous un autre système que le mien (Linux) peut-on faire tourner mon code sans seek(FILE,0,0) ?

  4. #4
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par strach
    En fait ce que tu me proposes, c est ce que je fais mais les pages du man de perlfunc supposent que le seek(FILE,0,0) n'est pas obligatoire suivant les systèmes sous lesquels tu fais tourner ton perl. Donc ma question était sous un autre système que le mien (Linux) peut-on faire tourner mon code sans seek(FILE,0,0) ?
    # mode Jésuite
    # Je réponds à une question par une autre question ...

    Si ton code fonctionne sur TOUS systèmes avec le seek, mais sur certains seulement quand on retire le seek, pourquoi veux tu le retirer ?

    Le conserver augmentera la portabilité de ton script, et le surcoût n'est pas énorme.

  5. #5
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Sans doute, mais se priver d'une compatibilité intersystème pour une misérable ligne de rien du tout... Je ne vois pas bien l'intérêt !

    (Edit : oups, 2Eurocents a déjà frappé !)
    --
    Jedaï

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 46
    Points : 49
    Points
    49
    Par défaut
    Ok, ok, oublions ça, c'était juste par pure soif de compréhensions

    On ne m'y reprendra pas !

    A+

  7. #7
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 866
    Points : 4 866
    Points
    4 866
    Par défaut
    Un petit tag Résolu au passage s'il te plait.

    Merci !

    @++

  8. #8
    Membre actif
    Inscrit en
    Février 2005
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 167
    Points : 203
    Points
    203
    Par défaut Re: window vs linux vs ....
    Citation Envoyé par strach
    Bonjour à tous

    Voilà un code qui ne fonctionne pas comme je voudrais sous linux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    open (F , "+>>mon_fichier");
    foreach (<F>) {
      print "$_\n";
    }
    En fait il ne me sort rien. Cela marche si je rajoute un
    Tu veux faire quoi au juste ? Tu es sûr de forcément écrire quelque chose dedans, une fois que tu as parcouru le contenu ? J'ai tendance à me méfier de ces variantes bizarres d'open... je ne peux jamais me souvenir de qui fait quoi.

    Le plus simple est de faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open F, '<', 'fic.txt' or die $!
    pour tout imprimer. (A noter la forme open à trois arguments, c'est plus sûr). Ensuite faire un close, et une réouverture en append, si c'est nécessaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open F, '>>', 'fic.txt' or die $!
    Je trouve que c'est beaucoup plus clair, il est evident dès l'ouverture ce que tu attends d'un fichier. Si tu veux lire et écrire en même temps dans un fichier, c'est quasiment toujours le signe d'un bug. Ce qu'il te faut en ces cas, c'est une base de données.

    N

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 46
    Points : 49
    Points
    49
    Par défaut Re: window vs linux vs ....
    Citation Envoyé par nematoad

    Tu veux faire quoi au juste ?
    Je veux lire un fichier, puis tester si un mot existe dedans, et si il n'existe pas le mettre dans le fichier à la fin.

    Citation Envoyé par nematoad
    Tu es sûr de forcément écrire quelque chose dedans, une fois que tu as parcouru le contenu ? J'ai tendance à me méfier de ces variantes bizarres d'open... je ne peux jamais me souvenir de qui fait quoi.
    C'est étrange que tu parles de variantes bizzares de open, le + sert à écrire et lire en même temps, c'est, à mon avis, le pendant de la fonction open sous C !

    Citation Envoyé par nematoad
    Le plus simple est de faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open F, '<', 'fic.txt' or die $!
    pour tout imprimer. (A noter la forme open à trois arguments, c'est plus sûr). Ensuite faire un close, et une réouverture en append, si c'est nécessaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open F, '>>', 'fic.txt' or die $!
    Je trouve que c'est beaucoup plus clair, il est evident dès l'ouverture ce que tu attends d'un fichier. Si tu veux lire et écrire en même temps dans un fichier, c'est quasiment toujours le signe d'un bug. Ce qu'il te faut en ces cas, c'est une base de données.

    N
    La base de données est un outils beaucoup trop volumineux pour ce que je veux. En fait l'ouverture d'un fichier en écriture/lecture fonctionne parfaitement, mais pas de la même manière suivant le système sous lequel on execute le code. Je voulais tout simplement demander de tester le bout de code sur différents systèmes !

    Mais comme on me l'a délicatement fait remarquer, si ça marche avec un seek(), cherche pas et en plus c'est portable.

    Merci de ta réponse.
    A+

  10. #10
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Le mode lecture-écriture dans ton cas est effectivement parfaitement superflu, et l'utilisation de la solution proposée par Nematoad t'évite tous ces petits problème. Mais la lecture-écriture n'est pas une variante bizarre de open, elle est très utile dans un certain nombre de cas particuliers où l'on veut manipuler des fichiers binaires volumineux, qui ne sont pas forcément des bases de données ! De plus les variantes sont relativement simple à comprendre : '+<' ouvre en rw au début du fichier, '+>>' ouvre en ajout, à une position inconsistante selon les systèmes semble-t-il, mais ce mode crée le fichier s'il n'existe pas, '+>' est le plus étrange puisqu'il efface le fichier puis l'ouvre (ou le crée) en rw...

    Ok, ok, oublions ça, c'était juste par pure soif de compréhensions
    C'est bien d'être curieux, mais c'est précisément le type de détail qui ne sert à rien et qui peut même être dangereux si on se laisse aller à la paresse sur un système dont on sait qu'il ne va pas nous pénaliser...

    --
    Jedaï

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

Discussions similaires

  1. Un langage compatible Windows et Linux
    Par Furius dans le forum Langages de programmation
    Réponses: 9
    Dernier message: 10/10/2005, 17h57
  2. Export Windows / Import Linux
    Par Doze dans le forum Oracle
    Réponses: 16
    Dernier message: 18/04/2005, 13h54
  3. Réponses: 1
    Dernier message: 01/02/2005, 12h56
  4. Les interruptions sous Windows et Linux
    Par Descartes dans le forum x86 32-bits / 64-bits
    Réponses: 7
    Dernier message: 07/06/2003, 22h42
  5. OmniORB : code sous Windows et Linux
    Par debug dans le forum CORBA
    Réponses: 2
    Dernier message: 30/04/2002, 17h45

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