Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Nouveau Membre du Club
    Inscrit en
    mars 2010
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : mars 2010
    Messages : 99
    Points : 38
    Points
    38

    Par défaut éliminer un caractère

    bonsoir

    J'ai fais un script qui permet d'éliminer le caractère _

    mais le problème que malgré que j'ai fais un test pour ne pas éliminer le "_" quand dans la ligne il y a la chaine ".xml", ca ne marche pas et ca n'élimine plus les "_".

    ex du fichier à traiter:
    as_2001_000207ar.xml
    économie_politique ;sujets_anthropologiques ;rapports_de_pouvoir
    as_2001_000211ar.xml
    hégémonie_familiale ;projet_familial
    ....

    voila le code

    Code :
    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
     
     
    #!/usr/bin/perl
     
    print "bonjour\n";
    open(FIC, $ARGV[0]);
     
     
    print "choisis un nom de fichier de sortie\n";
     
    my $fic2=<STDIN>;
    open(FIC2, ">$fic2");
     
     
     
    while (<FIC>) {
    my $ligne=$_;
     
    if ($ligne=~/.xml/){
     
    print FIC2 $ligne;
     
    }
    else {
    $ligne=~s/_/ /g;
    print FIC2 $ligne;}
     
     
    }
    ca n'élimine pas les "_", je crois qu"il considère chaque deux lignes comme une seule ligne!!!

    Merci

  2. #2
    Expert Confirmé

    Inscrit en
    avril 2009
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : avril 2009
    Messages : 2 952
    Points : 3 376
    Points
    3 376

    Par défaut

    Deux petites corrections qui ne devraient pas corriger votre problème, mais qui sont à mon sens indispensables :

    =>
    Code :
    chomp(my $fic2=<STDIN>);
    et

    =>
    Concernant ton soucis, le fichier à traiter a-t-il été généré sur le même système que celui où tu lances le script (exemple : windows et windows ou linux et linux) ?

    Edit : en tout cas, chez moi, ton script fonctionne tel quel.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Using strict and warnings is good for you.

  3. #3
    Nouveau Membre du Club
    Inscrit en
    mars 2010
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : mars 2010
    Messages : 99
    Points : 38
    Points
    38

    Par défaut

    Bonjour

    C'est pas moi qui a générer ce fichier, il a peut être été générer par un système linux!! et moi je travaille avec windows

    C'est la première fois que j'ai ce genre de problème

    J'attends votre aide, merci

  4. #4
    Nouveau Membre du Club
    Inscrit en
    mars 2010
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : mars 2010
    Messages : 99
    Points : 38
    Points
    38

    Par défaut

    Pardon ce dernier fichier a été générer par windows

  5. #5
    Membre Expert

    Homme Profil pro Laurent R.
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Nom : Homme Laurent R.
    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 : 1 144
    Points : 2 293
    Points
    2 293

    Par défaut

    Bonjour,

    Essaie ceci:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    my $fichier = shift;
    chomp $fichier;
    print "bonjour\n";
    open FIC, "<", $fichier or die "Impossible d'ouvrir le fichier $fichier $! \n";
     
    print "choisis un nom de fichier de sortie\n";
     
    my $fic2=<STDIN>;
    chomp $fic2;
    open FIC2, ">", $fic2 or die "Impossible d'ouvrir le fichier $fic2 $! \n";;
     
    while (my $ligne =<FIC>) {
    	if ($ligne =~ /\.xml/) {
    		print FIC2 $ligne;
    	}
    	else {
    		$ligne=~s/_/ /g;
    		print FIC2 $ligne;
    	} 
    }
    Avec les données suivante en entrée:

    Code :
    1
    2
    3
    4
    5
    cat test_.txt
    as_2001_000207ar.xml
    économie_politique ;sujets_anthropologiques ;rapports_de_pouvoir
    as_2001_000211ar.xml
    hégémonie_familiale ;projet_familial
    j'obtiens le fichier de sortie:

    Code :
    1
    2
    3
    4
    5
    cat out.txt
    as_2001_000207ar.xml
    économie politique ;sujets anthropologiques ;rapports de pouvoir
    as_2001_000211ar.xml
    hégémonie familiale ;projet familial
    La correction la plus importante est celle-ci:

    Code :
    if ($ligne =~ /\.xml/) {
    Mes articles sur ce site: La programmation fonctionnelle en Perl - Partie 1: les opérateurs de liste et La programmation fonctionnelle en Perl - Partie 2: les fonctions d'ordre supérieur
    ______

    Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés.

  6. #6
    Nouveau Membre du Club
    Inscrit en
    mars 2010
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : mars 2010
    Messages : 99
    Points : 38
    Points
    38

    Par défaut

    Merci pour votre aide si précieuse

    j'ai reformulé mon programme
    j'ai mis le fichier dans un tableau @a

    ensuite j'ai testé au lieu de je sais pas pourquoi quand je fais le test sur \.xml ca remplace tous les "_"


    alors
    j'ai inversé le test sur le ; et ça marche

    voila ma solution
    Code :
    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
    #!/usr/bin/perl
     
    print "bonjour\n";
    open(FIC, $ARGV[0]);
     
      my @a = ();
     
     
    print "choisis un nom de fichier\n";
     
    chomp(my $fic2=<STDIN>);
    open(FIC2, ">$fic2");
     
     
     
    #---------------------------------------------------
    # initialisation des variables
    #---------------------------------------------------
     
     
     
     
     
     
    $i=0;
     
    while (<FIC>) {
    my $ligne=$_;
     
    $a[$i]=$ligne;
     
    $i++;
    }
     
    foreach my $c(@a){
     
    if ($c=~/;/){
    $c=~s/_/ /g;
    print FIC2 "$c";
    }
    else{
     
     
    print FIC2 "$c";}
     
    }
    Merci à tous

  7. #7
    Membre Expert

    Homme Profil pro Laurent R.
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Nom : Homme Laurent R.
    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 : 1 144
    Points : 2 293
    Points
    2 293

    Par défaut

    Citation Envoyé par africanwinners Voir le message

    je sais pas pourquoi quand je fais le test sur \.xml ca remplace tous les "_"
    Comme Philou et moi-même te l'avons signalé, le test correct est:

    Code :
    if ($ligne =~ /\.xml/) { # ...
    Le point ayant une signification particulière dans une regex (caractère quelconque sauf saut de ligne), il faut le précéder d'un caractère d'échappement (le "\") pour reconnaître littéralement un point.
    Mes articles sur ce site: La programmation fonctionnelle en Perl - Partie 1: les opérateurs de liste et La programmation fonctionnelle en Perl - Partie 2: les fonctions d'ordre supérieur
    ______

    Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés.

  8. #8
    Expert Confirmé

    Inscrit en
    avril 2009
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : avril 2009
    Messages : 2 952
    Points : 3 376
    Points
    3 376

    Par défaut

    Cela dit, je répète que même sans les corrections proposées, le script proposé à l'origine fonctionnait sur ma plateforme.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Using strict and warnings is good for you.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •