Problème d'accent en lecture

lgn Messages postés 5 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 9 juillet 2007 - 9 juil. 2007 à 12:26
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 - 9 juil. 2007 à 20:53
Bonjour,

J'utilise Visual Basic 6 et je dois faire un programme permettant de lire un fichier.
J'ai fait :
    Open sFileName For Input As #1
    While (Not EOF(1))
        Line Input #1, sLigneLue
       MsgBox(sLigneLue)
    Wend
    Close #1

Mon problème est qu'a la place des accents, j'ai n'importe quoi.
D'après ce que j'ai vu, je crois comprendre que c'est un problème entre ASCII et UTL-8.

Est ce que quelqu'un à la solution en mon problème.

Merci.

LGN

6 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
9 juil. 2007 à 12:56
Salut
Essaye de voir si cela peut venir d'un problème OEM-ASCII.
Je te colle une petite fonction de notre ami EBartSoft permettant de convertir une chaine de l'un vers l'autre et réciproquement.
On l'utilise simplement, par exemple dans ton cas, après le "Line Input" :
sLigneLue = OEMConvert(sLigneLue, oemASCIItoANSI)

La fonction (à coller dans un module, par exemple):
Public Function OEMConvert(ByRef Text As String, ByVal ConvertMode As OEMStringTypeConstants) As String

' O    O    O
'  \__/ \__/
'  /=||=||=\   oouuuunnnnnnnnmmmmmmmmmmmmmm\
' // ||_||                                  \
' \\ /\ #\     oouuuunnnnnnnnmmmmmmmmmmmmmmmm\
' /=(  \  )==>       Coded by EBArtSoft@      \
'//  \O_\/            Copyright © 2006         \
'\\  || ||       
http://www.ebartcodes.info    \
' \==||=||==/  oouuuunnnnnnnnmmmmmmmmmmmmmmmmmmmm\
' ==========='E.B

    Dim ASCI As String
    Dim ANSI As String
    Dim Src  As String
    Dim Dest As String
    Dim i    As Long
    Dim Pos  As Long
   
    OEMConvert = Text
   
    ASCI = Chr$(132) & Chr$(148) & Chr$(129) & Chr$(225) & Chr$(142) & Chr$(153) & Chr$(154) & Chr$(128) & Chr$(130) & Chr$(131) & Chr$(133) & Chr$(134) & Chr$(135) & Chr$(136) & Chr$(137) & Chr$(138) & Chr$(139) & Chr$(140) & Chr$(143) & Chr$(144) & Chr$(147) & Chr$(150) & Chr$(151) & Chr$(20) & Chr$(145) & Chr$(146) & Chr$(155) & Chr$(156) & Chr$(166) & Chr$(167) & Chr$(171) & Chr$(172) & Chr$(237) & Chr$(241) & Chr$(246) & Chr$(253) & Chr$(21) & Chr$(157)
    ANSI = Chr$(228) & Chr$(246) & Chr$(252) & Chr$(223) & Chr$(196) & Chr$(214) & Chr$(220) & Chr$(199) & Chr$(233) & Chr$(226) & Chr$(224) & Chr$(229) & Chr$(231) & Chr$(234) & Chr$(235) & Chr$(232) & Chr$(239) & Chr$(238) & Chr$(197) & Chr$(201) & Chr$(244) & Chr$(251) & Chr$(249) & Chr$(182) & Chr$(230) & Chr$(198) & Chr$(162) & Chr$(163) & Chr$(170) & Chr$(186) & Chr$(189) & Chr$(188) & Chr$(216) & Chr$(177) & Chr$(247) & Chr$(178) & Chr$(167) & Chr$(165)



    If (ConvertMode = oemANSItoASCII) Then        Src ANSI: Dest ASCI
    Else        Src ASCI: Dest ANSI
    End If
   
    For i = 1 To Len(Src)
        Do
            Pos = InStr(OEMConvert, Mid$(Src, i, 1))
            If (Pos = 0) Then Exit Do
            Mid$(OEMConvert, Pos, 1) = Mid$(Dest, i, 1)
        Loop
    Next

End Function


Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
0
lgn Messages postés 5 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 9 juillet 2007
9 juil. 2007 à 14:50
Merci pour la réponse.

J'ai intégré ce code dans mon programme mais ça ne fonctionne pas.
J'ai toujours n'importe quoi à la place des accents.

Je n'arrive pas à voir comment je peux solutionner ce problème.

LGN
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
9 juil. 2007 à 15:15
Re
En réalité, tu aurais dû avoir un problème pour exécuter ce code puisqu'il t'en manque un bout à mettre dans la partie Déclaration du Module :
Public Enum OEMStringTypeConstants
    oemANSItoASCII
    oemASCIItoANSI
End Enum

Alors explique comment tu as pu le faire fonctionner ? c'est bizarre
Surtout, supprime bien toutes les gestions d'erreur du style "On Error Resume Next" qui peuvent masquer ce genre de problème. (Menu Outils, Options, onglet Général et case à cocher "Arrêt sur toutes les erreurs"
C'est très important quand on débugue une application.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
0
lgn Messages postés 5 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 9 juillet 2007
9 juil. 2007 à 15:57
En fait, j'ai vu que ce paramètre ne permettait que de convertir dans un sens ou dans l'autre:

    If (ConvertMode = oemANSItoASCII) Then        Src ANSI: Dest ASCI
    Else        Src ASCI: Dest ANSI
    End If
 
Donc j'ai tout simplement mis ça en booleen et je passe true ou false.

en mode debug, je passe bien soit dans le if, soit dans le else.

Mais les accents restent incompréhensible.

LGN
0

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

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
9 juil. 2007 à 20:28
Re
Ok, en fait oemANSItoASCII vaut 0 ou 1, mais ton True / False peut aussi marcher.
Est-ce que tes chaines originales auraient un caratère bizarre entre chaque lettre ?
Si c'est le cas, c'est parce que tu lis des caractères codés sur deux octets ... je ne rappelle plus le nom de ce type de caractères .... reflechissement Jean-Pierre ... DBCF (ouf) ou Unicode
Il faudrait regarder les fonctions avec un 'B' genre : ChrB, InputB ...
Dans l'aide de VB6, il y a deux chapitres consacrés :
"Traitement des fichiers utilisant les caractères à deux octets"
"Problèmes spécifiques au jeu de caractères à deux octets"
que tu retrouves si tu cherches le mot Unicode.

Sinon, essaye de nous copier/coller un exemple de quelques caractères bizarres et l'équivalence souhaitée.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
9 juil. 2007 à 20:53
Question : d'où vient le fichier et comment est-il "récupéré" ?
0
Rejoignez-nous