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 :

traitement fichier text


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 63
    Points : 31
    Points
    31
    Par défaut traitement fichier text
    Bonjour,
    Je veux traiter un fichier txt comme suite :
    le contenu du fichier :
    Citation:
    France 978EUR000000100000000000077918000001108361 0000000000000000000000001212
    French Guiana 978EUR000000100000000000077918000001108361 0000000000000000000000001212
    French Polynesia 953XPF000011933170000009298132000000009288 0000000000000000000000001212

    Ce que je veux est simple mais je bloque!!
    1) Par exemple pour: 978EUR000000100000000000077918000001108361 je dois prendre les 7 derniers chiffres 1108361 pour les diviser/10 000 pour avoir = 110.8361 et ainsi de suite..
    2) Prendre le code devise, du 4ème au 6ème caractère de la trame.
    3) Mettre tous cela dans un fichier csv

    Merci pour l'aide

  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 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Pour extraire la devise et le montant, peut-être une expression régulière du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ($devise, $montant) = ($1, $2) if $ligne =~ /\d{3}(\w{3})\d+(\d{7}) \d+/;
    Le reste est très simple, je suppose que tu n'as pas besoin d'aide pour cela.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 63
    Points : 31
    Points
    31
    Par défaut
    Merci bcp, mais le problème c'est que c'est ma premiere approche du code perl votre aide me serait précieuse...

  4. #4
    Membre éclairé Avatar de messinese
    Homme Profil pro
    IT Security Consultant
    Inscrit en
    Septembre 2007
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IT Security Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 429
    Points : 876
    Points
    876
    Par défaut
    Bonjour,

    ce que Lolo78 te donne est tout à fait fonctionnel voici donc un exemple complet qui marche:

    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
    #! /usr/bin/perl
     
    use strict;
    use 5.10.0;
    use IO::File;
    use warnings;
    use diagnostics;
     
    use constant INITIALIZE => (1);
     
    my $Compteur   = INITIALIZE;
    my $FileToRead = IO::File->new("FichierText.txt",'r') or die ("Impossible de lire le fichier : $! \n");
     
    say ("[*] Debut du traitement du fichier");
     
    while (my $lines = $FileToRead->getline()) {
        my ($devise, $montant) = ($1, $2) if $lines =~ /\d{3}(\w{3})\d+(\d{7})/;
        say ("Boucle  $Compteur -> Devise: $devise montant: $montant");
        $Compteur++;
    }
    $FileToRead->close() or warn (" Fermeture du fichier impossible : $! \n");
     
    say ("[*] Fin du traitement du fichier");
    exit(INITIALIZE);
    ceci te renvois donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [*] Debut du traitement du fichier
    Boucle  1 -> Devise: EUR montant: 1108361
    Boucle  2 -> Devise: EUR montant: 1108361
    Boucle  3 -> Devise: XPF montant: 0009288
    [*] Fin du traitement du fichier

    Si tu veux une explication sur la regexp je te conseille ceci ou encore cela c'est bien expliqué et te permettra de mieux comprendre.

    Ici en gros tu passes les 3 premiers chiffres tu récuperes et stocke les 3 lettres en majuscules tu ignores ensuite les autre nombres à l'exception des 7 derniers que tu stocke en variable enfin tu ignores ce qui se trouve derriere ( j'ai donc retire le dernier "match" \d+
    qui est ici inutile ).
    Cdlt.

  5. #5
    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 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par messinese Voir le message
    ( j'ai donc retire le dernier "match" \d+
    qui est ici inutile ).
    Cdlt.
    Effectivement, j'avais mis ce "dernier match" sans trop y réfléchir pour être sûr de ne pas taper la seconde série de chiffres, mais la présence de l'espace suffit a garantir que l'on récupère bien les bons chiffres, ce "dernier match" ne nuisait pas, mais était inutile

  6. #6
    Nouveau membre du Club
    Inscrit en
    Janvier 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 63
    Points : 31
    Points
    31
    Par défaut
    Merci beaucoup pour l'aide, effectivement le code marche bien sauf que je dois prendre les 7 derniers chiffres que je dois divise par 10000
    exp : United Kingdom 826GBP000000080576000000062782000001375574

    1375574/10000 pour avoir 137,5574 et sauvegarder le tout sur fichier


    nb: je suis un developpeur delphi je ne vous cache pas que avec perl c'est plus simple
    Merci

  7. #7
    Membre éclairé Avatar de messinese
    Homme Profil pro
    IT Security Consultant
    Inscrit en
    Septembre 2007
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IT Security Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 429
    Points : 876
    Points
    876
    Par défaut
    Re,

    et bien il ne te reste qu'a inclure ton petit calcul ou est le probleme ?

    Cdlt.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Janvier 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 63
    Points : 31
    Points
    31
    Par défaut
    a vrai dire je bloque, je suis nul

  9. #9
    Membre éclairé Avatar de messinese
    Homme Profil pro
    IT Security Consultant
    Inscrit en
    Septembre 2007
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IT Security Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 429
    Points : 876
    Points
    876
    Par défaut
    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
    #! /usr/bin/perl
     
    use strict;
    use 5.10.0;
    use IO::File;
    use warnings;
    use diagnostics;
     
    use constant INITIALIZE => (1);
     
    my $Compteur   = INITIALIZE;
    my $FileToRead = IO::File->new("FichierText.txt",'r') or die ("Impossible de lire le fichier : $! \n");
     
    say ("[*] Debut du traitement du fichier");
     
    while (my $lines = $FileToRead->getline()) {
        my ($devise, $montant) = ($1, $2) if $lines =~ /\d{3}(\w{3})\d+(\d{7})/;
        my $MontantFin = $montant/10000;
        say ("Boucle  $Compteur -> Devise: $devise montant: $MontantFin");
        $Compteur++;
    }
    $FileToRead->close() or warn (" Fermeture du fichier impossible : $! \n");
     
    say ("[*] Fin du traitement du fichier");
    exit(INITIALIZE);
    Output:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [*] Debut du traitement du fichier
    Boucle  1 -> Devise: EUR montant: 110.8361
    Boucle  2 -> Devise: EUR montant: 110.8361
    Boucle  3 -> Devise: XPF montant: 0.9288
    [*] Fin du traitement du fichier

  10. #10
    Nouveau membre du Club
    Inscrit en
    Janvier 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 63
    Points : 31
    Points
    31
    Par défaut
    merci bcp, une dernière question , je dois laisse le nom du pays et sauvegarder l'ensemble sous csv avec comme séparateur ;

    exp : United Kingdom;GBP;137,5574

    Merci

  11. #11
    Membre éclairé Avatar de messinese
    Homme Profil pro
    IT Security Consultant
    Inscrit en
    Septembre 2007
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IT Security Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 429
    Points : 876
    Points
    876
    Par défaut
    Easy :

    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
    #! /usr/bin/perl
     
    use strict;
    use 5.10.0;
    use IO::File;
    use warnings;
    use diagnostics;
     
    use constant INITIALIZE => (1);
     
    my $Compteur   = INITIALIZE;
    my $FileToRead = IO::File->new("FichierText.txt",'r') or die ("Impossible de lire le fichier : $! \n");
     
    say ("[*] Debut du traitement du fichier");
     
    while (my $lines = $FileToRead->getline()) {
        my ($devise, $montant) = ($1, $2) if $lines =~ /\d{3}(\w{3})\d+(\d{7})/;
        my $MontantFin = $montant/10000;
     
        my ($Pays)= $lines =~ /(\D+)/g;
        say ("$Pays;$devise;$MontantFin");
        $Compteur++;
    }
     
    $FileToRead->close() or warn (" Fermeture du fichier impossible : $! \n");
     
    say ("[*] Fin du traitement du fichier");
    say ("[Nombre de lignes traitees: $Compteur]");
    exit(INITIALIZE);
    te donne alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [*] Debut du traitement du fichier
    France ;EUR;110.8361
    French Guiana ;EUR;110.8361
    French Polynesia ;XPF;0.9288
    [*] Fin du traitement du fichier
    [Nombre de lignes traitees: 4]

  12. #12
    Membre éclairé Avatar de messinese
    Homme Profil pro
    IT Security Consultant
    Inscrit en
    Septembre 2007
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IT Security Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 429
    Points : 876
    Points
    876
    Par défaut
    Bonjour,

    juste une petite suggestion: penses au tag "résolu" si c'est bien le cas, merci

  13. #13
    Nouveau membre du Club
    Inscrit en
    Janvier 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 63
    Points : 31
    Points
    31
    Par défaut résolu
    Merci beaucoup pour l'aide précieuse

Discussions similaires

  1. Traitement fichier texte
    Par nicomes371 dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 08/07/2015, 09h08
  2. [Débutant] Traitement fichier texte
    Par mathphobic dans le forum MATLAB
    Réponses: 4
    Dernier message: 14/05/2014, 13h29
  3. Traitement fichier texte
    Par devoluti0n dans le forum Débuter
    Réponses: 21
    Dernier message: 29/09/2007, 13h45
  4. Traitement fichier texte
    Par spy666ne dans le forum C++
    Réponses: 1
    Dernier message: 30/03/2007, 13h05
  5. [PERL] traitement fichier texte
    Par osiris73 dans le forum Langage
    Réponses: 10
    Dernier message: 05/05/2006, 20h06

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