écriture et lecture d'un fichier en binaire

Résolu
Taur33 Messages postés 85 Date d'inscription vendredi 24 septembre 2010 Statut Membre Dernière intervention 20 mai 2011 - 17 déc. 2010 à 13:11
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 - 18 déc. 2010 à 15:14
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

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
17 déc. 2010 à 13:30
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
3
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
17 déc. 2010 à 13:30
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
3
Taur33 Messages postés 85 Date d'inscription vendredi 24 septembre 2010 Statut Membre Dernière intervention 20 mai 2011
17 déc. 2010 à 14:39
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.
0
Taur33 Messages postés 85 Date d'inscription vendredi 24 septembre 2010 Statut Membre Dernière intervention 20 mai 2011
18 déc. 2010 à 15:08
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
18 déc. 2010 à 15:14
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
0
Rejoignez-nous