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 :

Problème d'affichage arabe


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 128
    Points : 43
    Points
    43
    Par défaut Problème d'affichage arabe
    Bonjour ,
    j'ai fait un script perl qui me permet d'associer a chaque mot d'une phrase un etiquette , voici mon code :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
     
    #! /usr/bin/perl
    #use strict;
    #use warnings;
    use XML::Simple;
    use Encode;
    use autodie;
    use feature 'unicode_strings';
     
    # en entrée, une reference sur un hash %syn et le nom du fichier xml
    # en sortie %syn est rempli avec comme clés et les étiquettes comme valeurs.
    sub parseBase ($$) {
      use XML::Simple;
      my $href = shift;
      my $data = XMLin(shift);
      foreach(@{$data->{mot}}) {
        $href->{$_->{'synonyme'}} = $_->{'etiquette'};
      }
    }
     
    my %syn;
    parseBase(\%syn, 'BaseEtiquettes.xml');
     
     
    open my $fh,  "<:utf8", 'in.txt';
    open my $fh1, ">:utf8", 'resultat.txt';
     
    my $linenum = 0;
     
     
    foreach(<$fh> ) {
     
      # Si BOM initiale
     
     
      unless ($linenum++ and /^\x{feff}/) {
        s/^\x{feff}// ;
        print $fh1 "\x{feff}"; 
      }
      my @words = split /\b/;
      foreach (@words) {
        print $fh1 $_; 
     
        # si le mot figure dans la liste des synonymes
        if ($syn{$_}) {
     
         print $fh1  " <$syn{$_}> ";
     
        }
      }
     
     
    }
     
    close $fh1;
    close $fh;
    Le problème c'est que l'affichage en sortie est inversé, le résultat est :
    أَيْ <Confirmation> تْفَضَّلْ <Politesse> خُويَا <Appelation>

    Alors ce que je veux obtenir est :

    <Appelation> خُويَا <Politesse> تْفَضَّلْ<Confirmation> أَيْ

    Alors c'est quoi le problème !!!!!!!
    Merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Je n'y connais rien à l'utilisation d'arabe en Perl, il semble que tu écrives tes mots de droite à gauche, sans doute parce que c'est de l'arabe.

    Peut-être que la fonction reverse peut remettre ta ligne dans l'ordre que tu souhaites.

  3. #3
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Exact Lolo78 !

    [ Edit:16-05:28 : MERCI POUR LE DEPLACEMENT ]
    AU MODERATEUR : il y a 2 entrées Langages Perl :
    - la première
    - la deuxième

    Donc rimenis, désolé je vois ta question avec retard.

    Ceci dit depuis le temps...
    tu as un fichier qui contient des mots arabes, l'informatique ayant été créée par des occidentaux pour des occidentaux, lorsque tu lis les mots, ils sont présentés de gauche à droite...

    Donc tu mets la phrase, en la découpant, dans un tableau @t

    - soit tu parcours ce tableau à l'orientale de N vers 0
    $#t étant l'indice du dernier élément ou plus lisible :
    le dernier élément est $t[-1]
    l'avant dernier $t[-2]
    ...

    - soit tu fais un reverse du tableau et tu le parcours à l'occidentale de 0 vers N :
    @s contient les mots de @t dans l'ordre inverse

    Bon courage !

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/04/2013, 11h45
  2. [Geoserver] Problème d'affichage des labels en arabe
    Par chouf2 dans le forum SIG : Système d'information Géographique
    Réponses: 0
    Dernier message: 06/09/2010, 16h59
  3. [MySQL] Problème affichage arabe
    Par soulflow dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/08/2010, 17h40
  4. problème d'affichage des données en arabe
    Par ikramta dans le forum Balisage (X)HTML et validation W3C
    Réponses: 14
    Dernier message: 26/03/2009, 13h33
  5. [XSL-FO][FOP] problème d'affichage des caractère arabe
    Par MedNaceur dans le forum XSL/XSLT/XPATH
    Réponses: 19
    Dernier message: 27/11/2008, 17h43

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