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 :

insérer un retour à la ligne dans un txt


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 5
    Points : 6
    Points
    6
    Par défaut insérer un retour à la ligne dans un txt
    Bonjour,

    Comment je pourrai insérer un retour à la ligne avec la commande sed à travers cygwin, ou avec un script perl dans un fichier txt contenant:
    <A> blablabla </A><B>blablabla</B><A>blabla..</A>... etc

    ce que je veux obtenir:
    <A> blablabla </A>
    <B>blablabla</B>
    <A>blabla..</A>
    ...etc

    Merci

  2. #2
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<A> blablabla </A><B>blablabla</B><A>blabla..</A>" | sed "s/></>\n</g"
    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;
     
    my $bla="<A> blablabla </A><B>blablabla</B><A>blabla..</A>";
     
    $bla =~ s/></>\n</g;
     
    print $bla;
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par ggnore Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<A> blablabla </A><B>blablabla</B><A>blabla..</A>" | sed "s/></>\n</g"
    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;
     
    my $bla="<A> blablabla </A><B>blablabla</B><A>blabla..</A>";
     
    $bla =~ s/></>\n</g;
     
    print $bla;
    Chez moi la regex avec sed ne fonctionne pas car "\n" doit renvoyer "n"
    j'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # Attention si tu veux garder la modif dans le même fichier il faudra passer par un fichier temporaire
    sed "s/></>\\\n</g" test.txt > result.txt | mv -f result.txt test.txt
    où le fichier contient ta ligne et j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <A> blablabla </A>\n<B>blablabla</B>\n<A>blabla..</A>
    a priori il n'interprète pas le "\n" comme un retour à la ligne

    si tu veux le faire en perl, tu ne pourras pas non plus enregistrer directement la modif dans le fichier d'origine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -e 'open(FIC_IN, "test.txt"); my @lignes; while (<FIC_IN>){print $_; $_=~s/></>\n</g; print ">$_<"; close(FIC_IN);push(@lignes, $_);} open(FIC_OUT, ">", "test2.txt"); foreach my $line (@lignes){print FIC_OUT "$line";}'

  4. #4
    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 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    En Perl avec du texte à la ligne de commande:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<A> blablabla </A><B>blablabla</B><A>blabla..</A>" | perl -e 's/></>\n</g'
    si tu veux le faire en perl, tu ne pourras pas non plus enregistrer directement la modif dans le fichier d'origine
    Si, si, c'est tout à fait possible, par exemple avec un fichier nommé 'nom_fichier.txt' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -i.bak -pe 's/></>\n</g' nom_fichier.txt
    Le fichier d'origine non modifié sera renommé en nom_fichier.txt.bak et les modifications apparaîtront dans le fichier nom_fichier.txt. Et la syntaxe est bien plus concise.

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Si, si, c'est tout à fait possible, par exemple avec un fichier nommé 'nom_fichier.txt' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -i.bak -pe 's/></>\n</g' nom_fichier.txt
    je connaissais pas car j'utilise peu perl en ligne de commande mais en effet c'est beaucoup plus simple

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 5
    Points : 6
    Points
    6
    Par défaut script perl
    Citation Envoyé par 6ril23 Voir le message
    Chez moi la regex avec sed ne fonctionne pas car "\n" doit renvoyer "n"
    j'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # Attention si tu veux garder la modif dans le même fichier il faudra passer par un fichier temporaire
    sed "s/></>\\\n</g" test.txt > result.txt | mv -f result.txt test.txt
    où le fichier contient ta ligne et j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <A> blablabla </A>\n<B>blablabla</B>\n<A>blabla..</A>
    a priori il n'interprète pas le "\n" comme un retour à la ligne

    si tu veux le faire en perl, tu ne pourras pas non plus enregistrer directement la modif dans le fichier d'origine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -e 'open(FIC_IN, "test.txt"); my @lignes; while (<FIC_IN>){print $_; $_=~s/></>\n</g; print ">$_<"; close(FIC_IN);push(@lignes, $_);} open(FIC_OUT, ">", "test2.txt"); foreach my $line (@lignes){print FIC_OUT "$line";}'
    ton script fonctionne parfaitement merci bien , mais je viens de me rendre compte que parfois dans mon txt il y a un espace entre </A> et <B>, du coup il ne fait pas un retour à ligne pour ces cas , je vais essayer de résoudre ça ..

  7. #7
    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 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Essaie ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -i.bak -pe  's/>\s*</>\n</g'  nom_fichier.txt

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/03/2013, 14h39
  2. Insérer un retour à la ligne dans un champ texte
    Par vin100H dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/09/2012, 11h27
  3. [Batch] Créer un retour à la ligne dans un .txt
    Par ptilemare dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 05/08/2010, 08h51
  4. Insérer un retour à la ligne dans un label
    Par debdev dans le forum ODS et reporting
    Réponses: 4
    Dernier message: 13/08/2009, 15h58
  5. insérer un retour à la ligne dans un titre de colonne
    Par sanach dans le forum Balisage (X)HTML et validation W3C
    Réponses: 11
    Dernier message: 01/12/2008, 12h27

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