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

Modules Perl Discussion :

Lire et écrie l'entrée et la sortie standards avec Text::BibTeX


Sujet :

Modules Perl

  1. #1
    Membre confirmé Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut Lire et écrie l'entrée et la sortie standards avec Text::BibTeX
    Bonjour.

    J'ai écris un script très simple (mon deuxième en Perl) qui convertit les mots-clés séparés par des virgules dans un fichier BibTeX en tags, c'est à dire en une suite de mots-clés sans espaces et séparés par des espaces (pour upload sur citeulike.org, bibsonomy.org et autres sites de gestion et de partage de bibliographies en ligne).

    Il marche très bien ; le voici :
    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
    20
    21
    22
    23
    24
    25
    26
    27
     
    #!/usr/bin/perl
     
    use encoding "utf8";
    use warnings;
    use strict;
    use Text::BibTeX;
     
    my $oldfile = shift;
    open BIBFILE1, '<:utf8', $oldfile or die "Problem opening $oldfile\n";
    my $newfile = shift;
    open BIBFILE2, '>:utf8', $newfile or die "Problem opening $newfile\n";
     
     
    while (my  $entry = new Text::BibTeX::Entry $oldfile, \*BIBFILE1)
    {
        next if !$entry->parse_ok;
        my $keywords = $entry->get ('keywords');
        next if !defined($keywords);
     
        my @list = split (",", $keywords);
        foreach (@list) {s/^ //g; s/ $//g; s/ /_/g};
        my $tags = join(' ', @list);
     
        $entry->set ('keywords', $tags);
        $entry->print  (\*BIBFILE2);
    }
    Mais je ne sais pas comment m'y prendre pour lire et écrie les données sur l'entrée et la sortie standards plutôt que depuis et vers un fichier. Quelqu'un pourrait-il m'aider ? Merci par avance.

    Note : la méthode new de BibTeX (il y a aussi une method open, mais je ne l'ai pas utilisé pour pouvoir spécifier l'ouverture en utf-8) est une interface vers le open de IO::File et donc vers le open intégré à Perl.

    ------
    Tête de fou ne blanchit jamais (proverbe bourguignon)

  2. #2
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Bonjour,

    Et bien, la sortie standard, c'est le handle STDOUT, et l'entrée standard, le handle STDIN. Ils sont ouverts automatiquement en début de script.

    Et au pire, tu peux aussi utiliser print et l'opérateur <> pour lire et écrire sur la sortie standard, et ensuite leur appliquer un traitement particulier pour le mettre dans la forme de ton choix

  3. #3
    Membre confirmé Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut
    Merci bien pour votre réponse.

    Mais comment passer le handle STDIN à la méthode new de Text::BibTex dans mon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     while (my  $entry = new Text::BibTeX::Entry $oldfile, \*BIBFILE1)
    .

    C'est sûrement très simple, mais je ne vois pas : tout mes essais par tâtonnements ont été infructueux. Auriez-vous une indication supplémentaire sous la main ?

    Bien sûr, je pourrais réécrire un fonction pour parser le BibTeX mais je me dis pourquoi réinventer le fil à couper le beurre alors qu'il y a déjà un module pour cela. En fait mon premier essai faisait comme cela : lire l'entrée standard avec un while <> et parser les balises keywords = {} ; le problème est de gérer les nombreuses exceptions pour les fichiers BibTeX bien et moins bien formés.

Discussions similaires

  1. Rediriger les entrée et sortie standard
    Par latitude38 dans le forum Code::Blocks
    Réponses: 1
    Dernier message: 05/11/2014, 11h11
  2. [Net-SNMP] Utiliser la sortie standard avec snmptrapd
    Par zodd dans le forum Applications
    Réponses: 0
    Dernier message: 08/10/2013, 14h40
  3. Comment rediriger l'entrée ou la sortie standard ?
    Par xavier2a dans le forum Langage
    Réponses: 3
    Dernier message: 06/03/2010, 12h35
  4. Ecrire sur la sortie standard avec write
    Par overlolo dans le forum Débuter
    Réponses: 8
    Dernier message: 13/04/2009, 00h07
  5. PB sortie standard avec les PTHREAD !!!
    Par djspit dans le forum C++
    Réponses: 15
    Dernier message: 19/11/2004, 01h17

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