Programmer avec le langage Linotte
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Programmer avec le langage LinotteConnexion

Besoin d'un conseil sur la programmation en Linotte ?

Le Deal du moment : -29%
DYSON V8 Origin – Aspirateur balai sans fil
Voir le deal
269.99 €

descriptionGlossaire : (Espèce) Conduit (tube) EmptyGlossaire : (Espèce) Conduit (tube)

more_horiz
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).

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. Exclamation

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.

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.

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.

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.

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.

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.

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é :

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 :

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.

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. :  Exclamation 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 ».
Exclamation


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).  Exclamation

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

descriptionGlossaire : (Espèce) Conduit (tube) EmptyRE: Glossaire : (Espèce) Conduit (tube) :

more_horiz
Bonjour XPRico,

Félicitation pour cet article !

Le vocabulaire à employer dans le Linotte est un sujet délicat.

En effet, le Linotte doit-il posséder son propre vocabulaire, participant ainsi à son originalité et facilitant sa propre compréhension ?
Le Linotte utilisant des mots simples, voir imager, pour rendre la programmation accessible à tous ?

Ou bien doit-il utiliser un vocabulaire plus populaire, utilisé dans les autres langages de programmation, le Linotte se voulant alors comme une introduction à l'apprentissage de la programmation en général ?
Un jeune développeur pouvant alors s'essayer à un autre langage en connaissant déjà la signification des termes techniques ?
Et un développeur plus expérimenté, curieux de découvrir le Linotte, retrouvant ainsi un vocabulaire familier, et constatant le caractère plus "sérieux" du langage Linotte ?

Sans doute un peu des deux...

Pour ta question en PS :
Sous windows, le retour à la ligne correspond à cette séquence de caractères : \r\n
En ASCII, c'est le caractère 13 suivi du caractère 10.
Ces symboles sont alors traduits en Linotte : chr 13 + chr 10 (chr = chariot)

descriptionGlossaire : (Espèce) Conduit (tube) EmptyRE: Glossaire : (Espèce) Conduit (tube) :

more_horiz
Moi, j'en profite pour corriger les bogues remontés :

- j'ai testé l'encodage en lecture, ça semble fonctionner. Peux-tu proposer un exemple qui démontre le problème ?
- j'ai corrigé la méthode taille. il y avait bien un bogue de mon côté.

J'ai ajouté un nouveau sous-forum : "Amélioration de la documentation"
J'ai regroupé les messages de XP Rico et celui de Wam lié à sa documentation.

descriptionGlossaire : (Espèce) Conduit (tube) EmptyRE: Glossaire : (Espèce) Conduit (tube) :

more_horiz
Voici un exemple de ce que je veux dire.

[php]
Exemple encodage en lecture : //exemple non fonctionnel
c est un conduit
Début
évoque c.encodage("UTF-16") // Encodage en écriture UTH-16
évoque c.enregistrer("d:/temp/linotte.txt")
évoque c.écrire("Voici un texte écrit depuis le langage Linotte !")
évoque c.fermer()

évoque c.encodage("UTF-8") // On tente de modifier l'encodage en lecture
explore "ouvrir D:/temp/linotte.txt"
// ouverture du fichier "linotte.txt" sous encodage UTF-8,
// mais on observe sur notepad++ que l'encodage affiché est toujours UTF-16

/* Mais au préalable, on aura modifier les propriétés du fichier "linotte.txt"
afin qu’il s’ouvre directement avec Notepad++.
Pour ce faire :
- faire un « clic droit » sur le fichier,
- puis appuyer sur « propriété »,
- puis appuyer sur le bouton « modifier » de la fenêtre de propriété,
- et enfin sélectionner le programme Notepad++. */
[/php]

PS. : Il arrive que l'Atelier Linotte n'arrive pas à initialiser la lecture de certain livre que l'on tente de copier/coller depuis le forum. Comme avec le code "Ouvrir un fichier avec lecture.liv" dans le "Glossaire du verbe Ouvrir".

descriptionGlossaire : (Espèce) Conduit (tube) EmptyRE: Glossaire : (Espèce) Conduit (tube) :

more_horiz
L'espèce Conduit ne fait pas de transformation d'encodage.

Si tu as écrit dans ton fichier en UTF-16, il faut bien lui indiquer au moment de la lecture que c'est de l''UTF-16.
Si tu lui indiques UTF-8, la lecture va être faussée car il ne va pas comprendre tous les caractères.

Choisir l'encodage, c'est peu choisir son alphabet.

Par défaut, le conduit fonctionne en UTF-8.

descriptionGlossaire : (Espèce) Conduit (tube) EmptyRe: Glossaire : (Espèce) Conduit (tube)

more_horiz
privacy_tip Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
power_settings_newSe connecter pour répondre