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 ?

-23%
Le deal à ne pas rater :
(Black Friday) Apple watch Apple SE GPS 44mm (plusieurs coloris)
199 € 259 €
Voir le deal

descriptionCréer un menu "Enregistrer" EmptyCréer un menu "Enregistrer"

more_horiz
J'enregistre des données dans un fichier grâce à la méthode sélectionneretenregistrer()

Pour cela, l'utilisateur doit cliquer sur un menu "Enregistrer sous".

J'aimerais ajouter un menu "Enregistrer" qui sauvegardera les données sans avoir besoin de passer par le sélectionneur de fichiers.

Pour cela, j'ai tenté d'enregistrer le chemin d'accès au fichier en utilisant la méthode chemin().
Sans succès car "aucun fichier est ouvert".

Comment faire pour récupérer le chemin d'accès au fichier choisit par l'utilisateur grâce à la méthode sélectionneretenregistrer() ?

descriptionCréer un menu "Enregistrer" EmptyRE: Créer un menu "Enregistrer"

more_horiz
corrigé, il faut tu retélécharges la nouvelle version beta.
(en cours de construction, elle devrait arriver d'ici 10 minutes)

descriptionCréer un menu "Enregistrer" EmptyRE: Créer un menu "Enregistrer"

more_horiz
Merci.
Pourrais-tu me donner un exemple d'utilisation de la méthode fichierexiste ?
Car je n'arrive pas à l'utiliser.

descriptionCréer un menu "Enregistrer" EmptyRE: Créer un menu "Enregistrer"

more_horiz
Il me faudrait également un exemple pour la méthode lireligne.
Car j'ai essayé ceci, sans succès :

Code:


Ouvrir :

Rôles :

c :
:
conduit
mémo :
:
texte
Actions :

évoque c.
sélectionneretouvrir()
mémo1 vaut c.
lireligne()


Pour la méthode fichierexiste, j'ai essayé ceci, également sans succès :

Code:


Enregistrer_sous :

Rôles :

c :
:
conduit
chemin_sauvegarde est un texte
Actions :

évoque c.
sélectionneretenregistrer()
évoque c.
fermer()

tu concatènes c.
chemin() + c.
nomfichiercomplet() dans chemin_sauvegarde
Si c.
fichierexiste(chemin_sauvegarde) alors lis
évoque c.
enregistrer(chemin_sauvegarde)
ferme

descriptionCréer un menu "Enregistrer" EmptyRE: Créer un menu "Enregistrer"

more_horiz
Ce soir, quand j'aurai déposé une nouvelle beta, cet exemple fonctionnera !

[php]
Bogue Wan Conduit :

Enregistrer_sous :
Rôles :
c :: conduit
chemin_sauvegarde :: texte
ligne <
- c.retourchariot()
Actions :
é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) alors lis
"on sauvegarde !" !
évoque c.enregistrer(chemin_sauvegarde)
évoque c.écrire("ça marche")
évoque c.écrire(ligne)
évoque c.écrire("l'autre ligne")
évoque c.écrire(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
[/php]

descriptionCréer un menu "Enregistrer" EmptyRE: Créer un menu "Enregistrer"

more_horiz
Excellent ! Merci.
Pourra-t-on faire correspondre chaque ligne à un acteur, à la manière du tube_fichier_lecture, comme ceci par exemple :

Code:


mémo1 vaut c.
lireligne()

Car je voudrais remettre chaque valeurs enregistrées dans les acteurs correspondants.

descriptionCréer un menu "Enregistrer" EmptyRE: Créer un menu "Enregistrer"

more_horiz
J'ai toujours une erreur avec fichierexiste().
Je veux faire en sorte que si l'utilisateur clique sur le menu "enregistrer", si il a auparavant "enregistrer sous" son document, ce dernier s'enregistre automatiquement.
Sinon, le sélectionneur de fichiers s'ouvre.
Voici mon code :

Code:


Si c.
fichierexiste(chemin_sauvegarde) alors lis
("Si le chemin d'accès est valide, on enregistre par dessus la sauvegarde précédente")
évoque c.
enregistrer(chemin_sauvegarde)
ferme
Sinon, lis
("Si le chemin d'accès est invalide, on ouvre le sélectionneur de fichiers")
évoque c.
sélectionneretenregistrer()
ferme


Hors, si chemin_sauvegarde est vide, il considère quand même que le fichier existe.
Voici le message d'erreur :
La valeur est incorrecte : Impossible d'enregistrer le fichier (K:\Avatar\Editeur de cartes (Accès refusé)) : /K:/Avatar/Editeur de cartes/
Ceci est le chemin d'accès de mon livre.

descriptionCréer un menu "Enregistrer" EmptyRE: Créer un menu "Enregistrer"

more_horiz
Bonjour Wam,

C'est pourtant ce que fait exactement l'exemple que j'ai donné précédemment ?

Peux-tu me donner un cours exemple de 20 lignes maxi qui permet de reproduire le problème ?

Merci.

descriptionCréer un menu "Enregistrer" EmptyRE: Créer un menu "Enregistrer"

more_horiz

Code:


Grands rôles :

menu_enregistrer est un drapeau

Enregistrer :

Rôles :

Actions :

menu_enregistrer = vrai
Va vers Enregistrer_sous

Enregistrer_sous :

Rôles :

c :
:
conduit
chemin_sauvegarde est un texte
ligne <
- c.
retourchariot()
Actions :

("Si l'utilisateur à cliqué sur le menu "Enregistrer_sous", on ouvre le sélectionneur de fichiers")
Si menu_enregistrer == faux alors lis
évoque c.
sélectionneretenregistrer()
évoque c.
fermer()
chemin_sauvegarde vaut c.
nomfichiercomplet()
ferme

Si c.
fichierexiste(chemin_sauvegarde) alors lis
("Si le chemin d'accès est valide, on enregistre par dessus la sauvegarde précédente")
évoque c.
enregistrer(chemin_sauvegarde)
ferme
Sinon, lis
("Si le chemin d'accès est invalide, on ouvre le sélectionneur de fichiers")
évoque c.
sélectionneretenregistrer()
ferme

évoque c.
écrire("ça marche")
évoque c.
écrire(ligne)
évoque c.
écrire("l'autre ligne")
évoque c.
écrire(ligne)
évoque c.
écrire("encore une ligne !!!")
évoque c.
fermer()


évoque c.
fermer()
menu_enregistrer = faux
Reviens


Si je clique sur mon menu "Enregistrer", le drapeau menu_enregistrer est vrai et chemin_sauvegarde est vide.
Hors, il considère quand même que le fichier existe. Il évoque donc c.enregistrer(chemin_sauvegarde)

Voici le message d'erreur :
La valeur est incorrecte : Impossible d'enregistrer le fichier (K:\Avatar\Editeur de cartes (Accès refusé)) : /K:/Avatar/Editeur de cartes/
Ceci est le chemin d'accès de mon livre.

descriptionCréer un menu "Enregistrer" EmptyRE: Créer un menu "Enregistrer"

more_horiz
Je viens de comprendre....

Quand tu appelles la première fois "fichierexiste", Linotte va essayer de construire le chemin d'accès à ton fichier.
Il va notamment ajouté le répertoire courant :
"K:\Avatar\Editeur de cartes" et concaténé la valeur de fichier stockée dans la variable "chemin_sauvegarde"

Mais comme cette variable est vide au début de ton livre, il va tout simplement vérifier la présence du fichier "K:\Avatar\Editeur de cartes".

Ce fichier est un répertoire... et il existe ! donc ça retourne vrai !

Je vais rajouter une nouvelle fonction pour vérifier si un fichier est un répertoire ou pas.

Cpc

descriptionCréer un menu "Enregistrer" EmptyRE: Créer un menu "Enregistrer"

more_horiz
Cet exemple fonctionnera ce soir :

[php]
Bogue wan :
Grands rôles :
menu_enregistrer est un drapeau

Enregistrer :
Rôles :
Actions :
menu_enregistrer = vrai
Va vers Enregistrer_sous

Enregistrer_sous :
Rôles :
c :: conduit
chemin_sauvegarde est un texte
ligne <
- c.retourchariot()
Actions :
affiche "chemin : " + chemin_sauvegarde
("Si l'utilisateur à cliqué sur le menu "Enregistrer_sous", on ouvre le sélectionneur de fichiers")
Si menu_enregistrer == faux alors lis
évoque c.sélectionneretenregistrer()
évoque c.fermer()
chemin_sauvegarde vaut c.nomfichiercomplet()
ferme
Si (c.fichierexiste(chemin_sauvegarde)) et (non(c.répertoire(chemin_sauvegarde))) alors lis
("Si le chemin d'accès est valide, on enregistre par dessus la sauvegarde précédente")
évoque c.enregistrer(chemin_sauvegarde)
ferme
Sinon, lis
("Si le chemin d'accès est invalide, on ouvre le sélectionneur de fichiers")
évoque c.sélectionneretenregistrer()
ferme
chemin_sauvegarde vaut c.nomfichiercomplet()
évoque c.écrire("ça marche")
évoque c.écrire(ligne)
évoque c.écrire("l'autre ligne")
évoque c.écrire(ligne)
évoque c.écrire("encore une ligne !!!")
évoque c.fermer()
menu_enregistrer = faux
Reviens
[/php]

descriptionCréer un menu "Enregistrer" EmptyRE: Créer un menu "Enregistrer"

more_horiz
Excellent, sa fonctionne !
Merci !

Il me reste la fonction "ouvrir" à travailler.

Voici ma sauvegarde :
48
32
32

Pourrais-t-on faire ceci :

[php]
Ouvrir :
Rôles :
c :: conduit
mémo1 & mémo2 & mémo3 :: nombre
Actions :
évoque c.sélectionneretouvrir()
mémo1 vaut c.lireligne()
mémo2 vaut c.lireligne()
mémo3 vaut c.lireligne()
[/php]

Car pour l'instant, je peux enregistrer mes données mais je ne peux pas les utiliser :/

En fait, mémo1 vaut c.lireligne() fonctionne si mémo1 est un texte.
Je suis donc obligé de le convertir en nombre après.
Se serait possible que c.lireligne() fonctionne aussi avec les nombres ?

descriptionCréer un menu "Enregistrer" EmptyRe: Créer un menu "Enregistrer"

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