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 :

retour chariot fin de fichier


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut retour chariot fin de fichier
    Bonjour,

    J'aimerai savoir comment rajouter un retour chariot en fin de fichier uniquement.

    Merci pour votre aide.

  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
    echo "" >> fichier

    Tu tiens vraiment à le faire en perl ?
    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
    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 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ggnore Voir le message
    echo "" >> fichier

    Tu tiens vraiment à le faire en perl ?
    Pas sûr que ça marche sous tous les systèmes d'exploitation...

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 273
    Points : 12 708
    Points
    12 708
    Par défaut
    Bonjour,
    Et je ne pense pas que sa question soit si simple.
    Ne faudrait-il pas se poser les questions suivantes:
    -Le retour chariot concerne quel type de format de fichier (dos,mac,unix) ?
    -Si ce retour chariot est déjà présent, doit on quand même le rajouter ?
    Cordialement.

  5. #5
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut
    effectivement, je souhaiterai faire un retour chariot en perl si celui ci n'est pas déjà présent !!

    Merci pour vos réponses.

  6. #6
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut
    le retour chariot concerne aussi bien des fichiers issus de Mac, Windows ou Unix !

    Merci pour votre aide.

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -pi.bak -e '$last_line = $_; END { print "\n" unless $last_line =~ /\n$/;} ' nom_fichier.txt

  8. #8
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut
    et à travers un script , ça donne quoi ?

  9. #9
    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 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Tu peux essayer quelque chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    use strict;
    use warnings;
     
    my $last_line;
    while (<>) {
         print;
         $last_line = $_;
    }
    print "\n" unless $last_line =~ /\n$/;
    A lancer comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl script.pl fichier_entree > fichier_sortie
    Ou, si tu préfères, tu ouvres explicitement les fichiers en entrée et en sortie avec la syntaxe que tu connais déjà, et tu lis et écris sur les filehandles respectivement obtenus.

  10. #10
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 273
    Points : 12 708
    Points
    12 708
    Par défaut
    Citation Envoyé par vince2005 Voir le message
    le retour chariot concerne aussi bien des fichiers issus de Mac, Windows ou Unix !

    Merci pour votre aide.
    Le retour chariot sous unix => '\n'
    Le retour chariot sous windows => '\r\n'
    Le retour chariot sous mac => '\r'

    Donc, la question est de savoir si tu veux le retour chariot selon le format du fichier ou un bien précit ?

    Quel est l'utilité et/ou la finalité ?

    Si tu es sous linux, je te conseillerais plutot une commande tel que "ex" au lieu de perl qui fera très bien le travail:
    Ici, la commande rajoutera le retour chariot à la fin du fichier "plop" si celui-ci n'existe pas et en principe respectera le format du fichier (unix,windows ou mac).
    Cordialement.

  11. #11
    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 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Le retour chariot sous unix => '\n'
    Le retour chariot sous windows => '\r\n'
    Le retour chariot sous mac => '\r'

    Donc, la question est de savoir si tu veux le retour chariot selon le format du fichier ou un bien précit ?
    Oui, mais en Perl, le retour chariot est codé "\n", quel que soit le système.

    Si tu imprimes "toto\n" sous Windows, Perl, sachant qu'il tourne sous Windows, mettra lui-même le "\r" en plus. Et bien que je n'aie jamais utilisé Perl sous Mac, je suis convaincu que Perl transformera le "\n" en "\r" (encore que je me demande si ça n'a pas changé sous les versions récentes de Mac). Mais, bon, bref Perl s'adapte au système d'exploitation sur lequel il tourne. Donc, en principe pas de problème tant que Perl tourne sur la plateforme sur laquelle le fichier sera utilisé.

    Là où l'on commence à avoir des problèmes, c'est quand on utilise un fichier généré (par Perl ou autre programme ou langage) sur une autre plateforme. Si le fichier est transféré par FTP en mode ASCII, FTP se charge généralement de bien faire la conversion. Mais s'il est transféré d'une autre façon (FTP en mode binaire, SFTP, transfert binaire d'un ZIP, etc.), alors il y a de fortes chances qu'il faille faire une conversion supplémentaire (avant ou après le transfert) pour ajouter ou retirer ou modifier les caractères de fin de ligne, ce qui n'est pas forcément compliqué: voici par exemple un alias dos2unix en Perl:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -pi.bak -e 's/\r//g;'
    et un unix2dos:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -pi.bak -e 's/\n/\r\n;'
    Ou, si je sais que mon fichier généré sous Unix ou Linux sera utilisé sous Windows et que le transfert ne fera pas la conversion, alors j'ajoute directement les "/r" nécessaires. Mais cela n'est pas toujours possible: sous Windows, il n'est pas possible à ma connaissance d'empêcher l'insertion des "\r" si le fichier doit être utilisé sous Unix. Une conversion après coup est nécessaire. Et je n'évoquerais même pas les autres systèmes d'exploitation sur lesquels je travaille aussi, comme VMS...

    Rien de bien compliqué, donc, mais c'est tout de même assez rageant de constater à l'issue d'un traitement durant deux ou trois heures qu'il n'a rien fait à cause de ce genre de problème (ou, pire, qu'il a fou*u le souk dans une base de données). Je sais de quoi je parle, j'ai vécu plus d'une fois ce genre de désagrément.

  12. #12
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 273
    Points : 12 708
    Points
    12 708
    Par défaut
    La conversion dos2unix par exemple (ou mac2unix, ou l'inverse) ne fait pas que le traitement des retours chariot, il peut aussi faire de la conversion de locale mais bon là on sort du sujet.
    Sinon, il m'arrive d'utiliser perl sous cygwin, et dans ce cas, le retour chariot reste par défaut de type unix.

    Je suggérais juste que si on était sous linux, la commande 'ex' (qui n'est en fait que vim "en mode commande"), reconnait le type de fichier et donc peut rajouter le bon type de retour chariot sans changer le format de celui-ci (Bien sur, il y a aussi moyen de forcer le type et donc de changer le format).

    Après, je suis d'accord, que si ses fichiers doivent être au format de l'OS cible, il faudra passer par une phase de conversion, puis rajouter ce fameux retour chariot.
    Cordialement.

Discussions similaires

  1. Supprimer retour chariot dans un fichier CSV
    Par smain_inf dans le forum VBScript
    Réponses: 2
    Dernier message: 20/08/2008, 09h56
  2. [Débutant]Suppression retour chariot dans un fichier texte.
    Par Baban29 dans le forum Entrée/Sortie
    Réponses: 22
    Dernier message: 18/04/2008, 12h05
  3. Retour chariot/mysql/écriture fichier
    Par Ekros dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 08/08/2007, 17h32
  4. Mettre des retours chariot dans un fichier
    Par Isa31 dans le forum Langage
    Réponses: 8
    Dernier message: 02/03/2006, 16h13
  5. Problème retour chariot dans un fichier texte
    Par Redondo dans le forum Windows
    Réponses: 2
    Dernier message: 08/02/2006, 18h23

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