écriture et lecture d'un fichier en binaire [Résolu]

Signaler
Messages postés
85
Date d'inscription
vendredi 24 septembre 2010
Statut
Membre
Dernière intervention
20 mai 2011
-
Messages postés
416
Date d'inscription
vendredi 22 février 2008
Statut
Membre
Dernière intervention
7 janvier 2018
-
Bonjour à tous
Voilà je voudrais précalculer les puissances de 2 jusqu'à 10000 pour accélérer ma
fonction (Dectobinaire(nombre as string)as string)donc les écrire dans un fichier
Cependant je doute quand à la façon dont je m'y prends (taille du fichier ~14 Mo,lecture des puissances).(Voir code)
Je souhaiterais aussi partager les calculs des puissances mais là je ne vois pas comment faire.
Voici mon code:
Private Sub ButtonCALCULER_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCALCULER.Click
        Dim br As BinaryReader
        Dim bw As BinaryWriter
        Dim fs As FileStream
        Dim i As Integer
        Dim A As String = "2"
        Dim Chaine As String = ""
        Dim R As String

        Me.Cursor = Cursors.WaitCursor
        

        Try
            ' création du fichier
            bw = New BinaryWriter(File.Create("POW2.txt"))

            ' calcul puissance et écriture dans le fichier
            ' on multiplie la puissance précédente par 2
            ' sauf quand i vaut "0" (2^0=1)
            For i = 0 To 10000
                If i = 0 Then
                    R = 1
                    Chaine = R
                    bw.Write(Chaine & vbCrLf)
                Else : R = Chaine
                    Chaine = Karatsuba(R, 2)
                    bw.Write(Chaine & vbCrLf)
                End If
            Next


            bw.Close()


            'Ouverture du fichier et Ecriture du contenu du fichier dans un RichTextBox
            'fs = File.Open("POW2.txt", FileMode.Open)
            'br = New BinaryReader(fs)



            'While fs.Position < fs.Length
            'RichTextBox1.Text = RichTextBox1.Text & br.ReadString
            'End While

        Finally
            'Fermeture Binaryreader
            If Not IsNothing(br) Then br.Close()
            'Fermeture Binarywriter
            If Not IsNothing(bw) Then bw.Close()
        End Try

        Me.Cursor = Cursors.Default
    End Sub



Merci d'avance de votre aide.

5 réponses

Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
27
Salut,

Ta technique d'optimisation est mauvaise.

C'est plutot l'inverse, car faire intervenir des IO sur le disque ca deamnde plus de calcul
qu'un calcul en puissance de 2.

il y a la methode math.pow qui est la plus optimisée
http://msdn.microsoft.com/fr-fr/library/system.math.pow.aspx
Messages postés
14726
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
28 septembre 2020
144
Bonjour,

Il existe 1 manière pour convertir une une valeur simplement :
Dim lValueToConvert as integer
Dim lValueConverted as string=""

Do while lValueToConvert>0
lValueConverted=(lValueToConvert mod 2).ToString+lValueConverted
lValueToConvert\=2 ' Note bien le \ et pas /
loop

'Résultat dans lValueConverted


Après, compter jusqu'à 10000 bits, ça fait beaucoup, seul un format Double (à vérifier) peut contenir une telle valeur, donc peu de précision.

Je pense que ton problème est à repenser pour comprendre pourquoi tu as besoin de tant de valeur que ça.

Mon site
Messages postés
85
Date d'inscription
vendredi 24 septembre 2010
Statut
Membre
Dernière intervention
20 mai 2011

il y a la methode math.pow qui est la plus optimisée
http://msdn.microsoft.com/fr-fr/library/system.math.pow.aspx

En effet mais je travaille avec des strings donc ma variable chaine contient la valeur exacte (sans écriture avec exp).
Avec math.pow j'aurais donc une limitation.

Je pense que ton problème est à repenser pour comprendre pourquoi tu as besoin de tant de valeur que ça.


pour accélérer ma fonction (Dectobinaire(nombre as string)as string) c'est à dire donner la représentation binaire d'un décimal.
Pour cela il faut trouver la puissance de 2 immédiatemment < à nombre.

Vous ne me dites pas cependant si la lecture et l'écriture sont bien faites en mode
binaire(ce dont je doute dans mon code)

Cordialement.
Messages postés
85
Date d'inscription
vendredi 24 septembre 2010
Statut
Membre
Dernière intervention
20 mai 2011

En fait ça fonctionne (certes + de 4 heures pour créér le fichier)
Peut-etre qu'en faisant les calculs sur plusieurs threads cela diminuerait le
temps d'écriture du fichier?
Mais je ne sais pas faire.
En tous cas merci nhervagault et NHenry de m'avoir répondu.
Messages postés
416
Date d'inscription
vendredi 22 février 2008
Statut
Membre
Dernière intervention
7 janvier 2018
1
Dim Entier As Integer = 4
Dim binaryVal As String = Convert.ToString(entier, 2)
' 2 represente une base binaire
' Cette fonction converti un entier en binaire : 4 en 100
Peut elle être adapté au décimal en travaillant avec la virgule ?

Cordialement CGSI3