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

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 313
    Points : 404
    Points
    404
    Billets dans le blog
    14
    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 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    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 éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    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
    Provisoirement toléré
    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
    Points : 52
    Points
    52
    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 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    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
    Provisoirement toléré
    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
    Points : 52
    Points
    52
    Par défaut
    fait un effort d'expression on comprend rien de ce que tu raconte

  7. #7
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 313
    Points : 404
    Points
    404
    Billets dans le blog
    14
    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
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    regex ? mais dans quel contexte ?
    un programme en C ? python ? perl ? shell ?

    aqjs, EOF n'est pas une regex.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    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...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  10. #10
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 313
    Points : 404
    Points
    404
    Billets dans le blog
    14
    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

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

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    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, 13h32
  2. Apposer le caractere de fin de fichier.
    Par moldavi dans le forum Windows
    Réponses: 2
    Dernier message: 17/02/2005, 14h20
  3. "error : fin de fichier inattendue" en C++
    Par mateo.14 dans le forum MFC
    Réponses: 9
    Dernier message: 28/01/2005, 09h30
  4. Réponses: 4
    Dernier message: 07/12/2004, 08h11
  5. Lire de la 2eme ligne à la fin du fichier
    Par iamspacy dans le forum Linux
    Réponses: 3
    Dernier message: 03/05/2004, 13h23

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