MEMORISER_VALEUR

Messages postés
1220
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
- - Dernière réponse : Mayzz
Messages postés
2859
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
- 26 mai 2010 à 14:04
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51785-memoriser-valeur

Adn56
Messages postés
1220
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1 -
Salut, passe directement tes lignes à écrire c'est plus simple non ?
Private Sub Form1_FormClosing
Dim monStreamWriter As StreamWriter = New StreamWriter(fichier)
31. monStreamWriter.WriteLine(CheckBox1.Checked.tostring )
32. monStreamWriter.WriteLine(RadioButton1.Checked.tostring)
33. monStreamWriter.WriteLine(TextBox1.Text)
34. monStreamWriter.WriteLine(comboBox1.Text)
36. monStreamWriter.Close()
end sub
pense à tester, aussi, que fichier n'est pas vide et que le chemin est toujours valide ;)
pour ton clear() essaye de le remplacer par un truc comme ça, cela marche avec les streams
myFileStream = File.Create(fichier) ' création d'un nouveau fichier à chaque sauvegarde

bonne prog ++
cs_Le Pivert
Messages postés
6351
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 novembre 2019
88 -
Bonjour ADN56,
Je te remercie de m'avoir éclairé sur les parties du code qui laissées à désirer. Cela le raccourci et il n'y a pas de lignes inutiles.Bonne idée de créer un nouveau fichier à chaque fermeture.
@+ Le Pivert
Adn56
Messages postés
1220
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1 -
salut, de rien. Dans le cas de données plus volumineuse et/ou plus complexe il est préférable de sérialiser en binaire ou xml. voici un exemple en binaire.
1-création d'une classe sérialisable qui reprend tes valeurs
2-sub de savegarde
3- sub de lecture, tu le vois c'est pas plus mal comme méthode et surtout plus souple.

Option Strict On
Imports System
Imports System.IO
Imports System.Runtime.Serialization.Formatters.Binary

<Serializable()> Public Class config
' propriétées
Public TXTtextbox, TXTcombobox As String
Public CHKbox, CHKradio as boolean
'etc....

'----------------------------------------------------------------------
' Sub qui sérialise en binaire dans le fichier passé en paramétre
'----------------------------------------------------------------------
Public Sub save(ByVal fichier As String)
If fichier = String.Empty Then Exit Sub 'quit la sub si aucun fichier ouvert avant la fermeture.
Dim myFileStream As Stream = Nothing

Try
myFileStream = File.Create(fichier) ' création d'un nouveau fichier à chaque sauvegarde
Dim serializer As New BinaryFormatter
serializer.Serialize(myFileStream, Me)
myFileStream.Close()

Catch e As DirectoryNotFoundException

Affiche_erreur("Répertoire introuvable, vérifier la présence du disque amovible si vous en utilisez un", e.Message)

Catch e As FileNotFoundException ' n'arrive jamais car file create à chaque appel de SAve

Affiche_erreur("Fichier introuvable, vérifier la présence du disque amovible si vous en utilisez un", e.Message)

'Catch e As FileLoadException
Catch e As Exception

Affiche_erreur("erreur d'accés au fichier, Ex : Lecture seul", e.Message)

Finally

If Not myFileStream Is Nothing Then myFileStream.Close()
End Try

End Sub

'----------------------------------------------------------------------
' fonction qui lit le fichier sérialisé
'----------------------------------------------------------------------
Public Function load(ByVal fichier As String) As Boolean
Dim myFileStream As Stream = Nothing

Try
myFileStream = File.OpenRead(fichier)
Dim deserializer As New BinaryFormatter()
Dim lecture As New config
lecture = CType(deserializer.Deserialize(myFileStream), config)
myFileStream.Close()

With Me
.TXTtextbox = lecture.TXTtextbox
.TXTcombobox = lecture.TXTcombobox
.CHKbox = lecture.CHKbox
.CHKradio = lecture.CHKradio
End With

Return True

Catch e As Exception

Affiche_erreur("erreur d'accés au fichier", e.Message)
Return False

Finally

If Not myFileStream Is Nothing Then myFileStream.Close()
End Try
End Function
end class

dans ta form tu déclare une instance de cette class et tu appel les méthodes save et load pour retrouver tes valeurs. il te suffit dés lors de les réatrribuer à tes controls.

dim cetteconfig as new config
form load
cetteconfig.load(fichier)
textbox1.text = cetteconfig.TXTbox
Checkbox1.checked = cetteconfig.CHKbox (c'est bien un boolean)


form close
cetteconfig.save(fichier)
Adn56
Messages postés
1220
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1 -
Pour finir sur ce sujet, dans ton cas, la meilleur méthode reste encore de passer par le fichier My.setting. Cela est natif dans VS et trés simple d'utilisation.
kenavo (sous la canicule)
Mayzz
Messages postés
2859
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
17 -
Oui en effet ADN les paramètres d'applications sont la pour ca, je ne vois pas l'utilité d'une telle source...

De plus les valeurs sont enregistés au format texte brut donc bien chiant pour la récup comme le montre ce bout de code :

If ligne_check = "True" Then
CheckBox1.Checked = True
Else
CheckBox1.Checked = False
End If

Pour enregistrer des valeurs dans un fichier il y a aussi la sérailisation en .Net
cs_aus3004
Messages postés
319
Date d'inscription
jeudi 1 avril 2010
Statut
Membre
Dernière intervention
16 mars 2011
1 -
Merci Le Pivert !
Adn56
Messages postés
1220
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1 -
aus3004 je ne sais pas quoi tu note ! mais tu as pas lire nos comms !
je rééquilibre !
cs_aus3004
Messages postés
319
Date d'inscription
jeudi 1 avril 2010
Statut
Membre
Dernière intervention
16 mars 2011
1 -
Ce code m'a servit et il fonctionne très bien, j'ai pas mis 10 pour ne pas faire cliché.
Après, si ta des problèmes, mets ta propre note sans essayer de "rééquilibrer" car tu pense que mon jugement est faux.
Mayzz
Messages postés
2859
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
17 -
Chacun apporte sa note, c'est la règle, le "noteur" est seul juge, après ca dépend des critères, il y a l'utilité du code, la technique employé, la propreté du code, son optimisation, les commentaires, le graphisme et tant d'autres critères sur lesquels on peut noter... de toute façon une note ne veut pas dire grand chose à part l'opinion globale des membres sur la source.

Donc je trouve un peu tiré par les cheveux d'aller dire à aus3004 de regarder nos com's avant de noter, ce n'est pas très correcte, en même temps noter 9 sans expliquer pourquoi avec plusieurs commentaires négatif au dessus laisse penser que la note a pour but la contradiction de la je peux comprendre la réaction d'ADN.

Perso, je ne note jamais en dessous de 5 une source, je pense que la note doit avant tout encourager les gens et ne pas les descendre, sauf dans des cas précis ou les auteurs déposent des sources insolentes, a la limite du banissement par les admins, je note 1 pour faire comprendre à l'auteur que ce genre de source n'est pas la bienvenue, même si le contenu lui est bon.
Adn56
Messages postés
1220
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1 -
Pourquoi je rééquilibre :
Perso je ne note plus, mais il faut comprendre que les notes servent à classer les sources, si je vois un 9/10 je me précipite dessus et là, ben je serrais déçu. Je ne trouve pas dans ce code un exemple à suivre pour les débutants, c'est dans ce sens aussi que je te disais de lire nos comms (enfin surtout les exemples qui sont une façon beaucoup plus souple de sauvegarder des données, et qui viennent justement d'exemple à suivre sur ce forum)
Ce code t'a servi ?
Trés bien, mais comment fera tu le jour ou tu voudras enregistrer un tableau dont tu ne connais pas la longueur, ou une classe, un objet ?
A mon avis autant apprendre directement une meilleur façon de faire, ce que Le Pivert à trés bien compris.
bonne fin de WK.
piergel
Messages postés
51
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
18 août 2009
-
Je trouve ça absolument immoral et prétentieux de noter de façon à "rééquilibrer", quelque soit la raison et même si on peut objectivement contester une note (comme je considère aussi que c'est le cas ici). Je l'ai subit par le passé et je n'ai pas trop apprécié. Je trouve que les admins devraient condamner ce genre de pratique. Aussi, je note 10 pour non pas rééquilibrer mais annuler le rééquilibrage ! :) (ma note réelle : on va dire 5...)
cs_Le Pivert
Messages postés
6351
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 novembre 2019
88 -
Bonjour à tous,
Je voudrais arrêter cette polémique. J'apprécie les conseils d'ADN56 et je comprends sa réaction. Cette source est faite par un débutant pour des débutants. Comme je l'ai indiqué c'est pour voir la façon de créer,d'écrire et lire dans un fichier texte.Je me rends compte qu'elle n'a pas une très grande valeur en vue de l'exemple que nous a soumis ADN56, mais maleureusement beaucoup de débutants ne comprennent pas cet exemple. Il y a plusieurs étapes pour arriver au niveau d'ADN56.
@+ sans rancune
Le Pivert
Adn56
Messages postés
1220
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1 -
Dieu sait pourtant que je suis débutant, mais bon...
T'inquiétes pivert tu as toute ma considération et c'est de bon coeur que je suis dispo pour détailler ou commenter les serialisation et/ou les My.setting
bonne prog et @++
cs_Le Pivert
Messages postés
6351
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 novembre 2019
88 -
Suite aux commentaires de ADN56 et de MAYZZ
J'ai fait des recherches et me suis aperçu qu'il y avait dans les propriétés des controles une propriété nommée:(Application setting) qui mémorise automatiquement sans aucun code. Comme quoi on ne sais pas tout! Voici le lien pour explication:
http://plasserre.developpez.com/cours/vb-net/?page=windows-forms4#LX-N-6
Donc je trouverais normal que les admins désactive cette source qui n'a pas lieu d'être.
Excusez-moi pour cette erreur
@+ Le Pivert
Mayzz
Messages postés
2859
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
17 -
En effet Le Pivert, le binding est notamment utiliser pour lier un contrôle à une source de données.

Pour ce qui est de ta source, il faudrait juste la renommer, elle peut quand même démontrer l'utilisation de IO.StreamReader et IO.StreamWriter (si une telle source n'existe pas déjà ici), c'est simplement qu'elle n'est pas employé à bon escient.