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

Ada Discussion :

Affichage d'un fichier texte


Sujet :

Ada

  1. #1
    Membre expert
    Profil pro
    Dév
    Inscrit en
    Juin 2007
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Dév

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 154
    Points : 3 667
    Points
    3 667
    Par défaut Affichage d'un fichier texte
    Bonjour, je fais actuellement de l'ADA sur le shell de cygwin et je cherche à afficher le contenu d'un fichier texte. Mon programme compile mais seulement la première ligne de mon fichier texte est lu. De plus, mon programme ne se termine pas... donc j'imagine qu'il doit y avoir un problème avec ma boucle. Ou est-ce que ça vient de cygwin

    Voici le code :
    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
    with Ada.Text_io; use Ada.Text_io;
    procedure exemple is
    	fichier:File_type;
    	car : Character;
    	begin
    		open (fichier,in_file, "texte.txt");
    		while not end_of_file( fichier ) loop
    			while not end_of_line( fichier ) loop
    				get(fichier,car);
    				put(car);
    			end loop;
    			skip_line;
    		end loop;
    		close(fichier);
    end exemple;

  2. #2
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Ton problème vient du skip_line, remplaces-le par un skip_line( fichier ). Tu ne vidais pas le buffer du fichier mais le buffer d'entrée standard.

  3. #3
    Membre expert
    Profil pro
    Dév
    Inscrit en
    Juin 2007
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Dév

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 154
    Points : 3 667
    Points
    3 667
    Par défaut
    hum ça doit être cygwin qui marche mal alors car en mettant skip_line(fichier), il me raise une erreur ADA.IO_Exceptions.END_ERROR. après m'avoir affiché mon fichier n'importe comment .
    contenu fichier txt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    c'est un fichier pour tester
    dssdd
     
    dsq
    Et dans la console ça m'affiche "dsqdd un fichier pour tester" suivie du raised ADA.IO.

  4. #4
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Cette erreur n'est pas due à cygwin mais au formatage de ton fichier. Il manque un retour à la ligne avant la fin du fichier. Et donc tu rencontres une fin de fichier avant d'avoir rencontrer une fin de ligne ce qui pose problème.

  5. #5
    Membre expert
    Profil pro
    Dév
    Inscrit en
    Juin 2007
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Dév

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 154
    Points : 3 667
    Points
    3 667
    Par défaut
    Merci je n'ai plus cette erreur mais la lecture du fichier est toujours pas bonne car c'est toujours "dsqdd un fichier pour tester" qui est affiché.

  6. #6
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    C'est normal, mais ça mérite sans doute une explication.

    La fin des lignes dans un fichier texte est dépendante du système d'exploitation.

    -> Sur Windows, c'est CR LF. C'est à dire un retour au début de la ligne suivi d'un passage à la ligne suivante (c'est ce qui se passe avec une vieille machine à écrire).
    -> Sur Linux/Unix (et mac depuis OSX), c'est LF.
    -> Sur Mac (avant OSX) c'est CR.

    Lorsque tu fais appel à end_of_line, ce que tu détectes, c'est LF.

    Tu travailles sur windows, donc ton fichier utilise surement la fin de fichier CR LF. Donc lorsque tu lis la première ligne tu obtiens :

    c'est un fichier pour tester
    Maintenant la fin de ligne arrive, tu lis donc CR, ça n'est pas end_of_line donc on affiche le symbole ce qui a pour effet de revenir au debut de la ligne. Ensuite tu lis LF ce qui est end_of_line donc on passe à la ligne suivante et tu lis ta ligne :

    dssdd
    Tu affiches donc cette ligne, or tu l'affiches au début de la ligne précédente, ce qui a pour effet d'obtenir la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dssdd un fichier pour tester
    Et ainsi de suite, ce qui explique la lecture bizarre mais tout à fait correcte.

    Si tu veux éviter le problème, tu peux tester la valeur du caractère que tu lis avant de l'afficher. Si tu tombes sur Character'Val(13) (ie: CR) alors tu n'affiches pas le caractère.

  7. #7
    Membre expert
    Profil pro
    Dév
    Inscrit en
    Juin 2007
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Dév

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 154
    Points : 3 667
    Points
    3 667
    Par défaut
    Ok merci pour ton aide.

  8. #8
    Membre régulier Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Points : 97
    Points
    97
    Par défaut
    Ba alors binh, un peu du mal avec le projet ADA
    Courage !!

    Installe toi une VM ( VMWare ou VirtualBox )
    mais en tout cas le code est correct

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

Discussions similaires

  1. Affichage de plusieurs fichiers text dans une seule JtextArea
    Par kinza-22 dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 06/06/2010, 12h39
  2. affichage d'un fichier texte en php
    Par dgac2000 dans le forum Langage
    Réponses: 8
    Dernier message: 23/05/2007, 19h54
  3. JTextPane : Affichage de gros fichiers texte
    Par patanoc dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 26/02/2007, 19h10
  4. Affichage d'un fichier texte dans une fenetre
    Par schwinny dans le forum Access
    Réponses: 3
    Dernier message: 11/08/2006, 08h53
  5. [Ada] Affichage d'un fichier texte
    Par sneb5757 dans le forum Ada
    Réponses: 9
    Dernier message: 12/06/2006, 10h14

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