Enregistrement de boolean dans un fichier [Résolu]

Adn56
Messages postés
1220
Date d'inscription
jeudi 24 mai 2007
Dernière intervention
28 septembre 2013
- 25 sept. 2007 à 16:54 - Dernière réponse : Adn56
Messages postés
1220
Date d'inscription
jeudi 24 mai 2007
Dernière intervention
28 septembre 2013
- 26 sept. 2007 à 13:42
Bonjours à vous. toujours aussi débutant -_-' je cherche à enregistrer une série de boolean dans un fichier pour réutilisation. J'ai tout d'abord créer un fichier INI qui inscrit à la suite les 800 valeurs true or false des 20 programmes (soit un fichier ini de 16000 lignes O_o) donc pas top niveau temps de réponses à la lecture.
Ensuite j'ai utilisé le code de NIX :
Public
Sub TableauDeByteVersFicher(
ByVal CheminFichier 
As
String, 
ByVal TableauDeByte() 
As
Byte)

Dim MonFileStream 
As
New System.IO.FileStream(CheminFichier, System.IO.FileMode.Create)MonFileStream.Write(TableauDeByte, 0, TableauDeByte.Length - 1)

MonFileStream.Close()

End
Sub

Public
Function FichierVersTableauDeByte(
ByVal CheminFichier 
As
String) 
As
Byte()

Dim MonFichier 
As
New System.IO.FileInfo(CheminFichier)

Dim MonFileStream 
As System.IO.FileStream = MonFichier.OpenRead()

Dim TableauDeBytes(MonFileStream.Length) 
As
Byte

' On charge le fichier dans un tableau de byteMonFileStream.Read(TableauDeBytes, 0, MonFileStream.Length)

' On ferme le streamMonFileStream.Close()

Return TableauDeBytes

End
Function

Ce qui fonctionne bien mieux, la question est comment inscrire des booleans et non pas des bytes ?
Est-ce possible au moins ? j'ai trouvé dans l'aide l'instruction binaryreader et binarywriter, mais j'ai pas tout pigé de l'exemple -_°

Autre question en rapport avec celle ci, Où et que dois-je mettre pour utiliser les system IO :imports System.IO ? etc.....

Merci pour vos réponses, newbee votre, amicalement @dn

[scroll]merci à ceux qui clic ICI  ^.^/scroll
http://adn56.free.fr/
[scroll][URL=http://adn56.bbfr.net]Mon f
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Charles Racaud
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Dernière intervention
9 avril 2017
- 25 sept. 2007 à 17:13
3
Merci
Salut,

Il suffit de parcourir ton tableau et d'inscrire 0 ou 1 suivant la valeur.

__________
Kenji
(

Merci Charles Racaud 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de Charles Racaud
Meilleure réponse
Charles Racaud
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Dernière intervention
9 avril 2017
- 25 sept. 2007 à 18:21
3
Merci
Oui, il faut bien sur écrire chaque groupe de 8 boolean dans un byte. (J'avais oublier de le préciser)
Public Function BooleansToByteArray(ByRef tBool() As Boolean) As Byte()
  Dim BLength As Integer = CInt(System.Math.Ceiling(tBool.Length / 8))
  Dim tB() As Byte
  tB = CType(System.Array.CreateInstance(GetType(Byte), BLength), Byte())
  Dim iB As Integer = 0
  For iBool As Integer = 0 To tBool.Length - 1 Step 8
    Dim B As Byte = 0
    For i As Integer = 0 To 7
      If iBool + i < tBool.Length Then B += CByte(System.Math.Abs(CInt(tBool(iBool + i))) * _
        CInt(System.Math.Pow(2, i)))
    Next i
    tB(iB) = B
    iB += 1
  Next iBool
  Return tB
End Function

Public Sub TableauDeByteVersFicher(ByVal FileName As String, ByRef TableauDeByte() As Byte)
  Using Sr As New System.IO.FileStream(FileName, System.IO.FileMode.Create)
    Sr.Write(TableauDeByte, 0, TableauDeByte.Length)
  End Using
End Sub, ----
(Coloration syntaxique automatique par Kenji)

Les imports sont a mettre au tout début de ton fichier code.

__________
Kenji
(

Merci Charles Racaud 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de Charles Racaud
Meilleure réponse
Charles Racaud
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Dernière intervention
9 avril 2017
- 26 sept. 2007 à 11:41
3
Merci
Ton exception n'as rien a voir avec les Imports
Un imports sert a éviter de mettre l'espace de nom a chaque fois.
Donc, il faut que tu regarde à quel moment il fait l'erreur (débuggage pas-à-pas (F11 par défaut)), et voirce qui provoquerai cette erreur.

__________
Kenji
(

Merci Charles Racaud 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de Charles Racaud
Adn56
Messages postés
1220
Date d'inscription
jeudi 24 mai 2007
Dernière intervention
28 septembre 2013
- 25 sept. 2007 à 17:24
0
Merci
salut, c'est ce que je fais, j'ai une variable pas(800) as byte, mais le reste du programme travaille sur des pasprog(800) as boolean style if pasprog(1) then blabla... et du coup lorsque j'utilise la fonction ci dessus il me jette car un boolean ne pux etre converti dans un tableau de byte -_-' du coup voila ce que je suis obligé de faire :

pas = FichierVersTableauDeByte(Application.StartupPath & "\prog" & selectprog & ".Ext")
For xx As Short = 0 To pas.Length - 1
pasprog(xx) = CBool(pas(xx))
Next

bon cela marche mais je me retrouve avec 20 fichiers (1 par prog) de 800octets chacun alors que je pourrais en avoir 20 de 100octets codé binaire. M'enfin ce qui m'agace le plus reste tout de meme les :
"Une exception de première chance de type 'System.IO.FileNotFoundException' s'est produite dans mscorlib.dll
Une exception de première chance de type 'System.IO.FileNotFoundException' s'est produite dans mscorlib.dll
Une exception de première chance de type 'System.ArgumentOutOfRangeException' s'est produite dans System.Windows.Forms.dll
Une exception de première chance de type 'System.ArgumentOutOfRangeException' s'est produite dans System.Windows.Forms.dll
Une exception de première chance de type 'System.Threading.ThreadAbortException' s'est produite dans System.Windows.Forms.dll" a chaque lancement GRRRR.
Merci pour la lecture et @+ pour du 9
Commenter la réponse de Adn56
Charles Racaud
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Dernière intervention
9 avril 2017
- 25 sept. 2007 à 17:38
0
Merci
Pourquoi mettre des boolean dans un tableau de byte ?
A ta fonction, tu passe directement ton tableau de boolean en parametre, et tu ajoute un à un les booleans dans ton fichier.

__________
Kenji
(
Commenter la réponse de Charles Racaud
Adn56
Messages postés
1220
Date d'inscription
jeudi 24 mai 2007
Dernière intervention
28 septembre 2013
- 25 sept. 2007 à 18:12
0
Merci
oui certes, mais a la lecture il me retourne un tableau de byte, que je ne peux pas exploter directement en true, false. mais bon cela mrche comme cela. D'ou ma question enregistrer directement des bool plutot que des bytes. Merci de tes réponses si rapide.
Sinon tu n'a pas une piste pour les execptions qu'il lévent à chaque lancement du debug ? et pour les imports je l'ai met où ?
Et oui plein de questions de newb, mais je suis automaticien à la base XD
@++

Tiens les balises ne sont pas reconnues ^_____^, zut alors.....
Commenter la réponse de Adn56
Adn56
Messages postés
1220
Date d'inscription
jeudi 24 mai 2007
Dernière intervention
28 septembre 2013
- 26 sept. 2007 à 09:29
0
Merci
merci bien l'ami ! bon j'ai fait le test et cela roule pour ce qui est d'écrire un octet (de 8bits renseigné) dans un fichier ! bravo.
Maintenant avec le systéme de fichier windows le gain est nul. Mon fichier fait toujours 1Ko :( cluster oblige ^^. sinon j'ai bien un fichier de 100octet.
Me reste plus qu'a refaire ta fonction à l'envers, je sens je vais faire une petite recherche sur ce fofo *_*

bien sinon et pour finir si je met en tete de la form ceci :
Imports Microsoft.VisualBasic
Imports System
Imports System.IO
cela doit suffir non ?
portant il continu à me lever des :
Une exception de première chance de type 'System.Threading.ThreadAbortException' s'est produite dans mscorlib.dll
et autre truc de temps en temps :(

encore merci du coup de pouce et au prochain probleme :p
Commenter la réponse de Adn56
Adn56
Messages postés
1220
Date d'inscription
jeudi 24 mai 2007
Dernière intervention
28 septembre 2013
- 26 sept. 2007 à 13:27
0
Merci
Bien vu ^^ voici la ou il stop
Public

Class form1#

Region
"déclarations"

Dim visusortie
As
New List(
Of Label)
'définition des 8 labels pour affichage des sorties
Puis dans le form load

' listes des controls labels pour affichage des sortiesvisusortie.Add(Label1)

visusortie.Add(Label2)

visusortie.Add(Label3)

visusortie.Add(Label4)

visusortie.Add(Label5)

visusortie.Add(Label6)

visusortie.Add(Label7)

visusortie.Add(Label8)

' pour tous les labels 1 à 8 mettre la couleur a vert foncé

For j = 0
To 7visusortie(j).BackColor = Color.DarkGreen

Next j
apres ils sont utilisés dans un timer, posé sur cette même form
' visualisation et activations des leds de sorties

For ii
As
Integer = 0
To 7

If OUT(ii) =
True
Thenvisusortie(ii).BackColor = Color.GreenYellow

SetDigitalChannel(ii + 1)

' remplace le writealldigital ^^

Elsevisusortie(ii).BackColor = Color.DarkGreen

ClearDigitalChannel(ii + 1)

End
If

NextDonc je ne vois vraiment pas ce qui lui plait pas
Tiens les balises ne sont pas reconnues ^_____^, zut alors.....
Commenter la réponse de Adn56
Adn56
Messages postés
1220
Date d'inscription
jeudi 24 mai 2007
Dernière intervention
28 septembre 2013
- 26 sept. 2007 à 13:42
0
Merci
Bon dsl gourage -_-', je viens de me taper toute la séquence d'init de la compile avec F11 (j'aime les for i=0 to 799 O_o), bref et là ya plus d'erreur ! GRRRRRR.
Alors que si je lance la compile en auto il ya toujours ce :
Une exception de première chance de type 'System.Threading.ThreadAbortException' s'est produite dans mscorlib.dll

Donc cela doit venir de mon thread, malgrés le :

' evite les erreur inter thread/formCheckForIllegalCrossThreadCalls =

FalseBon tant pis, de toute façon cela ne remet en cause le fonctionnement une fois compilé, mais j'aime pas ne pas comprendre ^.^
merci à toi pour ces conseils. @dn

Tiens les balises ne sont pas reconnues ^_____^, zut alors.....
Commenter la réponse de Adn56

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.