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 6 et antérieur Discussion :

conversion caractère spéciaux


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 147
    Par défaut conversion caractère spéciaux
    Bonjour,

    J'ai fait un programme en visual basic 6.0 qui permet d'importer un fichier .csv dans une base access. Le problème c'est que lors de l'importation, les caractères spéciaux tels que les "é",les "è" etc... sont converti en un caractère bizarre qui ressemble à ca: |

    et les apostrophe sont converti en point d'interrogation: ?
    Quel instructions ou fonctions dois-je utiliser ?

    Voici mon code d'importation d'un fichier .csv vers ma base sous ACCESS.
    Ma form contiens un bouton et un CommonDialog.

    Code : 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Private Sub Command1_Click()
    On Error GoTo erreurcor20
    Dim dynposteimp As Recordset
    Dim DT1 As Recordset
    Dim DT6 As Recordset
    Dim DT12 As Recordset
     
    Set DT1 = gCurrentDB.OpenRecordset("T1", dbOpenDynaset)
    Set DT6 = gCurrentDB.OpenRecordset("T6", dbOpenDynaset)
    Set DT12 = gCurrentDB.OpenRecordset("T12", dbOpenDynaset)
     
    With CommonDialog1
      'Ligne de titre
      .DialogTitle = "Open File [CSV]"
      'Masque de recherche
      .Filter = " Text Files (*.CSV) |*.csv|All files (*.*) |*.*"
      'Index de filtre
      .FilterIndex = 1
      'Mise en place Flags : Dialogue de l'explorateur avec les noms longs
      .Flags = cdlOFNCreatePrompt And cdlOFNExplorer
      'Ouvrir fichier
      .ShowOpen
    End With
     
     If CommonDialog1.Flags = 0 Then
     Exit Sub
     End If
     
    Dim lignestring, problemeImp As String
     
     
    problemeImp = "Erreur d'importation"
     
    chemin2 = CommonDialog1.FileName
    NumFile_s = FreeFile
    Open chemin2 For Input As #NumFile_s
    While Not EOF(NumFile_s)
    Input #NumFile_s, lignestring
     
     
    If lignestring = "" Then
    'dynposteimp.Close
     
    Close #NumFile_s
    Exit Sub
    End If
     
    placech1 = InStr(placech0 + 1, lignestring, ";", vbTextCompare) 'prend le premier mot terminé par un point virgule
    If placech1 = 0 Then
      DT1.Close
      DT6.Close
      DT12.Close
      Close #NumFile_s
      MsgBox problemeImp
      Exit Sub
    End If
    etc...
    La suite du code consiste à injecter les mots capturés par placech1, placech2, placech3 etc... dans les tables, enfin bref, les trier.

    Merci.

  2. #2
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Ton fichier aurait pas été généré par un application DOS par hasard ?

    Si oui, essaye d'utiliser la fonction API OEMTOCHAR

    (code a coller dans un module par exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Declare Function OemToChar Lib "user32" _
                             Alias "OemToCharA" (ByVal lpszSrc As String, _
                                                 ByVal lpszDst As String) As Long
     
    Public Function Convertit(Txt As String) As String
      Dim strTemp As String
      Dim lRet As Long
      strTemp = Txt
      lRet = OemToChar(strTemp, Len(strTemp))
      Convertit = strTemp
    End Function
    Et dans ton programme, juste apres avoir recupéré la donnée, tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    lignestring =Convertit(lignestring)
    Attention mon code ci-dessus est faux. n'utilisez pas SVP

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 147
    Par défaut
    Ton fichier aurait pas été généré par un application DOS par hasard ?
    je ne sais pas vraiment.


    Lorsque l'appelle la fonction avec lignestring =Convertit(lignestring) , j'obtiens l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Compile error:
    Byref Argument type mismatch

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    comment as tu déclaré ta varaible ligneString..?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim LigneString as string
    ensuite .. une petite coquille dans le code .. un e en trop :
    et pas text

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 147
    Par défaut
    si si si j'ai bien déclaré en string.

    Mais le problème est résolu grâce au text => txt



    Malheureusement, en exécutant le programme, je viens de perdre le travail de deux heure. arf... car visual basic s'est fermé automatiquement et j'ai oublié d'enregistré, et c'est la première fois que ca m'arrive.


    Bon c'est pas grave, je réécris tout ce que j'ai perdu.


    Ton fichier aurait pas été généré par un application DOS par hasard ?
    Bah à priori, vu le plantage, ce n'est pas par une application DOS.

  6. #6
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Aie , j'ai merdu , desolé
    De façon générale, quand on utilise des api, il y a de gros risque de plantage brutal.
    J'avais fait ça de mémoire.

    La fonction OemToChar demande Deux parametres string, et pas comme habituellement un buffer et un long indiquant la logeur du buffer.

    Sauve bien ton projet et essaye le code ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
     
    Public Function Convertit(Txt As String) As String
      Dim strTemp As String
      Dim strTemp2 As String
      Dim lRet As Long
      strTemp = Txt & chr$(0)
      strTemp2 = String(Len(strTemp), 0)
      lRet = OemToChar(strTemp, strTemp2)
      Convertit = left(strTemp2,len(strTemp2)-1)
    End Function
    Avec mes plus plates excuses.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/11/2009, 12h09
  2. Conversion des caractères spéciaux en &xyz;
    Par thomzon dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 05/09/2007, 08h35
  3. Réponses: 2
    Dernier message: 15/06/2007, 16h24
  4. Conversion Caractères Spéciaux String -> Caractères HTML
    Par JujuDorange dans le forum Documents
    Réponses: 1
    Dernier message: 21/10/2006, 12h11
  5. Pb conversion de caractères spéciaux
    Par taka10 dans le forum Langage
    Réponses: 6
    Dernier message: 10/05/2006, 13h14

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