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 :

Remplacement dans un fichier plat


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 166
    Points : 39
    Points
    39
    Par défaut Remplacement dans un fichier plat
    Bonjour,

    Pour remplacer une chaîne de caractère dans un fichier plat (position 15-17)
    J’ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    perl -pe ' substr($_,15,3) =~ tr/[a-z]/000/'  kal >kal1;

    Voila un extrait de mon fichier kal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    ezr    zer   f	ezf       fzefazfe       feazf
    dzd    fFe  z         aza       effzffff        fezef
    qAf    vaa  d        vqv       ccvvvbbb     gvavv
    quelqu'un à une idée !!!!!!!!!!

    Merci d'avance

  2. #2
    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 melmouj
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -pe ' substr($_,15,3) =~ tr/[a-z]/000/'  kal >kal1;
    Bon y a des fautes dans cet uniligne, mais je suppose que tu t'en doutais puisque tu nous demande de l'aide...

    Si le fichier est "plat", j'imagine que tu ne veut surtout pas qu'il soit découpé en lignes, donc on utilise '-0', par ailleurs ta syntaxe est légèrement fausse et je suis obligé de supposer que tu veux remplacer les caractères alphabétiques dans l'intervalle 15-17 en 0 (mais pas les autres caractères ??). Voici ce que ça donnerait si mes suppositions était correctes (sinon faut être plus clair) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -p0e '$s = substr($_, 15, 3); $s =~ tr/a-z/0/; substr($_, 15, 3, $s)' kal >kal1
    Il est possible que ce code fonctionne, mais je n'ai pas de Perl sous la main pour tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -p0e 'substr($_, 15, 3) =~ tr/a-z/0/' kal >kal1
    En tout cas le premier code devrait fonctionner.
    EDIT : Le second code ne fonctionne pas... dommage !

    --
    Jedaï

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 166
    Points : 39
    Points
    39
    Par défaut Remplacement dans un fichier plat
    Merci pour ta réponse
    par contre ça ne remplace que dans la première ligne, et le reste

    il faut qu'il me remplace dans toute les ligne la chaine de caractère qui commence de la postion 15 à 17.

  4. #4
    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 melmouj
    Merci pour ta réponse
    par contre ça ne remplace que dans la première ligne, et le reste

    il faut qu'il me remplace dans toute les ligne la chaine de caractère qui commence de la postion 15 à 17.
    Un peu plus de clarté aurait aidé... Et jeter un coup d'oeil au switch -0 aurait pu te permettre de répondre tout seul à ta question.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -pe '$s = substr($_, 15, 3); $s =~ tr/a-z/0/; substr($_, 15, 3, $s)' kal >kal1
    --
    Jedaï

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Points : 208
    Points
    208
    Par défaut
    Salut,
    Citation Envoyé par melmouj
    Merci pour ta réponse
    par contre ça ne remplace que dans la première ligne, et le reste

    il faut qu'il me remplace dans toute les ligne la chaine de caractère qui commence de la postion 15 à 17.
    Tu veux remplacer n'importe quel caractère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -ne 's/^(.{15}).{3}/${1}000/;print' kal > kal3
    ou seulement les alphanumériques de a à z ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -ne 's/^(.{15})[a-z]{3}/${1}000/;print' kal > kal2

  6. #6
    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 lami20j
    Salut,Tu veux remplacer n'importe quel caractère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -ne 's/^(.{15}).{3}/${1}000/;print' kal > kal3
    ou seulement les alphanumériques de a à z ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -ne 's/^(.{15})[a-z]{3}/${1}000/;print' kal > kal2
    Pourquoi utiliser -ne "... print" au lieu de -pe ?
    Le deuxième code ne fonctionne pas exactement comme tu sembles l'indiquer, ceci serait plus proche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -pe 's/^(.{15})(.{3})/${1}.$2 =~ tr<a-z><0>/e' kal > kal2
    [/QUOTE]

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Points : 208
    Points
    208
    Par défaut
    Citation Envoyé par Jedai
    Pourquoi utiliser -ne "... print" au lieu de -pe ?
    Le deuxième code ne fonctionne pas exactement comme tu sembles l'indiquer, ceci serait plus proche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -pe 's/^(.{15})(.{3})/${1}.$2 =~ tr<a-z><0>/e' kal > kal2
    C'est juste une habitude d'utiliser n au lieu de p, vu que j'affiche sur STDOUT le résultat. (perl -n ou perl -p)

    Le 2ème code fonctionne comme j'ai pensé. Le problème est que j'ai mal pensé

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/06/2009, 17h49
  2. [FileWriter] insertion des résultats null dans le fichier plat
    Par Pakkaï dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 28/08/2006, 11h06
  3. remplacement dans un fichier texte
    Par ciberju dans le forum C
    Réponses: 5
    Dernier message: 25/08/2006, 09h36
  4. Afficher, rechercher et remplacer dans un fichier
    Par lynal dans le forum Langage
    Réponses: 1
    Dernier message: 13/06/2006, 21h24
  5. Remplacement dans un fichier .txt
    Par sebtoto62 dans le forum Langage
    Réponses: 4
    Dernier message: 28/07/2005, 13h15

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