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 :

Lecture de la fin d'un fichier


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 44
    Par défaut Lecture de la fin d'un fichier
    Bonjour,

    Je voudrais vérifier que les deux derniers caractères d'un fichiers soient bien \x0d\x0a (saut de ligne windows).

    Je procéde de la façon suivante :
    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
     
    # Fichier à controler
    my $file = 'test.txt';
     
    # Ouverture du fichier
    open (FILE, $file) or die "Impossible d'ouvrir le fichier : $!\n";
     
    # On se place à la fin du fichier - 2 caractères
    seek (FILE, -2, 2);
     
    # Lecture des deux caractères
    my $ligne = '';
    read ( FILE, $ligne, 2 );
     
    # Affichage du résultat
    print "\nDEUX DERNIERS CARACTERES = '$ligne'\n";
    print "\nDEUX DERNIERS CARACTERES CORRECTS\n" if ($ligne =~ m/^\x0d\x0a$/);
     
    # Fermeture du fichier
    close FILE;
    Je ne comprend pas pourquoi ça ne marche pas... (bien sur quand je regarde le fichier dans un éditeur hexa, il se termine bien par les caractères voulu).

    Si quelqu'un veut bien m'expliquer, merci

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 605
    Par défaut
    Bonjour,

    si tu recherches exactement la chaîne "\x0d\x0a", il faut je pense doubler tes 2 \ dans ton expression régulière. Le \ étant un caractère d'échappement...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "\nDEUX DERNIERS CARACTERES CORRECTS\n" if ($ligne =~ m/^\\x0d\\x0a$/);
    Mais peut être dis-je une bêtise ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 44
    Par défaut
    Non, pour rechercher à l'aide de caractères hexa dans une expression réguliére, il faut toujours passer simple \x , sinon, ils ne sont pas reconnus comme des caractères hexa. (car 0d et 0a correspondent au retour chariot et au saut de ligne en hexa).

    Sinon, avec \r\n, ça ne marche pas non plus.

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 605
    Par défaut
    Ok, désolé

    Par contre, si les lignes de ton fichier se terminent par "\r\n", ça signifie quand même que le fichier texte est du windows, non ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 44
    Par défaut
    Oui, c'est ça, je veux vérifier que mon fichier se termine par un saut de ligne windows. Mais je ne sais pas comment faire

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 605
    Par défaut
    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
    # Fichier à controler
    my $file = 'test.txt';
     
    # Ouverture du fichier
    open (FILE, $file) or die "Impossible d'ouvrir le fichier : $!\n";
     
    # On ne teste qu'une ligne pour voir si elle contient la séquence "\r\n"
    while(<FILE>)
    {
        if ($_ =~ /\r\n$/)
        {
            print "j'ai trouvé la séquence !\n";
            close(FILE);
        }
    }
    Le close dans mon code est un peu brutal

    Sinon, charger la totalité du fichier dans un tableau (ou liste) et vérifier sur un des éléments s'il se termine par "\r\n" ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 22
    Dernier message: 26/09/2006, 01h36
  2. [Fortran] Lecture de la fin d'un fichier
    Par sebduth dans le forum Fortran
    Réponses: 1
    Dernier message: 02/09/2005, 16h27
  3. [JList] Lecture des données sauvegardées dans un fichier
    Par Myogtha dans le forum Composants
    Réponses: 7
    Dernier message: 10/06/2004, 21h05
  4. [C#] [.NET] Lecture d'une classe dans un fichier
    Par niPrM dans le forum Windows Forms
    Réponses: 4
    Dernier message: 18/05/2004, 08h57
  5. lecture de données a partir de fichier
    Par sana dans le forum MFC
    Réponses: 5
    Dernier message: 21/01/2004, 12h57

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