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 :

Substitution de caractères spéciaux


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 37
    Points : 12
    Points
    12
    Par défaut Substitution de caractères spéciaux
    Bonjour à tous ,

    Grâce à l'aide des participants du forum (merci Djibril ), j'ai déjà bien avancé dans mon petit programme en perl. Cependant, je bute en se moment sur un problème de remplacement de caractère spéciaux. Je cherche en effet à éliminer une série de "$" de "µ" se trouvant tout au long de mon fichier. Le petit bout de code qui suit fonctionne pour les remplacement de tabulation en "#", mais pas pour les deux autres exemples ci-dessus.

    J'ai essayé de remplacer ceux-ci par leur code ascii (décimal et hexa)... sans plus de chance ! S'il vous plaît, est-ce que quelqu'un aurait un conseil pour régler ce problème ? Voici le code (qui "fonctionne", si je peux dire) :

    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
    #############
    ### DEBUT ###
    #############
     
    #!/usr/local/bin/perl
    use POSIX;
    use CGI qw/:all /;
    $q3 = new CGI ;
     
     
    open (FICH, 'test.txt') || die ("pas de fichier 1\n"); # fichier à traiter
    open (FICH2, '>', 'sortie.txt') || die ("pas de fichier 2\n"); # fichier de sortie 
     
    #################
    ### NETTOYAGE ###
    #################
     
    while ($ligne = <FICH>)
    {
    	$ligne =~ s/µ//g;
    	$ligne =~ s/$//g;
    	$ligne =~ s/	/#/g;
     
    	print $ligne;
    	print FICH2 $ligne;
    }
    Etant un peu à court d'idées , je remercie vivement d'avance tous ceux qui pourront m'apporter une aide quelconque .
    Très cordialement.

  2. #2
    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
    1. Tu as un petit problème de syntaxe avec tes substitutions: tu dois "échapper" $ (et mieux vaut matcher une tabulation avec \t).
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      while (<>) {
        s/µ//g; s/\$//g; s/\t//g;
        print;
      }
    2. Quel est l'encodage de ton fichier ? C'est probablement là que ça coince avec le µ. En supposant un fichier utf8, ouvre-le comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    use encoding 'utf8'; 
    open my $file, '<:utf8', 'myfile.txt';

  3. #3
    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
    Je te conseille d'écrire ton script en utf8 (mets "use utf8;" au début du script et n'oublie pas de bien configurer ton éditeur) et de spécifier l'encodage lorsque tu ouvres ton fichier (Perl supporte une foultitude d'encodage, il est pratiquement impossible que tu ne trouves pas ton bonheur), ainsi les regexps fonctionneront de façon transparente.

    --
    Jedaï

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 37
    Points : 12
    Points
    12
    Par défaut
    Merci beaucoup Iblis et Jedai.
    Déjà, le problème pour le $ semble réglé avec le code suivant :

    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
     
    #############
    ### DEBUT ###
    #############
     
    #!/usr/local/bin/perl
    use POSIX;
    use CGI qw/:all /;
    use encoding 'utf8'; 
    $q3 = new CGI ;
     
     
    open (FICH, '<:utf8', 'test.txt') || die ("pas de fichier 1\n"); # fichier à traiter
    #open (FICH, 'test.txt') || die ("pas de fichier 1\n"); # fichier à traiter
    open (FICH2, '>', 'sortie.txt') || die ("pas de fichier 2\n"); # fichier de sortie 
     
    #################
    ### NETTOYAGE ###
    #################
     
    while ($ligne = <FICH>)
    {
    	$ligne =~ s/µ//g;
    	$ligne =~ s/\$//g;
    	$ligne =~ s/\t/#/g;	
    	$ligne =~ s/’/'/g;	
    	print $ligne;
    	print FICH2 $ligne;
    }
    Cependant, ça ne fonctionne pas pour remplacer les " µ ", ni les " ’ "...
    Le fichier original est encodé en "Windows Ansi" (après vérification cet encodage fonctionne avec le reste du programme). S'il vous plaît, cela peut-il venir de ça ?
    Le logiciel ne propose pas l'encode en utf8, mais en utf16 ou en ascii, qui posent d'autres problèmes (les "é", "è", "ê" ou encore d'autres caractères).

    En vous remerciant vivement d'avance pour toute aide.

  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
    Citation Envoyé par Sancti_Eyes Voir le message
    Cependant, ça ne fonctionne pas pour remplacer les " µ ", ni les " ’ "...
    Le fichier original est encodé en "Windows Ansi" (après vérification cet encodage fonctionne avec le reste du programme). S'il vous plaît, cela peut-il venir de ça ?
    Tout à fait, Windows ANSI (qui désigne usuellement la codepage 1252 dans nos régions) diffère d'Unicode (donc d'utf8) sur plusieurs caractères, il te suffit donc d'ouvrir le fichier avec le bon encodage, Perl se chargera de la suite (inutile de modifier ton code ou son encodage) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    open my($fich), '<:encoding(cp1252)', 'test.txt'
      or die "Ne peut ouvrir test.txt : $!\n";
    Citation Envoyé par Sancti_Eyes Voir le message
    Le logiciel ne propose pas l'encode en utf8, mais en utf16 ou en ascii, qui posent d'autres problèmes (les "é", "è", "ê" ou encore d'autres caractères).
    De quel logiciel parles-tu ? Ton éditeur de texte ? Dans ce cas je te conseille fortement d'en changer (un éditeur qui ne supporte pas utf8 aujourd'hui ne vaut pas le coup).

    --
    Jedaï

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 37
    Points : 12
    Points
    12
    Par défaut
    Merci à tous, merci Jedai. Ca fonctionne désormais, avec ce 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
    #############
    ### DEBUT ###
    #############
     
    #!/usr/local/bin/perl
    use POSIX;
    use CGI qw/:all /;
    use encoding 'utf8';
     
    open (FICH, '<:encoding(cp1252)', 'test.txt') || die ("pas de fichier 1\n"); # fichier à traiter
    open (FICH2, '>:encoding(utf8)', 'sortie.txt') || die ("pas de fichier 2\n"); # fichier de sortie 
     
    #################
    ### NETTOYAGE ###
    #################
     
    			print "Module de nettoyage : ";
    			print "\n";
    			print "\n";
    			system("pause");			
     
     
    while ($ligne = <FICH>)
    {
    	$ligne =~ s/µ//g;
    	$ligne =~ s/\$//g;
    	$ligne =~ s/\t/#/g;	
    	print $ligne;
    	print FICH2 $ligne;
    }
    En fait c'est un fichier (celui de départ) produit à l'export à partir du logiciel de gestion de base de données FileMaker. Le but est de convertir ces exports pour qu'ils soient utilisables avec un autre logiciel. Ce morceau terminé, tout cela semble fonctionner.

    Merci encore à tous pour votre aide .

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/07/2012, 09h58
  2. Où trouver la liste des caractères spéciaux?
    Par gamez dans le forum Langage
    Réponses: 3
    Dernier message: 19/08/2003, 17h54
  3. Transformation XSL et caractères spéciaux
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 4
    Dernier message: 28/04/2003, 10h38
  4. [Sybase] filtre sur caractères spéciaux
    Par montelieri dans le forum Sybase
    Réponses: 4
    Dernier message: 07/04/2003, 16h49
  5. Traiter les caractères spéciaux
    Par ricola dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2003, 09h23

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