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

Caml Discussion :

[OCaml]Comment déterminer si un in_channel est vide ?


Sujet :

Caml

  1. #1
    alex_pi
    Invité(e)
    Par défaut [OCaml]Comment déterminer si un in_channel est vide ?
    Bonjour !

    Je tente (chose raisonnablement classique en programmation ;-)) d'acceder à des fichiers. Et j'ai entre autre besoin de savoir s'il reste des caractères accessibles sur un in_channel. La seule méthode que j'ai trouvée pour le moment est de lire un caractère en ratrappant l'éventuelle exception End_of_file. Le *gros* désavantage de cette méthode, c'est que je dois alors conserver quelque part le sus dit caractère s'il s'avère que le in_channel n'était pas vide.
    Y a-t-il une méthode un peu plus propre (genre is_empty ;-)) qui m'aurait échappée, et que mon grand ami Google refuserait de me dévoiler ?

    Merci d'avance

    --
    Alexandre

  2. #2
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    à ma connaissance non... mais a priori tu n'as pas à lire si tu ne le souhaites pas

    je pourrais comprendre ta problématique si tu lisais ce qui arrive depuis une socket, et je te conseillerais le select, mais là je ne vois pas trop pourquoi tu rales
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  3. #3
    alex_pi
    Invité(e)
    Par défaut
    Citation Envoyé par gorgonite
    à ma connaissance non... mais a priori tu n'as pas à lire si tu ne le souhaites pas

    je pourrais comprendre ta problématique si tu lisais ce qui arrive depuis une socket, et je te conseillerais le select, mais là je ne vois pas trop pourquoi tu rales
    Je râle parce que j'ai *besoin* de savoir si je suis bien arrivé à la fin d'un fichier, ou de ce qui arrive sur mon entrée standard, ou qu'importe, et que je n'ai pas moyen de le faire, et que c'est nul :-)

  4. #4
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    si tu lis sur l'entrée standard, tu peux utiliser un select pour savoir quand quelque chose arrive... et donc ne lire que lorsque c'est possible, et ne pas tomber sur le end_of_file exception
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  5. #5
    alex_pi
    Invité(e)
    Par défaut
    Citation Envoyé par gorgonite
    si tu lis sur l'entrée standard, tu peux utiliser un select pour savoir quand quelque chose arrive... et donc ne lire que lorsque c'est possible, et ne pas tomber sur le end_of_file exception
    En fait, je préfère continer à faire du OCaml, et pas faire du C avec une syntaxe bizare ;-) Dit autrement, le plus loin du module Unix je me tiens, le mieux je me porte ! Disons que ce n'est pas trop dans l'esprit de mon projet de faire de la prog sytème :-) (pour donner une idée, sur le paquet de miliers de ligne de codes, y a une dizaine de "for" et absolument aucun while :-) )

  6. #6
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    tu peux faire de la prog systeme fonctionnelle très élégante... je ne vois pas où est le problème ?

    http://caml.inria.fr/pub/docs/manual...bref/Unix.html


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    val Unix.select : file_descr list ->
           file_descr list ->
           file_descr list ->
           float -> file_descr list * file_descr list * file_descr list
     
    Wait until some input/output operations become possible on some channels. 
    The three list arguments are, respectively, a set of descriptors to check for 
    reading (first argument), for writing (second argument), or for exceptional 
    conditions (third argument). The fourth argument is the maximal timeout, in 
    seconds; a negative fourth argument means no timeout (unbounded wait). 
    The result is composed of three sets of descriptors: those ready for reading 
    (first component), ready for writing (second component), and over which an 
    exceptional condition is pending (third component).
    perso, ce que tu souhaites faire utiliserait effectivement le module Unix, qui fonctionne également sous Windows (allez savoir pourquoi il a ce nom... je me suis fait piégé au début de mon TIPE à l'époque, et sans l'aide de Pierre Weiss, je serais resté bloqué )
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  7. #7
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    Une valeur du type in_channel n'est pas une chose où l'on dépose des caractères puis les lit jusqu'à la fin : c'est un canal. Autrement dit, c'est l'équivalent du FILE * du C : il faut voir ça comme un manche troué des deux côtés par où les données ne font que transiter...

    Les in_channel sont donc une abstraction pour représenter le fait que tu es connecté à un émetteur de données : ni plus, ni moins.

    Au passage, une solution extrêmement élégante de programmer avec des in_channel est d'utiliser les flots en Caml.
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

Discussions similaires

  1. Comment détecter si un tableau est vide ?
    Par ErPi dans le forum Langage
    Réponses: 6
    Dernier message: 27/06/2005, 18h50
  2. [langage] Comment tester si une chaine est vide
    Par |Bio dans le forum Langage
    Réponses: 4
    Dernier message: 04/05/2005, 15h05
  3. Comment tester si un repertoire est vide sous Linux
    Par chouchouappc dans le forum Linux
    Réponses: 3
    Dernier message: 24/02/2005, 12h03
  4. [Access] Comment savoir qu'un champs est vide ?
    Par Oberown dans le forum ASP
    Réponses: 9
    Dernier message: 25/10/2004, 10h47
  5. Comment déterminer si un composant est d'un type "TMonT
    Par DanielR dans le forum C++Builder
    Réponses: 2
    Dernier message: 20/03/2004, 18h22

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