Glossaire : (Espèce) Conduit (tube) :
L’espèce Conduit est un tube proposant des méthodes fonctionnelles pour lire ou écrire dans un fichier, de manière avancée. L'encodage du conduit est, par défaut, UTF-8.
La tube (ou pipe, en anglais) est un tuyau virtuel dans lequel circulent des informations. Ainsi, le tube sert à faire communiquer plusieurs processus entre eux. On distingue les deux processus par leur action :
• soit le tube est en écriture de données : c’est l’entrée du tube ;
• soit le tube est en lecture de données : c’est la sortie du tube.
Le processus qui écrit ne peut pas lire les données, et inversement. Il faut donc s’imaginer un tube virtuel qui permet le dialogue entre deux processus.
Par exemple, on commence par ouvrir l’entrée du tube en écriture, pour écrire (ou charger) les données du tube virtuel dans le "fichier B" ou dans un autre processus informatique ; puis, on ferme l’entrée du tube, afin de pouvoir ouvrir la sortie du tube en lecture, pour lire (ou décharger) les données depuis le "fichier A" ; et, enfin on referme la sortie du tube.
Nous étudierons successivement, ici, l’espèce Conduit sous ses fonctions de gestion générale (I) ;
ses fonctions en écriture (II) ; ses fonctions en lecture (III) ; et son annexe pour finir (IV).
La tube (ou pipe, en anglais) est un tuyau virtuel dans lequel circulent des informations. Ainsi, le tube sert à faire communiquer plusieurs processus entre eux. On distingue les deux processus par leur action :
• soit le tube est en écriture de données : c’est l’entrée du tube ;
• soit le tube est en lecture de données : c’est la sortie du tube.
Le processus qui écrit ne peut pas lire les données, et inversement. Il faut donc s’imaginer un tube virtuel qui permet le dialogue entre deux processus.
Par exemple, on commence par ouvrir l’entrée du tube en écriture, pour écrire (ou charger) les données du tube virtuel dans le "fichier B" ou dans un autre processus informatique ; puis, on ferme l’entrée du tube, afin de pouvoir ouvrir la sortie du tube en lecture, pour lire (ou décharger) les données depuis le "fichier A" ; et, enfin on referme la sortie du tube.
Nous étudierons successivement, ici, l’espèce Conduit sous ses fonctions de gestion générale (I) ;
ses fonctions en écriture (II) ; ses fonctions en lecture (III) ; et son annexe pour finir (IV).
I/ Les fonctions de gestion générale de l'espèce Conduit :
1) c.encodage(texte) : définir l'encodage de lecture/écriture du fichier (à effectuer avant d'ouvrir le conduit)
La fonction d’espèce encodage : c’est-à-dire la fonction d’encodage de l’espèce conduit : permet de donner un codage aux données d’un fichier, son paramètre "texte" est par défaut UTF-8. Il est conseillé d'utiliser cet encodage compatible avec l'Atelier Linotte. Plus d'information sur l'encodage. http://fr.wikipedia.org/wiki/Codage_de_caract%C3%A8res
Code:
Exemple encodage en écriture :
c est un conduit
début
évoque c.encodage("UTF-16") // Encodage du fichier en premier.
évoque c.enregistrer("d:/temp/linotte.txt")
// Il enregistre, sous l’encodage UTF-16, un nouveau fichier « linotte.txt ».
évoque c.écrire("Voici un texte écrit depuis le langage Linotte !")
// Il écrit, sous l’encodage UTF-16, les données entre "" dans le fichier.
évoque c.fermer()
// Il ferme le fichier pour sauvegarde les données écrites et encodées.
termine
N.B. : que l’encodage en lecture ne semble pas fonctionner.
2) c.fichierexiste(texte) : vérifier l'existence du fichier :
La fonction d’espèce fichierexiste : permet de savoir si le lieu existe bien, afin de procéder ou non à l’écriture ou à la lecture d’un fichier. Ex. : voir ci-dessous Exemple complet n°2, en Annexe.
3) c.ferme() : fermer le fichier en lecture, ou écriture :
La fonction d’espèce ferme : permet de fermer le tube conduit afin de conserver ses données écrites, mais aussi afin de pouvoir passer du mode lecture au mode écriture et inversement. Ex. : voir ci-dessus les exemples du titre III et Exemple complet n°2.
II/ Les fonctions d'espèce Conduit en lecture :
1) c.ouvrir(texte): ouvre le fichier en lecture depuis le chemin déterminé :
La fonction d’espèce ouvrir : ouvre le fichier en lecture depuis son répertoire d’origine. Son paramètre texte indique le chemin pour ouvrir le fichier.
2) c.fichierexiste(texte) : vérifier l'existence du fichier :
La fonction d’espèce fichierexiste : permet de savoir si le lieu existe bien, afin de procéder ou non à l’écriture ou à la lecture d’un fichier. Ex. : voir ci-dessous Exemple complet n°2, en Annexe.
3) c.ferme() : fermer le fichier en lecture, ou écriture :
La fonction d’espèce ferme : permet de fermer le tube conduit afin de conserver ses données écrites, mais aussi afin de pouvoir passer du mode lecture au mode écriture et inversement. Ex. : voir ci-dessus les exemples du titre III et Exemple complet n°2.
II/ Les fonctions d'espèce Conduit en lecture :
1) c.ouvrir(texte): ouvre le fichier en lecture depuis le chemin déterminé :
La fonction d’espèce ouvrir : ouvre le fichier en lecture depuis son répertoire d’origine. Son paramètre texte indique le chemin pour ouvrir le fichier.
Code:
Exemple ouvrir fichier :
c est un conduit
début
évoque c.ouvrir("d:/temp/fichier.txt")
// Ouverture d’un fichier préexistant
affiche c.lire() // Affiche les données lues
termine
2)c.sélectionneretouvrir() : affiche le sélecteur de fichiers et ouvre le fichier sélectionné en lecture :
La fonction d’espèce sélectionneretouvrir : ouvre le sélecteur de fichier du système d'exploitation et permet de sélectionner un fichier destiné à être ouvrir.
Code:
Exemple sélectionneretouvrir :
c est un conduit
début
évoque c.sélectionneretouvrir()
// Sélection et ouverture d’un tube sous l’encodage évoqué
affiche c.lire() // Affiche les données lues
termine
3) c.nomfichier() : retourne le nom du fichier :
La fonction d’espèce nomfichier : retourne le nom du fichier enregistré, ou ouvert.
Code:
Exemple nomfichier :
c est un conduit
début
évoque c.sélectionneretenregistrer()
affiche "le nom de mon fichier est : " + c.nomfichier()
// Affiche le nom du fichier.
évoque c.fermer()
4) c.cheminn() : retourne le chemin du fichier :
La fonction d’espèce chemin : permet de connaître le lieu où se situe le tube en écriture ou en lecture. Ex. : voir ci-dessous Exemple complet n°2.
5) c.répertoire(texte) : retourne vrai si le fichier est un répertoire :
La fonction d’espèce répertoire : permet de connaître le répertoire où se situe le fichier enregistré, ou ouvert, avec son paramètre texte qui indique son chemin et son nom. Ex. : voir ci-dessous Exemple complet n°2.
6) c.nomfichiercomplet() : retourne le nom du fichier avec son chemin :
La fonction d’espèce monfichiercomplet : permet de connaître le nom complet du fichier enregistré, ou ouvert, avec son chemin. Ex. : voir ci-dessous Exemple complet n°2.
7) c.taille() : devrait retourner la taille du fichier :
La fonction d’espèce taille : devrait permettre de connaître la taille du fichier enregistré, ou ouvert. Mais il ne semble pas encore fonctionner correctement.
La fonction d’espèce chemin : permet de connaître le lieu où se situe le tube en écriture ou en lecture. Ex. : voir ci-dessous Exemple complet n°2.
5) c.répertoire(texte) : retourne vrai si le fichier est un répertoire :
La fonction d’espèce répertoire : permet de connaître le répertoire où se situe le fichier enregistré, ou ouvert, avec son paramètre texte qui indique son chemin et son nom. Ex. : voir ci-dessous Exemple complet n°2.
6) c.nomfichiercomplet() : retourne le nom du fichier avec son chemin :
La fonction d’espèce monfichiercomplet : permet de connaître le nom complet du fichier enregistré, ou ouvert, avec son chemin. Ex. : voir ci-dessous Exemple complet n°2.
7) c.taille() : devrait retourner la taille du fichier :
La fonction d’espèce taille : devrait permettre de connaître la taille du fichier enregistré, ou ouvert. Mais il ne semble pas encore fonctionner correctement.
Code:
Exemple taille : // exemple non fonctionnel.
c est un conduit
début
évoque c.ouvrir("d:/temp/fichier.txt")
affiche c.taille() // Il devrait alors affiche la taille du fichier.
évoque c.fermer()
/* Mais l’Atelier Linotte affiche le message d'erreur suivant :
« Ligne 5, Le nombre de paramètres est incorrect : ».
Toutefois, aucun type paramètre ne semble fonctionner. */
8 ) c.lireligne() : retourne une ligne du fichier :
La fonction d’espèce lireligne : semble uniquement retourner la 1er ligne de données du fichier ouvert.
Il serait peut-être utile de lui attribuer un attribut, afin de pouvoir sélectionner la ligne de son choix. Un attribut nombre permettrait de choisir la ligne de son choix ; tandis qu’un attribut texte permettrait de choisir les ligne comportant le « texte » en attribut.
La fonction d’espèce lireligne : semble uniquement retourner la 1er ligne de données du fichier ouvert.
Il serait peut-être utile de lui attribuer un attribut, afin de pouvoir sélectionner la ligne de son choix. Un attribut nombre permettrait de choisir la ligne de son choix ; tandis qu’un attribut texte permettrait de choisir les ligne comportant le « texte » en attribut.
Code:
Exemple lireligne :
c est un conduit
début
évoque c.sélectionneretouvrir()
affiche c.lireligne()
// Affiche uniquement la première ligne de données en lecture.
termine
9) c.lire() : retourne tous les caractères du fichier :
La fonction d’espèce lire : retourne tous les caractères, ou les données, du fichier ouvert.
Notez bien, que le début de la lecture est lu comme un espace vide, même sans espace.
La fonction d’espèce lire : retourne tous les caractères, ou les données, du fichier ouvert.
Notez bien, que le début de la lecture est lu comme un espace vide, même sans espace.
Code:
Exemple lire :
c est un conduit
Début
évoque c.sélectionneretouvrir()
affiche c.lire()
// Affiche toutes les données en lecture.
termine
10)c.nlire(nombre) : retourne les n caractères suivant du fichier :
La fonction d’espèce nlire : retourne un nombre déterminé de caractères suivant d'un fichier. Son paramètre est un nombre.
Attention : le début du fichier vaut un caractère vide, ainsi que la fin de chaque ligne et le retour à la ligne.
La fonction d’espèce nlire : retourne un nombre déterminé de caractères suivant d'un fichier. Son paramètre est un nombre.
Attention : le début du fichier vaut un caractère vide, ainsi que la fin de chaque ligne et le retour à la ligne.
Code:
Exemple nlire :
c est un conduit
début
évoque c.sélectionneretouvrir()
essaie lis
tant que vrai, affiche "10 caractères : " + c.nlire(10)
// tant qu’il y a des données, affiche les 10 caractères suivant du fichier
ferme
termine
11) c.chargecasiernombres(nombre) : charge en retour un certain nombre de ligne en caractère numérique, sans espace :
La fonction d’espèce chargecasiernombres : son paramètre est un nombre, il sert à indiquer le nombre de casier numérique à charger.
La fonction d’espèce chargecasiernombres assimile en quelque sorte le tube fichier à un casier, où chaque ligne est une case différente du dit casier.
Notez que, si une seule lettre ou un espace est inclus dans l’une des lignes sélectionnées, un message d’erreur s’affiche. Mais, si aucune lettre, ou aucun espace vide, n'apparaît alors le programme s'exécute sans problème, même si des lettres ou des espaces vides sont inclus dans les lignes suivantes non sélectionnées par le paramétrage.
La fonction d’espèce chargecasiernombres : son paramètre est un nombre, il sert à indiquer le nombre de casier numérique à charger.
La fonction d’espèce chargecasiernombres assimile en quelque sorte le tube fichier à un casier, où chaque ligne est une case différente du dit casier.
Notez que, si une seule lettre ou un espace est inclus dans l’une des lignes sélectionnées, un message d’erreur s’affiche. Mais, si aucune lettre, ou aucun espace vide, n'apparaît alors le programme s'exécute sans problème, même si des lettres ou des espaces vides sont inclus dans les lignes suivantes non sélectionnées par le paramétrage.
Code:
Exemple chargecasiernombres :
c est un conduit
début
c.sélectionneretouvrir() // Choisir un fichier composé uniquement de nombre.
affiche c.chargecasiernombres(2) // Affiche les nombres de la ligne 1 à la ligne 2.
/* Notez que, le paramètre indique non la ligne à charger, mais le nombre de ligne à charger.
Où le paramètre :
0 = ligne vide ;
1 = ligne 1 ;
2 = ligne 1 à ligne 2 ;
et ainsi de suite... */
termine
// résultat affiche : la ligne 1 sur la ligne 1
// + affiche : la ligne 2 sur la ligne 2
12) c.chargecasiertextes(nombre) : charge en retour un certain nombre de ligne :
La fonction d’espèce chargecasiertextes : son paramètre est un nombre, qui sert à indiquer le nombre de casier de texte à charger. La fonction d’espèce chargecasiertextes, de la même manière que précédemment, assimile le tube fichier à un casier, où chaque ligne est une case différente du dit casier.
Mais ici ces lignes peuvent être indifféremment composées de lettres, de nombres et d’espaces.
La fonction d’espèce chargecasiertextes : son paramètre est un nombre, qui sert à indiquer le nombre de casier de texte à charger. La fonction d’espèce chargecasiertextes, de la même manière que précédemment, assimile le tube fichier à un casier, où chaque ligne est une case différente du dit casier.
Mais ici ces lignes peuvent être indifféremment composées de lettres, de nombres et d’espaces.
Code:
Exemple chargecasiertextes :
c est un conduit
début
c.sélectionneretouvrir() // Choisir un fichier.
affiche c.chargecasiertextes(3)
// Affiche toutes les données de la ligne 1 à la ligne 3.
termine
/* Notez que, le paramètre indique non la ligne à charger, mais le nombre de ligne à charger.
Où le paramètre :
0 = ligne vide ;
1 = ligne 1 ;
2 = ligne 1 à ligne 2 ;
3 = ligne 1 à ligne 3 ;
etc... */
III/ Les fonctions d'espèce Conduit en écriture :
1) c.enregistrer(texte) : ouvre le fichier destiné à l'enregistrement :
La fonction d’espèce enregistrer : ouvre le fichier destiné à l'enregistrement, son paramètre est un texte qui décrit le chemin où le fichier sera enregistré :
1) c.enregistrer(texte) : ouvre le fichier destiné à l'enregistrement :
La fonction d’espèce enregistrer : ouvre le fichier destiné à l'enregistrement, son paramètre est un texte qui décrit le chemin où le fichier sera enregistré :
Code:
Exemple enregistrer :
c est un conduit
début
évoque c.enregistrer("d:/temp/linotte.txt")
// Il enregistre un nouveau fichier « linotte.txt », ou l’écrase s’il existait avant.
évoque c.écrire("Voici un texte écrit depuis le langage Linotte !")
// Il écrit les données entre "" dans le fichier « linotte.txt », ou il les écrase.
évoque c.fermer()
// Il ferme le tube pour permettre la sauvegarde des données.
termine
2)c.sélectionneretenregistrer() : affiche le sélecteur de fichiers et ouvre le fichier sélectionné en écriture :
La fonction d’espèce sélectionneretenregistrer : affiche le sélecteur de fichiers du système d’exploitation et ouvre le fichier sélectionné en écriture :
La fonction d’espèce sélectionneretenregistrer : affiche le sélecteur de fichiers du système d’exploitation et ouvre le fichier sélectionné en écriture :
Code:
Exemple sélectionetenregistrer :
c est un conduit
début
affiche "Sélectionnez un nouveau fichier que je vais créer"
évoque c.sélectionneretenregistrer() // Ouvre un fichier en écriture, tout en le créant
évoque c.écrire("Voici un texte écrit depuis le langage Linotte !") // Écris le texte
évoque c.fermer() // Ferme le tube ouvert en écriture
termine
3) c.retourchariot() : retourne le retour chariot du système d'exploitation :
La fonction d’espèce retourchariot : permet de passer à la ligne suivante dans le texte du fichier. Elle peut s’utiliser comme attribut de la fonction d’espèce c.ecrire(n), avec n valant c.retourchariot().
Notez bien que, pour aller à la ligne, il ne faut pas écrire c.ecrire("n") => écrire "n" à la suite des données présentes. En outre, pour éviter toute confusion, on écrira par convention c.ecrire(ligne).
Ex. : voir ci-dessous Exemple complet n°2.
4) c.écrire(texte) : écrit la valeur de l'acteur dans le fichier :
La fonction d’espèce écrire : écrit la valeur de l’acteur dans le fichier, son paramètre est le texte qui sera écrit.
Notez bien que, pour aller à la ligne, il ne faut pas écrire c.ecrire("n") => écrire "n" à la suite des données présentes. En outre, pour éviter toute confusion, on écrira par convention c.ecrire(ligne).
Ex. : voir ci-dessous Exemple complet n°2.
4) c.écrire(texte) : écrit la valeur de l'acteur dans le fichier :
La fonction d’espèce écrire : écrit la valeur de l’acteur dans le fichier, son paramètre est le texte qui sera écrit.
Code:
Exemple écrire :
c est un conduit
a est un texte valant "Bonjour, "
b est un texte valant "Le monde ! "
n est un texte valant 777
début
affiche "Sélectionnez un nouveau fichier que je vais créer"
évoque c.sélectionneretenregistrer() // Ouvre le fichier en écriture
évoque c.écrire(a) // Écrit "Bonjour, " dans le fichier
évoque c.écrire(b) // Écrit "Le monde ! " à la suite dans le fichier
évoque c.écrire(n) // Écrit "777" à la suite dans le fichier.
évoque c.fermer() // Ferme le tube ouvert en écriture
termine
/* résultat => "Bonjour, Le monde ! 777" */
IV/ Annexe : Exemple complet :
• Exemple complet n°1 :
o fonction d’espèce c.lire(texte) ;
o fonction d’espèce c.sélectionneretouvrir().
Code:
// Boite à texte : c’est la base du traitement de texte :
globale
form est un formulaire, titre vaut "La boite à texte", largeur vaut 400,
hauteur vaut 260, visible vaut "oui", x vaut 100, y vaut 100
boite est un boite,x vaut 30, y vaut 30, largeur vaut 200, hauteur vaut 100
b1 est un menubouton, texte vaut "Afficher le texte dans le tableau"
l1 est un étiquette, texte vaut "", x vaut 30, y vaut 200
b2 est un menubouton, texte vaut "Ouvrir un fichier"
c est un conduit
Boite à texte :
début
Ajoute boite & b1 & b2 & l1 dans form
Fais réagir b1 à "clic souris" pour valeur
Fais réagir b2 à "clic souris" pour ouvrir
tant que 1 != 2, lis
temporise
ferme
Valeur :
*b est un menubouton
début
texte@boite !
Reviens
Ouvrir :
*b est un menubouton
§retour est un drapeau
début
retour vaut c.sélectionneretouvrir()
si retour, lis
texte@boite vaut c.lire()
// N.B. : que l’attribut implicite de c.lire() est le texte@boite
ferme
Reviens
• Exemple complet n°2 :
o fonction d’espèce c.chemin() ;
o fonction d’espèce c.écrire(texte)
o fonction d’espèce c.enregistrer(texte) ;
o fonction d’espèce c.fermer() ;
o fonction d’espèce c.fichierexiste(texte) ;
o fonction d’espèce c.nomfichiercomplet() ;
o fonction d’espèce c.ouvrir(texte)
o fonction d’espèce c.retourchariot() ;
o fonction d’espèce c.sélectionneretenregistrer().
Code:
Exemple Enregistrer_sous :
c est un conduit
chemin_sauvegarde est un texte
ligne valant c.retourchariot() // variante : ligne valant chr 13 + chr 10
début
évoque c.sélectionneretenregistrer()
affiche "répertoire + nom du fichier : " + c.nomfichiercomplet()
affiche "répertoire : " + c.chemin()
évoque c.fermer()
chemin_sauvegarde vaut c.nomfichiercomplet()
si c.fichierexiste(chemin_sauvegarde), lis
"On sauvegarde !" !
évoque c.enregistrer(chemin_sauvegarde)
évoque c.écrire("ça marche")
évoque c.écrire(ligne) // Saut de ligne
évoque c.écrire("l'autre ligne")
évoque c.écrire(ligne) // Saut de ligne
évoque c.écrire("encore une ligne !!!")
évoque c.fermer()
//on va vérifier les informations sauvegardées :
évoque c.ouvrir(chemin_sauvegarde)
affiche "1 : " + c.lireligne()
affiche "2 : " + c.lireligne()
affiche "3 : " + c.lireligne()
évoque c.fermer()
ferme
N.B. : Je me permets de faire référence, tout le long de cet article, à la notion de « fonction d’espèce », qui est utilisée en lieu et place à la notion de « méthode fonctionnelle ».
La méthode fonctionnelle peut se définir, comme étant la méthode par laquelle on appelle une fonction pour l’attacher à une espèce, ou une variable. En ce sens, cette définition ne me pose pas de problème, mais son utilisation en terme rédactionnelle me semble trop théorique.
C’est pourquoi, je préfère faire référence à la « méthode fonctionnelle » par son résultat concret, sous la terminologie de « fonction d’espèce » (même si elle peut se décliner en fonction de variable, notamment avec la variable Texte).
Ainsi utilisé, la notion de « fonction d’espèce » me paraît plus parlante à l’esprit, et ainsi explicite mieux la notion de « méthode fonctionnelle ».
La méthode fonctionnelle peut se définir, comme étant la méthode par laquelle on appelle une fonction pour l’attacher à une espèce, ou une variable. En ce sens, cette définition ne me pose pas de problème, mais son utilisation en terme rédactionnelle me semble trop théorique.
C’est pourquoi, je préfère faire référence à la « méthode fonctionnelle » par son résultat concret, sous la terminologie de « fonction d’espèce » (même si elle peut se décliner en fonction de variable, notamment avec la variable Texte).
Ainsi utilisé, la notion de « fonction d’espèce » me paraît plus parlante à l’esprit, et ainsi explicite mieux la notion de « méthode fonctionnelle ».
Source : Observation des exemples testés sur l’Atelier Linotte ; le verbe ouvrir du glossaire Linotte ; et http://langagelinotte.free.fr/wiki/index.php?title=Conduit (syntaxe 1.0).
P.S. : Quelqu’un pourrait-il m’expliquer le fonctionnement de la ligne de code suivante : « ligne valant chr 13 + chr 10 » (situé dans l’Exemple complet n°2, situé dans l’Annexe).
Je vous en remercie d’avance.
(la réponse fut donnée par Wam plus bas)
Dernière édition par XP Rico le Dim 18 Juin - 19:42, édité 4 fois