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

Pascal Discussion :

Suppression d'une chaîne de caractères dans chaque ligne d'un fichier


Sujet :

Pascal

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Suppression d'une chaîne de caractères dans chaque ligne d'un fichier
    Bonjour,

    je cherche à developper un script qui permet de supprimer dans un fichier texte tous les caractères présents apres la 6eme virgule de chaque ligne.
    Quelqu un pourrait il m aider?
    Merci

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    tu lit ton fichier ligne à ligne et à chaque ligne tu fais une regex.
    tu print tout ça dans un fichier temporaire que tu renomme par la suite et voilà

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta reponse
    je lis les lignes une a une mais je ne connais rien aux expressiosn regulieres, et ca m a l air un brin compliqué...

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    lis un peu la FAQ et essaye quelque chose pour qu'on puisse t'aider

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Alors en fait pour etre clair,

    j ai un fichier txt de la forme
    "jhjhkj","ljhjkkj",'mjlklk","lkhlh","lkhlh","","!test"
    en fait je souhaiterai supprimer les derniers champs comme suit: ,"","test"
    Mon probleme est que j arrive a supprimer test mais je n arrive pas a supprimer les virgules et les guillemets.
    En fait je cherche une expression qui permettrait de supprimer tous ces caracteres d'un coup.

    voila pour l instant mon script ( tres pauvre.....)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    open FICHIER,"< testperl.txt" or die "Le fichier n'existe pas !";
    while ($ligne = <FICHIER>){
    print $ligne;
    $ligne =~ s/\btest\b//;
    print $ligne;
    }
    close FICHIER;
    et si je remplace la ligne suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ligne =~ s/\btest\b//;
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ligne =~ s/\b,"","test"\b//;
    ca ne fonctionne pas.
    Comment donc faire rentrer cette expression ??

    Merci

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    mon fichier txt comporte evidemment plusieurs lignes, toutes du mm format.

  7. #7
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    je resume :
    tu as un fichier de ce type :
    "col1","col2",'col3","col4","col5","col6","!test"
    et tu voudrais au final ceci :
    "col1","col2",'col3","col4","col5","col6"
    c'est ça?
    ou bien :
    col1 col2 col3 col4 col5 col6
    ???

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    oui
    mon fichier comporte plusieurs lignes qui sont toutes de la forme
    "col1","col2","col3","col4","col5","col6","","col8"

    Le plus simple aurait été de balayer chaque ligne et de tout supprimer a partir de la 6 eme virgule (comprise)
    mais je bloque et je ne sais par ou commencer pour chercher.

    Ma solution a donc été de supprimer dans chaque ligne les 2 dernieres colonnes, sachant qu'elles sont toutes de la forme :,"","TEST" ou ,"0","TEST".

    J'espere avoir été clair....

    Merci pour ton aide

  9. #9
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    test ça, j'ai pas testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    open (FICHIER,"testperl.txt") or die "Le fichier n'existe pas !";
    while (my $ligne = <FICHIER>){
      my @toto = split(",", $ligne);
      for (my $i=6;$i<scalar(@toto);$i++){
        $ligne .= $toto[$i];
      }
      print "$ligne\n";
      $ligne = "";
    }
    close (FICHIER);

  10. #10
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    ou en optimisant un peu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    open (FICHIER, '<', 'testperl.txt') or die "Le fichier n'existe pas !";
    while (my $ligne = <FICHIER>){
      my @toto = split(/,/, $ligne);
      print( join ( ',' , @toto[0..5] ) . "\n");
    }
    close (FICHIER);

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  11. #11
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Citation Envoyé par MarneusCalgarXP
    ou en optimisant un peu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    open (FICHIER, '<', 'testperl.txt') or die "Le fichier n'existe pas !";
    while (my $ligne = <FICHIER>){
      my @toto = split(/,/, $ligne);
      print( join ( ',' , @toto[0..5] ) . "\n");
    }
    close (FICHIER);
    tu devrais expliquer ton code, car pour les debutants, c'est pas expliqué dans les docs ce genre d'ecriture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print( join ( ',' , @toto[0..5] ) . "\n");
    @toto[0..5]
    et ils seront perdus

  12. #12
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Citation Envoyé par djibril
    tu devrais expliquer ton code, car pour les debutants, c'est pas expliqué dans les docs ce genre d'ecriture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print( join ( ',' , @toto[0..5] ) . "\n");
    @toto[0..5]
    et ils seront perdus
    Effectivement, @toto[0..5] renvoie une portion du tableau toto contenant les éléments d'indice 0 à 5, soit les 6 premiers éléments.

    join va coller tous les éléments du tableau passé en paramètre avec le séparateur fourni afin de générer une chaine de caractères.

    Par contre, dans la solution que tu as posté, tu as fait une toute pitite erreur, tu as fait commencer la boucle à l'indice 6, jusqu'à la fin de la ligne, du coup tu récupères justement la partie qu'il veut éliminer !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for (my $i=6;$i<scalar(@toto);$i++){
    # à remplacer par
    for (my $i=0;$i < 6;$i++){

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  13. #13
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup a vous pour vos reponses.

    J'avais en fait trouvé une autre solution(apres avoir bien galeré... ):

    open FD,"< test.dat" or die "Le fichier n'existe pas !";
    open OUT,"> output.dat";
    while (<FD>)
    {
    if (/^(.+),[^,]+,[^,]+$/)
    {print OUT "$1\n";
    }
    }
    close FD;
    close OUT;



    En tout cas encore merci a vous!!!!!

  14. #14
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    pense à mettre ton code entre balise code pour la lisibilité. Et si ton probleme est résolu, met un tag résolu.

    Merci

Discussions similaires

  1. [MySQL] Remplacer une chaîne de caractères dans une base de données
    Par Furius dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 27/11/2013, 21h06
  2. Réponses: 2
    Dernier message: 06/01/2013, 19h17
  3. Réponses: 7
    Dernier message: 14/12/2005, 09h53
  4. Remplacer une chaîne de caractères dans une base
    Par Furius dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/10/2005, 23h03
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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