Récupérer des puissances de 2 écrites dans un fichier binaire

Taur33 Messages postés 85 Date d'inscription vendredi 24 septembre 2010 Statut Membre Dernière intervention 20 mai 2011 - 29 déc. 2010 à 18:57
Taur33 Messages postés 85 Date d'inscription vendredi 24 septembre 2010 Statut Membre Dernière intervention 20 mai 2011 - 30 déc. 2010 à 15:44
Bonsoir à tous,
Voilà mon problème : j'ai crééer un fichier en mode binaire contenant les puissances
de 2^0 jusqu'à 2^10000 ceci dans le but d'éviter de recalculer chaque puissance et
donc de récupérer la puissance recherchée directement dans le fichier.
j'ai donc utilisé le code suivant:
  ' 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)

            'Me.Text = "0"
            For i = 0 To 10000
                If i = 0 Then
                    R = "1"
                    Chaine = R
                    bw.Write(Chaine)
                Else
                    'Me.Text = i / 10
                    R = Chaine
                    Chaine = Karatsuba(R, 2)
                    bw.Write(Chaine)
                End If
            Next


            bw.Close()



ce qui m'a donné dans le fichier une fois écrit ceci:
1248163264128256etc...

Donc mon probleme va etre de récuperer par exemple 256=2^8 En effet comment savoir ou cette puissance se trouve dans mon fichier ?
que signifient les caractères entourants chaque puissance ?
Je demande donc votre aide pour répondre à ces questions ?
(l'utilisation des puissances de 2 se justifie pour ma fonction de conversion de nombres decimaux en nombres binaires pour ceux qui demanderaient pourquoi précalculer ces puissances )


Merci d'avance pour votre aide

4 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
29 déc. 2010 à 21:27
Bonsoir
Tu as déja posé le meme problème précédement
et que ce n'est optimisé de lire d'un fichier
bon

tu devrais écrire dans ton fichier un string
par ligne donc utilises le writeline
mais utilises
Dim objWriter As New System.IO.StreamWriter(FILE_NAME) 

au lieu du binarywriter


Dim FILE_NAME As String = "e:\ReadFile\blabqla.txt"
        Try
            Dim objWriter As New System.IO.StreamWriter(FILE_NAME)
            objWriter.WriteLine(10101)
            objWriter.WriteLine(10103221)
            objWriter.WriteLine(10103221)
            objWriter.Close()
        Catch ex As Exception
            MessageBox.Show(FILE_NAME, "not found")
        End Try


pour lire ton fichier d'un coup
 Dim FILE_NAME As String = "e:\ReadFile\blabqla.txt"
        Try
            Dim powerlist As List(Of String) = System.IO.File.ReadAllLines(FILE_NAME).ToList
        Catch ex As Exception
            MessageBox.Show(FILE_NAME & " not found")
        End Try


powerlist est array of string
0
Taur33 Messages postés 85 Date d'inscription vendredi 24 septembre 2010 Statut Membre Dernière intervention 20 mai 2011
30 déc. 2010 à 12:38
Ce n'est pas tout à fait les memes questions que je pose meme si c'est sur le meme algorithme.
Ceci dit tu veux dire qu'il faut que je réécrive mon fichier cette fois ligne par ligne en texte.
En effet je pourrais récupérer la puissance facilement mais
le fichier va être lourd.(c'est pour ça que je souhaitais écrire en binaire)
Quand tu dis ce n'est pas optimisé de lire dans un fichier je ne comprends pas car calculer 2^9000 par exemple c plus long que de le récupérer dans le fichier.

Sinon en utilisant BinaryReader , FileStream et ReadString je peux récupérer les
puissances mais en commençant par la 1ère N'y a t-il pas moyen de trouver la position exacte de la puissance que je recherche par exemple 2^8=256 ?
 Dim br As BinaryReader
        Dim fs As FileStream

        'Ouverture du fichier et Ecriture du contenu du fichier dans un TextBox

        fs = File.Open("POW2.txt", FileMode.Open)
        br = New BinaryReader(fs)

        While fs.Position < fs.Length
            TextBox1.Text = TextBox1.Text & br.ReadString & vbCrLf
        End While


Dans mon textbox j'ai bien:
1
2
4
8
16
32
etc...
Cordialement
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
30 déc. 2010 à 14:49
Salut
Quand tu dis ce n'est pas optimisé de lire dans un fichier je ne comprends pas car calculer 2^9000 par exemple c plus long que de le récupérer dans le fichier.


pas forcément et si tu as besoin de 2^x
et que x n'est pas dans le fichier
chaque fois lors du lancement de ton application
il faut lire tout le fichier et il faut peut
le reécrire de nouveau s'il manque une puissance

ce n'est pas plus lourd
que fait la fonction = Karatsuba(R, 2) ?
en plus j'ai testé avec le binarywriter ça prend
beaucoup de temps pour écrire le fichier
avec le StreamWriter beaucoup plus rapide
la meme chose pour la lecture du fichier
0
Taur33 Messages postés 85 Date d'inscription vendredi 24 septembre 2010 Statut Membre Dernière intervention 20 mai 2011
30 déc. 2010 à 15:44
pas forcément et si tu as besoin de 2^x
et que x n'est pas dans le fichier
chaque fois lors du lancement de ton application
il faut lire tout le fichier et il faut peut
le reécrire de nouveau s'il manque une puissance


pourquoi 2^x ne serait pas dans mon fichier ? et si x dépasse 10000 je prévois dans ma fonction [DecToBin(A as string) as string] de changer de fichier (contenant 2^10001 à 2^20000) etc jusqu'à certaine limite qui dépend du nombre de charactères imposé par un Richtextbox à savoir 2147483647 charactères.

ce n'est pas plus lourd
que fait la fonction = Karatsuba(R, 2) ?

quand je dis lourd je veux dire que mon fichier binaire à unt taille de 15 077 586 octets si je l'écrit en texte ligne par ligne il faudra compter avec les blancs entre chaque puissance donc augmenter considérablement la taille ,non ?

Je vais quand meme essayer de réécrire le fichier avec le StreamWriter.
Je laisse pour l'instant en non résolu et je te remercie Shayw pour ton aide.
0
Rejoignez-nous