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

Linux Discussion :

[flex] regex pour fin de fichiers


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    développeur à la maison
    Inscrit en
    Septembre 2006
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : développeur à la maison

    Informations forums :
    Inscription : Septembre 2006
    Messages : 434
    Billets dans le blog
    16
    Par défaut [flex] regex pour fin de fichiers
    bonjour,

    j'aurais besoin de savoir si un fichier se termine toujours par \n (10 ou 0a)
    aussi, est-ce de même sous windows?

    quelqu'un a une idée?

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 686
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 686
    Par défaut
    Bonjour,

    j'aurais besoin de savoir si un fichier se termine toujours par \n (10 ou 0a)
    non.
    aussi, est-ce de même sous windows?
    non.
    quelqu'un a une idée?
    oui.

    les fins de fichiers ne sont pas les mêmes sur GNU/Linux, W$, et Mac.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    les fins de fichiers ne sont pas les mêmes sur GNU/Linux, W$, et Mac.
    les fins de lignes plutôt, non ? une fin de fichier, à part le code EOF je vois pas, ça peut être n'importe quel octet

  4. #4
    Membre actif
    Homme Profil pro
    😹 extrazlove
    Inscrit en
    Mai 2017
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : 😹 extrazlove

    Informations forums :
    Inscription : Mai 2017
    Messages : 34
    Par défaut
    linux \n
    windows \r\n

    sous windows mon clavier envoie 0x0D 0x0A sous linux peut-être sans doute la même chose
    sinon oui fin de fichier = EOF mais jamais travailler avec je peut pas te dire plus je pense pas qu'en parsant un fichier on peut trouver ce code

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 686
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 686
    Par défaut
    Citation Envoyé par BufferBob
    les fins de lignes plutôt, non ?
    heu, oui, fin de ligne !!

    j'ai repris les termes en me focalisant sur \n.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre actif
    Homme Profil pro
    😹 extrazlove
    Inscrit en
    Mai 2017
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : 😹 extrazlove

    Informations forums :
    Inscription : Mai 2017
    Messages : 34
    Par défaut
    fait un effort d'expression on comprend rien de ce que tu raconte

  7. #7
    Membre éclairé

    Homme Profil pro
    développeur à la maison
    Inscrit en
    Septembre 2006
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : développeur à la maison

    Informations forums :
    Inscription : Septembre 2006
    Messages : 434
    Billets dans le blog
    16
    Par défaut
    Merci pour vos réponse.
    j'ai compris que pour mon projet, je devrais utiliser cette expression régulière (pour un automate fini):
    le point d'interrogation signifie zéro ou une fois \r

    je m'explique:

    au cas où, avec windows, la dernière ligne du fichier serait /r/n, on peut utiliser l'expression régulière, comme avec Linux:dans le cas où ce serait \n\r, on utiliserais plutôt ceci:
    ce qui, je crois, explique la première de ces 3 expression régulière

    problème résolu.

  8. #8
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 166
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 166
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    les fins de lignes plutôt, non ?
    Citation Envoyé par N_BaH Voir le message
    heu, oui, fin de ligne !!
    Je dirais même plus : la fin de ligne des fichiers texte !
    Car la zone "datas" d'un fichier bmp est aussi organisée en lignes...

  9. #9
    Membre éclairé

    Homme Profil pro
    développeur à la maison
    Inscrit en
    Septembre 2006
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : développeur à la maison

    Informations forums :
    Inscription : Septembre 2006
    Messages : 434
    Billets dans le blog
    16
    Par défaut
    il s'agit de l'analyseur lexical d'un compilateur:
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    bool finFichier::AFD(){
    	etat=0;
    	reculEchec=0;
    	while(true)
    		switch(etat){
    		case 0:
    			c=carSuiv();
    			if(c=='\n')
    				etat=1;
    			else{
    				echec();
    				return false;
    			}
    			break;
    		case 1:
    			c=carSuiv();
    			if(c==EOF)
    				etat=3;
    			else if(c=='\r')
    				etat=2;
    			else{
    				echec();
    				return false;
    			}
    			break;
    		case 2:
    			c=carSuiv();
    			if(c==EOF)
    				etat=3;
    			else
    				echec();
    				return false;
    		case 3:
    			return true;
     
    		}
    }
    voici carSuiv():
    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
    21
    22
    char doubleTampon::carSuiv(){
    	debut=false;
    	if(tampon[enAvant]==EOF){
    		if(enAvant==STN1){
    			charger2();
    			blocs++;
    			enAvant=STN1+1; //+1 car on est dans le deuxième tapon, qui commence
    									// à STN1+1
    			return tampon[enAvant++];
    		}
    		else if(enAvant==STN2){
    			charger1();
    			blocs++;
    			enAvant=0;
    			return tampon[enAvant++];
    		}
    		else
    			return EOF;
    	}
    	else
    		return tampon[enAvant++];
    }
    on peut aussi mettre cette regex dans un programme qui s'appelle lex (sous linux: flex), programme qui construit des analyseurs lexicaux

  10. #10
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    en clair tu écris un parser lexical en C++ et tu cherches une regex pour matcher s'il y a un saut de ligne à la fin du fichier alors que tu le traites ligne par ligne : ça n'est pas possible
    tout ce que tu peux matcher avec une regex c'est la fin de ligne, et il s'agirait alors plutôt de \r?\n (ou \x0d?\x0a, au choix)
    détecter la fin du fichier doit être effectué séparément, je te renvoie vers la FAQ locale

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

Discussions similaires

  1. Fin de fichier .. ???
    Par blackhorus dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 07/04/2005, 14h32
  2. Apposer le caractere de fin de fichier.
    Par moldavi dans le forum Windows
    Réponses: 2
    Dernier message: 17/02/2005, 15h20
  3. "error : fin de fichier inattendue" en C++
    Par mateo.14 dans le forum MFC
    Réponses: 9
    Dernier message: 28/01/2005, 10h30
  4. Réponses: 4
    Dernier message: 07/12/2004, 09h11
  5. Lire de la 2eme ligne à la fin du fichier
    Par iamspacy dans le forum Linux
    Réponses: 3
    Dernier message: 03/05/2004, 14h23

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