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 :

je ne conais rien en perl-> besoin d'aide!!


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 48
    Points : 18
    Points
    18
    Par défaut je ne conais rien en perl-> besoin d'aide!!
    bonjours voila j'ai un certain nombre de fichiers et j'aimerai pouvoir faire 3 choses:

    -supprimer toutes les lignes jusqu'a un certain motif et ce dans tout mes fichiers(disant 'toto')
    -supprimer toutes les lignes a partir d'un certain motif(disant le meme^)
    -et enfin concaténer tous ces fichiers

    j'ai donc fait pas mal de recherches sur le net il j'ai cru comprendre que le langage perl etais le plus adapté a ce genre de choses...
    probleme je ne conais absolument pas ce langage
    je me retourne vers vous pour un peut d'aide (je sais que ca se fait pas de demander des programmes tout fait mais la vraimen je ne conais pas et je ne sais pas si apprendre un langage pour faire un seul prog est ehh enfin vous me comprenez...^^)
    je dispose de linux mais je suis tout debutant..

    donc si qqun pouvais me filer un coup de main... ou si qqun conais une methode pour faire ca...

    merci

  2. #2
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    deja je peut t'orienter vers http://search.cpan.org/ qui te sera tres utile!

    et la fonction substr devrait t'aider sinon pour la concatenation c'est tout bete(si je fait pas d'erreur dans mes souvenir, a toi de vérifier) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $chaine1 = {"bonjour"}
    $chaine2 = {"a tous"}
    $chaine3 = $chaine1.$chaine2
    print $chaine3 #affiche bonjour a tous

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 48
    Points : 18
    Points
    18
    Par défaut
    oui mais je ne veut pas concatener des phrases ce que je veut concatener c'est des fichiers entiers
    ce que je voudrais c'est genre un script que j'executerai sous shell (je ne suis meme pas sur que le perl soit bien un langage de scripts mais bon...) genre si le script s'appel toto (et je suppose que le motif est "tata" et n'est pas passé en argument mais qu'il est ecrit ds le script..) je taperais ds mon shell:;

    ./[chemain]/toto *.txt

    et la tout les fichiers de mon repertoire courent n'aurant plus les lignes avant le motif "tata"

    (merci pour ton lien je vais jeter un coup d'oueil^^

  4. #4
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Donc, il te faut faire un listing ds fichiers du répertoire courant (opendir et readdir) ouvrir en lecture tous les fichiers, faire une recherche du motif en question dans une boucle parcourant toutes les lignes du fichiers jusqu'à cette occurence (facile, m// renvoyant 1 ou 0) puis recopier tout le reste du document dans un fichier ouvert en écriture.

    Si c'est bien ça que tu veux, tout est dans la FAQ

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 48
    Points : 18
    Points
    18
    Par défaut
    pas exactement:

    les trois parties son totalement independentes, dans un premier temps je veut pouvoir effacer les lignes d'un fichier jusqu'au motif "tata" par exemple (mon script s'apel "toto") je pourrai faire dans mon shell:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ./[chemain]/toto LeFichierOuJeVeutPlusLesLignesAvantLeMotifTata.txt
    et plouf les premieres lignes de ce fichiers on disparu... c'est le fichiers lui meme que je veut modifier... ou au pire cree un nouveau qui va ecraser ce fichier...

    deja commancant par la...

  6. #6
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 48
    Points : 18
    Points
    18
    Par défaut
    j'ai trouvé quelque chose: SED donc je pensais a un truc genre

    sed -e '1,56d' *.txt > [le fichiers en cours]


    se qui devrai ffacer les 56 premiere lignes de tout les fichiers .txt du repertoire mais le probleme c'est que je se sais pas ce que je doit mettre a la place de "[le fichiers en cours]"

  7. #7
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 48
    Points : 18
    Points
    18
    Par défaut
    j'ai trouvé :

    sed -i '1,56d' *.txt

    ce qui enleve les 56 premieres lignes dans touts les fichiers .txt du repertoire courent...

    maintenant j'aimerai faire la meme chose mais avec les 56 DERNIERES lignes^^

  8. #8
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Ce que tu peux faire (je sais pas si ça te convient) c'est ouvrir chaque fichier sépraement, faire un my @t=<FIC>. Ainsi, l'expression $#t-55 te retournerais le numéro de la 56ème ligne et $#t+1 celui de la dernière ligne.
    Tu n'aurais plus qu'à appliquer le sed avec ces deux valeurs. Mais pour ça, il fait faire comme j'ai dit au début :on liste le répertoire courant et on ouvre fichier par fichier...

  9. #9
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 48
    Points : 18
    Points
    18
    Par défaut
    mouai ya 400 fichiers je pense que ca va etre un peut cho^^

    ya pas un truc automatique genre une option de sed qui consider les lignes dans l'ordre inverse ou un autre programme qui inverserai les lignes des fichier (la premiere ligne deviendrai la derniere et ainsi de suite...) ce qui me permettrai d'utiliser sed normalement avant d'inverser les fichiers encore une fois pour les remttre a l'endroit....???

  10. #10
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Oh, le nombre de fichiers n'est pas un problème, une simple boucle peut régler le problème, ne t'inquiète pas pour ça

  11. #11
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 48
    Points : 18
    Points
    18
    Par défaut
    ehhh desole je vois pas trop ce que tu veut dire tu pe me donner la commande a laquelle tu pense


    je rappel ce que je veut: supprimer les X (disant 56 ici) dernieres lignes de tout les fichiers .txt du repertoire en cours


    j'ai trouver comment supprimer les X premiere lignes avec la fonction sed:
    donc ca serai la meme chose mais pour les x dernieres lignes...^^

  12. #12
    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 Re: je ne conais rien en perl-> besoin d'aide!!
    Salut,

    Citation Envoyé par filsdugrand
    -supprimer toutes les lignes jusqu'a un certain motif et ce dans tout mes fichiers(disant 'toto')
    -supprimer toutes les lignes a partir d'un certain motif(disant le meme^)
    En ce cas ton problème on peut la voir aussi de la façon suivante :

    - on prends seulement ce que se trouve entre les motifs

    Voilà un exemple sur 3 fichiers
    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
    #! /usr/bin/perl
     
    use warnings;
    use strict;
     
    @ARGV = qw /a b c/;
     
    open W,">a_b_c" or die "E/S : $!\n";
     
    #fichier a : entre tata et toto
    #fichier b : entre lolo et lili
    #fichier c : entre yoyo et yuyu
    while (<>) {
      next unless /tata|lolo|yoyo/i../toto|lili|yuyu/i;
      print W $_;
    }
    Et le résultat
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    [lamitest@localhost corbeille]$ cat a
    djfkjsdklfj
    sdjfkjsdkjf
    sdfjjsdkfj
    sdjkfjsdkfj
    TATA
    sjdkfjksldf
    sdjfkjsd
    sdjfksd
    TOTO
    sdfjsd
    sdjfkjsd
    [lamitest@localhost corbeille]$ cat b
    uuuu
    kdfjkd
    dskfjds
    LOLO
    sdfjksd
    dsjfkjsd
    LILI
    djsfj
    dlsf
    [lamitest@localhost corbeille]$ cat c
    dsf
    YOYO
    dsfjk
    dsfk
    YUYU
    sdfjdslk
    sdjfkl
    [lamitest@localhost corbeille]$ perl dz_suppr_lignes.pl
    [lamitest@localhost corbeille]$ cat a_b_c
    TATA
    sjdkfjksldf
    sdjfkjsd
    sdjfksd
    TOTO
    LOLO
    sdfjksd
    dsjfkjsd
    LILI
    YOYO
    dsfjk
    dsfk
    YUYU
    [lamitest@localhost corbeille]$

  13. #13
    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
    Un petit script Perl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #!/usr/bin/perl
    use strict; use warnings;
    use Tie::File;
    my $nb_records = shift @ARGV;
    while( my $file = shift @ARGV){
      tie my @file, 'Tie::File', $file or die "$!\n";
      $#file -= $nb_records;
      untie @file;
    }
    Tu l'utilises comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cutlast.pl 56 *.txt
    (si tu as appelé ce script "cutlast.pl" et que tu veux retirer les 56 dernières lignes de tous les fichiers .txt de ton répertoire courant)

    --
    Jedaï

Discussions similaires

  1. Rien n'est affiché, besoin d'aide xD
    Par bluespeed30 dans le forum Général Java
    Réponses: 11
    Dernier message: 18/07/2012, 14h14
  2. Réponses: 2
    Dernier message: 12/09/2007, 22h47
  3. Besoin d'aide pour traduire du perl
    Par king_neo2001 dans le forum Langage
    Réponses: 5
    Dernier message: 22/05/2007, 16h10
  4. besoin d'aide pour de l'administration réseau en perl
    Par benzure dans le forum Programmation et administration système
    Réponses: 18
    Dernier message: 30/03/2006, 09h26
  5. [langage] Script en Perl - besoin d'aide
    Par julfra dans le forum Langage
    Réponses: 8
    Dernier message: 13/05/2004, 15h47

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