IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Migration d'un Projet VBA vers VB.Net (visual studio 2017) FILEOPEN et GET


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Homme Profil pro
    amateur
    Inscrit en
    Avril 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 11
    Points : 5
    Points
    5
    Par défaut Migration d'un Projet VBA vers VB.Net (visual studio 2017) FILEOPEN et GET
    Bonjour à tous,

    J’ai un projet VBA (Excel) que je suis en train de migrer sur Visual studio (Excel n'était pour moi qu'un "support" de programmation VBA)
    Je ne suis pas du tout "programmeur et je fais surtout ça pour « m'amuser à coder des algorithmes » !
    Si Le copier coller de VBA ver VB fonctionne en grande partie, il y a des spécificités qui ne passe pas !
    J’ai beau avoir google comme ami…mais ça ne suffit pas toujours… et j’espère bien trouver d’autres amis ici… !!
    A l’origine (en VBA,) j’ai cette partie de code que j’avais trouvé sur un autre forum qui me sert à ouvrir un fichier pour avoir un accés en binaire (pour remplacer les Octets existant par d’autres)
    Mon fichier de base est « strFileName » et mon fichier recepteur est « FileName »
    Pour l’ensemble du code, j’ai pu trouver les « équivalences », il n’y a que pour la ligne
    « Get #intFileNumber, , strBuffer » ou sa bloque…!! Il s’emblerait que sur VBA, cette ligne réserve de la place en mémoire…mais je n’en suis pas sûr.. et surtout, je ne sais pas comment trouver un équivalent sur VB (l’instruction get n’existerait plus.. ??)
    Merci pour votre aide !

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    strFileName = TextBox10.Value
    intFileNumber = FreeFile
    Open strFileName For Binary Access Read Shared As #intFileNumber
    lngFileSize = LOF(intFileNumber)    'How large is the File in Bytes?
    strBuffer = Space$(lngFileSize)     'Set Buffer Size to File Length
    Get #intFileNumber, , strBuffer     'Grab a Chunk of Data from the File
    Close #intFileNumber
    Open FileName For Output As #1

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    En VB.Net, ce serait plutôt un truc de ce genre (de mémoire):
    Code VB.Net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    strFileName = TextBox10.Value
    Using fileStm As System.IO.Stream = File.OpenRead(strFileName)
    Using txtRd As System.IO.TextReader = new System.IO.StreamReader(fileStm)
    strBuffer = txtRd.ReadToEnd()
    End Using
    End Using
    Ou dans ce cas précis, beaucoup plus simple:
    Code VB.Net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strFileName = TextBox10.Value
    strBuffer = System.IO.File.ReadAllText(strFileName)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    amateur
    Inscrit en
    Avril 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    Et merci pour votre aide !
    J'ai utilisé votre 2eme solution (la plus simple) de la façon suivante:
    Code VB.Net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    strFileName = TextBox2.Text
    intFileNumber = FreeFile()
    FileOpen(intFileNumber, strFileName, OpenMode.Binary, OpenAccess.Read, OpenShare.LockRead)
    lngFileSize = LOF(intFileNumber)    'How large is the File in Bytes? 
    strBuffer = Space$(lngFileSize)     'Set Buffer Size to File Length 
    FileClose (intFileNumber)
    strBuffer = System.IO.File.ReadAllText(strFileName)
    '
    '
    '  pour la suite, le code doit lire byte par byte le contenu du Buffer
    'Display results on a Byte-by-Byte basic
    For lngCharNumber = 1 To lngFileSize
          strCharacter = Microsoft.VisualBasic.Mid(strBuffer, lngCharNumber, 1)
          codeInt = Asc(strCharacter)
           ,
    '
    '
    Tout à l'air correct pour la lecture d'environ 80 à 90% du buffer, mais le programme s'arrete avec le msg d'erreur suivant : strCharacter="" (vide)...
    Avec le code en VBA , tous se déroule normalement jusqu'au bout, et j'ai bien le résultat escompté...!
    la seule difference que je vois serait la façon d'ouvrir la façon le fichier d'origine que j'ouvre avec code suivant:
    " Open strFileName For Binary Access Read Shared As #intFileNumber"
    voice d'ailleur la partie du code equivalente en VBA
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    Dim strCharacter As String * 1 ' a priori le dim(I caractere) n'a pas d'effet sur le resultat..
    '
    'Question: y a t'il une instruction equivalente en VB pour faire un Dim pour limiter une variable à "n" caractere(s) ?
     
    strFileName = TextBox10.Value
    intFileNumber = FreeFile
     
    Open strFileName For Binary Access Read Shared As #intFileNumber
     
    lngFileSize = LOF(intFileNumber)    'How large is the File in Bytes? 
    strBuffer = Space$(lngFileSize)     'Set Buffer Size to File Length
    Get #intFileNumber, , strBuffer     'Grab a Chunk of Data from the File " remplissage de strbuffer avec les donnée du fichier n°#intFileNumber !
    Close #intFileNumber                'on ferme le fichier n°#intFileNumber
    Open FileName For Output As #1
     
    '
    '
    'Display results on a Byte-by-Byte basic
    For lngCharNumber = 1 To lngFileSize
    strCharacter = Mid(strBuffer, lngCharNumber, 1)
    codeInt = Asc(strCharacter)
    '
    '

    Voilà les 2 version VB et VBA.. la version VBA fonctionne parfaitement, même sans limiter strCharacter à 1 seul caractere

    Si vous avez une piste pour m'aider je vous en remercie d'avance...!!

  4. #4
    Futur Membre du Club
    Homme Profil pro
    amateur
    Inscrit en
    Avril 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    Finalement, j'ai résolu mon Probleme de l'arret à 80% de la procédure
    VB.net doit etre plus contraignant que VBA et j'ai du dimentionner strCharacter a 1 seul caractere (Dim strCharacter As String * 1 sur VBA)
    pour info, sur VBA, pour mon cas, meme sans specifier "String*1 " la procedure tournait normalement...
    Donc là, j'ai utilize l'instruction suivante : Dim strCharacter as Char ...
    le code (résumé) est donc le suivant :
    Code VB.Net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Dim strCharacter as Char
    strFileName = TextBox2.Text
    intFileNumber = FreeFile()
    FileOpen(intFileNumber, strFileName, OpenMode.Binary, OpenAccess.Read, OpenShare.LockRead)
    lngFileSize = LOF(intFileNumber)    'How large is the File in Bytes? 
    strBuffer = Space$(lngFileSize)     'Set Buffer Size to File Length 
    FileClose (intFileNumber)
    strBuffer = System.IO.File.ReadAllText(strFileName)
    '
    '
    '  pour la suite, le code doit lire byte par byte le contenu du Buffer
    'Display results on a Byte-by-Byte basic
    For lngCharNumber = 1 To lngFileSize
          strCharacter = Microsoft.VisualBasic.Mid(strBuffer, lngCharNumber, 1)
          codeInt = Asc(strCharacter)
           ,
    '
    '
    le programme va bien jusqu'au bout, par contre le resultat attendu n'est pas le bon !
    Quand je controle ce qui est transmit dans le "strBuffer",il se trouve que les caracteres (les code Hex) ont changés
    le 1er caractere par exemple "FF" c'est transformé en "3F" ....?!

    si quelqu'un à une idée ??

  5. #5
    Futur Membre du Club
    Homme Profil pro
    amateur
    Inscrit en
    Avril 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Bon, ça y est j'ai trouvé, j'ai pu entièrement migrer mon code VBA vers VB.net, j'ai résolu mon dernier pobleme en
    utilisant l'instruction "FileSystem.ReadAllText" ,avec comme parametre "System.Text.Encoding.Default"
    ce paramètre résout mon problème de "FF" transformé en "3F" problème d'encodage donc

    Voici le code final (qui ne sert à rien mais qui fonctionne "pour l'exemple" ..)
    Code VB.Net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Dim strCharacter as Char 
    Dim strbuffer as String
    Dim codeInt as Integer
    FileName=TextBox1.Text 'path du fichier de destination
    strFileName = TextBox2.Text 'path du fichier source
    intFileNumber = FreeFile() 
    strBuffer = My.Computer.FileSystem.ReadAllText(strFileName, System.Text.Encoding.Default) ' le fichier source est copié dans la variable strbuffer
    lngFileSize=len(strbuffer) longueur du fichier source
    FileOpen(intFileNumber, FileName, OpenMode.Output), ouverture du fichier de destination
    For lngCharNumber = 1 To lngFileSize
    strCharacter = Microsoft.VisualBasic.Mid(strBuffer, lngCharNumber, 1)
    codeInt = Asc(strCharacter) ' conversion (valeur) en decimal du caractère   
    Print(intFileNumber, strCharacter) 'écriture caractère par caractère dans le nouveau fichier 
    Next lngCharNumber
    FileClose(intFileNumber)

    Voilà !!!

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    J'ai du mal à comprendre pourquoi tu as toujours un FileOpen...
    Ton code, il sert à quoi? Convertir un fichier de texte hexadécimal vers un flux d'octets bruts?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    En fait tu as adapté ton code VBA en VB6 sauce .net mid par exemple n'existe pas en .net c'est substring en .net.

    Si dans les références tu decoche la librairie visual basic ton code explose.

    Tu veux convertir un script VBA en .net ou apprendre le VB.net?

    Un de mes collègues qui pratique le c# (il serait qualifié de sénior émérite sur ce site), développait en VB6 pensant faire du VB.net!
    Dernière modification par Invité ; 10/06/2018 à 12h22.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    amateur
    Inscrit en
    Avril 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    J'ai du mal à comprendre pourquoi tu as toujours un FileOpen...
    Ton code, il sert à quoi? Convertir un fichier de texte hexadécimal vers un flux d'octets bruts?
    Oui, en quelques sorte, il sert à ça !

  9. #9
    Futur Membre du Club
    Homme Profil pro
    amateur
    Inscrit en
    Avril 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Bonjour,

    En fait tu as adapté ton code VBA en VB6 sauce .net mid par exemple n'existe pas en .net c'est substring en .net.

    Si dans les références tu decoche la librairie visual basic ton code explose.

    Tu veux convertir un script VBA en .net ou apprendre le VB.net?

    Un de mes collègues qui pratique le c# (il serait qualifié de sénior émérite sur ce site), développait en VB6 pensant faire du VB.net!
    Bonjour,
    Peut-etre, oui, mais là n'est pas la question ! comme je l'ai expliqué dans mon 1er message, je veux migrer un code VBA vers VB (6 ou .net ) ou C qu'importe) , c'est pour me desolidariser d'Excel et donc avoir
    quelque chose qui fonctionne (Presque) en autonome !
    Et si en plus, cerise sur le gateaux, j'apprend autre chose, c'est tout benef !!
    j'ai téléchargé la version Visual studio 2017 "community" pour cela ! et donc je découvre et me forme a VB.net aux travers des problemes que je rencontre..!!
    Quand je dis "je me forme", je veux rester modeste , on va plutot dire "j'adapte" mes maigres connaissances à ce nouvel outil..!! et ma fois, ça marche pas trop mal ...
    Bien cordialement,

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Pour convertir un fichier hexadécimal vers un fichier en octets bruts, je propose ceci:
    Code VB.Net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	Public Sub ConvertHexToBytes(ByVal fileNameIn As String, ByVal fileNameOut As String)
    		Dim strHex As String = System.IO.File.ReadAllText(fileNameIn)
    		Dim bytes((strHex.Length \ 2) - 1) As Byte
    		For i As Integer = 0 To bytes.Length - 1
    			Dim hexByte As String = strHex.Substring(i * 2, 2)
    			Dim parsedByte As Byte = Byte.Parse(hexByte, Globalization.NumberStyles.HexNumber)
    			bytes(i) = parsedByte
    		Next
    		System.IO.File.WriteAllBytes(fileNameOut, bytes)
    	End Sub
    Bien sûr on peut faire plus memory-efficient (sans charger tout le fichier une fois et demie en mémoire) mais à petite échelle c'est plus simple comme ça.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    amateur
    Inscrit en
    Avril 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Bonsoir,
    Et merci ! je vais tester, essayer de comprendre, et sans doute adapter votre code à mon cas particulier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Migration VBA vers VB.Net
    Par koyot3 dans le forum VB.NET
    Réponses: 4
    Dernier message: 27/04/2011, 12h24
  2. migration de ms access 2003 vers vb.net
    Par emayen01 dans le forum VB.NET
    Réponses: 2
    Dernier message: 24/03/2009, 17h23
  3. migration d'un projet php vers eclipse + configuration
    Par remond dans le forum Eclipse PHP
    Réponses: 2
    Dernier message: 17/10/2008, 18h08
  4. Migration d'une application asp vers asp.net 2.0
    Par glokos dans le forum Visual Studio
    Réponses: 1
    Dernier message: 05/06/2008, 16h41
  5. Migration d'un projet Netbeans vers Eclipse
    Par qwiskas dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 28/08/2006, 14h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo