[PERL] Remplacer retour chariot par espace

F_Pignon Messages postés 23 Date d'inscription   Statut Membre -  
 Zoubouloune -
Bonjour tout le monde,

Je réactualise la discussion:
http://www.commentcamarche.net/forum/affich 4375050 remplacer un retour a la ligne par un espace

pour une question toute bête mais qui ne fonctionne visiblement pas dans mon cas

Je voudrais trouver un moyen de remplacer les retour chariot par des espaces à partir d'un script perl

Mon fichier est de type :
ligne1
ligne2
ligne3
etc.


et j'aurais besoin de récupérer :
ligne1 ligne2 ligne3 etc


les propositions de la discussion qui portait déjà sur le sujet suggérait des commandes essentiellement en ligne de commande, dont celle de lami20j :

 perl -pe 's/\n/ /g' fichier 


qui fonctionne très bien (tant qu'on reste en ligne de commande)

Sauf que quand je met cette même commande dans mon script :
Extrait :
(...)
while(<FIC>){
   $ligne=$_;
   $ligne=~s/toto/titi/g;
   $ligne=~s/tata/tutu/g;
   ...
   $ligne=~s/\n/ /g;
}
(...)


ça ne fonctionne plus... :( et j'ai essayé avec tr ($ligne=~tr/\n/ /g;) mais en vain..
(et je n'ai aucun message d'erreur ; mon fichier initial ne bouge pas)

et j'ai absolument besoin de faire cette opération dans le script même

Donc si quelqu'un pouvait m'aider ??

Merci d'avance !
Configuration: Windows XP
Firefox 2.0.0.14

2 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,
    lami20j@debian:~/trash$ cat fic.txt
    ligne1
    ligne2
    ligne3
    etc.
    
    lami20j@debian:~/trash$ cat f_pignon.pl
    #!/usr/bin/perl -i.orig
    use strict;use warnings;
    
    @ARGV = ("fic.txt");
    
    while(<>){
      next if /^$/;
      s/\n/ / and print;
    }
    __END__
    lami20j@debian:~/trash$ perl f_pignon.pl
    lami20j@debian:~/trash$ cat fic.txt
    ligne1 ligne2 ligne3 etc. lami20j@debian:~/trash$ cat fic.txt.orig
    ligne1
    ligne2
    ligne3
    etc.
    
    lami20j@debian:~/trash$
    
    0
    1. F_Pignon Messages postés 23 Date d'inscription   Statut Membre 1
       
      Salut lami20j


      merci bcp

      je pense que ça vient du next if... je vas tester
      0
  2. Zoubouloune
     
    Sous windows le retour chariot est le crfl donc le substituer comme ceci arange tout :-)

    s/\r\n//g;
    0