1. #1
    Membre régulier

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

    Informations forums :
    Inscription : septembre 2006
    Messages : 130
    Points : 82
    Points
    82
    Billets dans le blog
    1

    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
    4 847
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2008
    Messages : 4 847
    Points : 12 537
    Points
    12 537

    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 la FAQ et les cours shell

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

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

    Informations forums :
    Inscription : novembre 2010
    Messages : 2 311
    Points : 6 190
    Points
    6 190

    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
    Avant donc que d'écrire, apprenez à penser.
    Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure.
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément.
                                                        - Nicolas Boileau, L'Art poétique

  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
    4 847
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2008
    Messages : 4 847
    Points : 12 537
    Points
    12 537

    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 la FAQ et les cours shell

  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 régulier

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

    Informations forums :
    Inscription : septembre 2006
    Messages : 130
    Points : 82
    Points
    82
    Billets dans le blog
    1

    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
    4 847
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2008
    Messages : 4 847
    Points : 12 537
    Points
    12 537

    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 la FAQ et les cours shell

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

    Informations forums :
    Inscription : juillet 2006
    Messages : 6 182
    Points : 8 430
    Points
    8 430

    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 régulier

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

    Informations forums :
    Inscription : septembre 2006
    Messages : 130
    Points : 82
    Points
    82
    Billets dans le blog
    1

    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
    2 311
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : novembre 2010
    Messages : 2 311
    Points : 6 190
    Points
    6 190

    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
    Avant donc que d'écrire, apprenez à penser.
    Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure.
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément.
                                                        - Nicolas Boileau, L'Art poétique

+ 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