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 :

Suppression de caractères "pourris" en debut de chaine


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de olivier1969
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 153
    Par défaut Suppression de caractères "pourris" en debut de chaine
    Bonjour à tous ,

    Comme dit dans le titre je cherche à supprimer des caractères "pourris" situés en début de chaine de caractère , celle-ci ci doivent commencer par 2018 ;

    voici un panel de lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ÿÿÿÿMD  2018/11/06 18:07:49|MET|58|1|2018/11/06 18:31:14|1|0|25|6|0|0|#BSLIL656#DSCAN117!10!atm!1/46:8.35#00008568872009|89
    2018/11/06 18:10:14|59|1|1|2|0|25|7|0|0|||2|-1|518554|597776|2907|3007|0|00
    Í%ÿÿÿÿMD  2018/11/06 18:10:30|1|1|2|0|25|7|0|0|2018/11/07 18:32:14||2|-1|518554|597776|2907|3007|0|cf
    &ÿÿÿÿMD  2018/11/06 18:15:30|MET|58|1|1|1|0|25|6|0|0|#BSLIL656#DSCAN117!10!atm!1/46:8.35#000085688
    42018/11/06 18:24:26|MET|58|1|1|1|0|25|6|0|0|#BSLIL656#DSCAN117!10!atm!1/46:8.35#00008828
    IÿÿÿÿMD  2018/11/06 18:25:17|1|1|2|0|25|7|0|0|||2|-1|518554|597776|2907|3007|0|cf
    F2018/11/06 18:30:57|1|2|0|25|7|0|0|||2|-1|518554|597776|29|1|2|0|25|7|0|0|||2|-1|518554|597776|29
    wL^ÿÿÿÿMD  2018/11/06 18:31:14|1|2|0|25|7|0|0||2018/11/06 18:31:14|2|-1|518554|597776|29
    n2018/11/06 18:45:34|1|1|2|0|25|7|0|0|||2|-1|518554|597776|2907|3007|0|cf
    AQRH2018/11/06 19:17:23|1|2|0|25|7|0|0|||2|-1|518554|597776|297|0|0|0
    J'ai essayé plusieurs regex par substitution , mais rien ne marche ... (évidement une date peut se retrouver ailleurs dans la chaine )

    Merci pour votre aide

    A+

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 289
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F'2018' '{OFS=FS;$1="";} 1' fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's@[0-9]\{4\}/[0-9][0-9]/[0-9][0-9]@\n&@;s@.*\n@@' fichier

  3. #3
    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
    Billets dans le blog
    1
    Par défaut
    Comme c'est la rubrique Perl de ce forum, une solution en Perl:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    s/.+?2018/2018/;  # remplace tous les caractères du début de la chaîne jusqu'à 2018 (inclus) par 2018
    Exemple d'utilisation à la ligne de commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $ echo 'ÿÿÿÿMD  2018/11/06 18:07:49|MET|58|1|2018/11/06 18:31:14|1|0|25|6|0|0|#BSLIL656#DSCAN117!10!atm!1/46:8.35#00008568872009|89
    > 2018/11/06 18:10:14|59|1|1|2|0|25|7|0|0|||2|-1|518554|597776|2907|3007|0|00
    > Í%ÿÿÿÿMD  2018/11/06 18:10:30|1|1|2|0|25|7|0|0|2018/11/07 18:32:14||2|-1|518554|597776|2907|3007|0|cf
    > &ÿÿÿÿMD  2018/11/06 18:15:30|MET|58|1|1|1|0|25|6|0|0|#BSLIL656#DSCAN117!10!atm!1/46:8.35#000085688
    > 42018/11/06 18:24:26|MET|58|1|1|1|0|25|6|0|0|#BSLIL656#DSCAN117!10!atm!1/46:8.35#000088
    > ' | perl -pe 's/.+?2018/2018/;
    > '
    2018/11/06 18:07:49|MET|58|1|2018/11/06 18:31:14|1|0|25|6|0|0|#BSLIL656#DSCAN117!10!atm!1/46:8.35#00008568872009|89
    2018/11/06 18:10:14|59|1|1|2|0|25|7|0|0|||2|-1|518554|597776|2907|3007|0|00
    2018/11/06 18:10:30|1|1|2|0|25|7|0|0|2018/11/07 18:32:14||2|-1|518554|597776|2907|3007|0|cf
    2018/11/06 18:15:30|MET|58|1|1|1|0|25|6|0|0|#BSLIL656#DSCAN117!10!atm!1/46:8.35#000085688
    2018/11/06 18:24:26|MET|58|1|1|1|0|25|6|0|0|#BSLIL656#DSCAN117!10!atm!1/46:8.35#000088

  4. #4
    Membre éprouvé Avatar de olivier1969
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 153
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Comme c'est la rubrique Perl de ce forum, une solution en Perl:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    s/.+?2018/2018/;  # remplace tous les caractères du début de la chaîne jusqu'à 2018 (inclus) par 2018
    si seulement cela avait été aussi simple , une des nombreuses tentatives que j'ai testé , mais ça ne marche pas , ces p... de caractères se sont insérés à la place d'un retour chariot , c'est certainement un pb d'encodage caractère mais rien n'y fait.

    A force de tourner en rond , j'ai fait un split /2018/ de la chaine de caractère , et chose bizarre , quand je veux afficher la première valeur de la table c'est vide ???

    Mais au moins en faisant comme ça je peux récupérer ce dont j'ai besoin

    Ceci dit , si quelqu'un a une autre solution ou explication , je suis preneur ...

  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
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    la solution idéale serait certainement de résoudre le problème d'encodage. Mais là, impossible de t'aider, tu ne donnes pas assez d'informations sur tes données en entrée.

    Si supprimer les caractères précédant la chaîne 2018 ne fonctionne pas dans tous les cas, tu peux choisir une stratégie inverse: ne garder que les caractères suivant la chaîne 2018 (et n'imprimer le résultat que si la chaîne 2018 a été trouvée). Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $ echo 'ÿÿÿÿMD  2018/11/06 18:07:49|MET|58|1|2018/11/06 18:31:14|1|0|25|6|0|0|#BSLIL656#DSCAN117!10!atm!1/46:8.35#00008
    568872009|89
    > 2018/11/06 18:10:14|59|1|1|2|0|25|7|0|0|||2|-1|518554|597776|2907|3007|0|00
    > Í%ÿÿÿÿMD  2018/11/06 18:10:30|1|1|2|0|25|7|0|0|2018/11/07 18:32:14||2|-1|518554|597776|2907|3007|0|cf
    > &ÿÿÿÿMD  2018/11/06 18:15:30|MET|58|1|1|1|0|25|6|0|0|#BSLIL656#DSCAN117!10!atm!1/46:8.35#000085688
    > 42018/11/06 18:24:26|MET|58|1|1|1|0|25|6|0|0|#BSLIL656#DSCAN117!10!atm!1/46:8.35#000088
    > '  |  perl -ne 'print "$1\n" if /(2018.+$)/;
    > '
    2018/11/06 18:07:49|MET|58|1|2018/11/06 18:31:14|1|0|25|6|0|0|#BSLIL656#DSCAN117!10!atm!1/46:8.35#00008568872009|89
    2018/11/06 18:10:14|59|1|1|2|0|25|7|0|0|||2|-1|518554|597776|2907|3007|0|00
    2018/11/06 18:10:30|1|1|2|0|25|7|0|0|2018/11/07 18:32:14||2|-1|518554|597776|2907|3007|0|cf
    2018/11/06 18:15:30|MET|58|1|1|1|0|25|6|0|0|#BSLIL656#DSCAN117!10!atm!1/46:8.35#000085688
    2018/11/06 18:24:26|MET|58|1|1|1|0|25|6|0|0|#BSLIL656#DSCAN117!10!atm!1/46:8.35#000088

  6. #6
    Membre éprouvé Avatar de olivier1969
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 153
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Bonjour,

    la solution idéale serait certainement de résoudre le problème d'encodage. Mais là, impossible de t'aider, tu ne donnes pas assez d'informations sur tes données en entrée.
    Malheureusement , comme les fichiers sont reçus par CFT , je ne sais pas quel est le type d'encodage !!

    Citation Envoyé par Lolo78 Voir le message
    > ' | perl -ne 'print "$1\n" if /(2018.+$)/;
    > '
    Déjà essayé aussi , mais ça ne vire pas les caractères ....

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

Discussions similaires

  1. [PL/SQL] Chaine de caractères avec une quote
    Par Titouf dans le forum Oracle
    Réponses: 2
    Dernier message: 15/05/2006, 14h36

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