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

VBScript Discussion :

Remplacer des donnees dans un fichier csv


Sujet :

VBScript

  1. #1
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Points : 582
    Points
    582
    Par défaut Remplacer des donnees dans un fichier csv
    Bonjour,

    Je n'arrive pas a remplacer des donnees dans un fichier csv type database en utilisant une connection ADODB. Le script me renvoie une erreur "Updating data in a linked table is not supported by this ISAM".
    Voila mon code :

    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
    Const adOpenStatic = 3
    Const adLockOptimistic = 3
    Const adCmdText = &H0001
     
    Set objConnection = CreateObject("ADODB.Connection")
    Set objRecordSet = CreateObject("ADODB.Recordset")
     
    strPathtoTextFile = "C:\"
     
    objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
              "Data Source=" & strPathtoTextFile & ";" & _
              "Extended Properties=""text;HDR=YES;FMT=Delimited"""
     
    objRecordset.Open "SELECT * FROM file.csv", _
              objConnection, adOpenStatic, adLockOptimistic, adCmdText
     
    Do Until objRecordset.EOF
        strName = objRecordset.Fields.Item("Nom")
        objRecordset.Fields.Item("Nom").Value = UCase(strName)
        objRecordset.MoveNext
    Loop
    Pourriez-vous me dire ce qui cloche dans ce script?

    J'ai essaye d'utiliser la methode de parcours du csv avec la fonction split, mais ca ne fonctionne pas dans mon cas particulier car mes csv ont pour caracteres de separation des virgules et que des virgules sont utilisees dans les champs de donnees...

    Y a-t-il une solution a mon probleme? Merci.

    pitchalov

  2. #2
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Points : 582
    Points
    582
    Par défaut Solution
    J'ai trouve une resolution a mon probleme. Je ne pense pas que ce soit la meilleure possible, mais ca fonctionne.

    Actions du script :
    - Changement de toutes les virgules a l'exterieur de guillemets en point-virgule + changement de tous les retours a la ligne a l'interieur de guillemets en espace.
    - Ensuite, chaque ligne est splitee par rapport aux point-virgules
    - Puis les donnes necessaires sont reformatees (ici suppression d'accents + tout en majuscules), et les lignes sont reformees avec des virgules afin de retrouver le meme formatage qu'au debut.

    Attention, ce script ne gere pas un csv ayant des point-virgules dans son contenu.

    Voila le code:
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    Const FOR_READING = 1
    Const OVERWRITE = True
    Const FORCE = True
    Const ACCENT = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñÇç"
    Const NOACCENT = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNnCc"
     
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Fonction SansAccents() : Retourne une chaîne sans accents
    '
    Function SansAccents(strAvecAccents)
     
    	' Définition des variables locales
    	Dim i
    	Dim lettre
    	Dim strSansAccents
     
    	strSansAccents = strAvecAccents
    	  For i = 1 To Len(ACCENT)
    	    lettre = Mid(ACCENT, i, 1)
    	    If InStr(strSansAccents, lettre) > 0 Then
    	       strSansAccents = Replace(strSansAccents, lettre, Mid(NOACCENT, i, 1))
    	    End If
    	  Next
    	SansAccents = strSansAccents
     
    	' Libération des variables locales
    	Set i = Nothing
    	Set lettre = Nothing
    	Set strSansAccents = Nothing
     
    End Function 
    ''''''''''''''''''''''''''''''
     
    strAccountFile = "C:\eho\Accounts.csv"
    strTempFile = strAccountFile & ".temp"
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")
     
    If Not objFSO.FileExists(strAccountFile) Then
    	WScript.Echo "Le fichier " & strAccountFile & " n'existe pas" & VbCrLf & "FIN DU PROGRAMME"
    	WScript.Quit 1
    End If
     
    Set objNotOkToBeFormatFile = objFSO.OpenTextFile(strAccountFile, FOR_READING)
    Set objOkToBeFormatFile = objFSO.CreateTextFile(strTempFile, OVERWRITE)
     
    nbGuillemets = 0
     
    Do Until objNotOkToBeFormatFile.AtEndOfStream
        strCharacter = objNotOkToBeFormatFile.Read(1)
    	If strCharacter = chr(34) Then
    		nbGuillemets = nbGuillemets + 1
    		objOkToBeFormatFile.Write strCharacter
    	Else
    		If nbGuillemets Mod 2 = 1 Then 
    			objOkToBeFormatFile.Write Replace(strCharacter, Chr(10), Chr(32))
    		Else
    			objOkToBeFormatFile.Write Replace(strCharacter, Chr(44), Chr(59))
    		End If
    	End If
    Loop
     
    objOkToBeFormatFile.Close
    objNotOkToBeFormatFile.Close
     
    objFSO.DeleteFile strAccountFile, FORCE
     
     
    Set objNotFormatedFile = objFSO.OpenTextFile(strTempFile, FOR_READING)
    Set objFormatedFile = objFSO.CreateTextFile(strAccountFile, OVERWRITE)
     
    strOldLine = objNotFormatedFile.ReadLine
     
    arrLine = Split(strOldLine, ";")
    nbCols = Ubound(arrLine)
     
    If nbCols < 18 Then 
    	WScript.Quit 10
    End If
     
    strNewLine = ""
    For j = Lbound(arrLine) To Ubound(arrLine)
    	strNewLine = strNewLine + arrLine(j) + ","
    Next
    strNewLine = Left(strNewLine, len(strNewLine)-1)
    objFormatedFile.WriteLine strNewLine
     
    Do Until objNotFormatedFile.AtEndOfStream
    	strOldLine = objNotFormatedFile.ReadLine
    	If strOldLine <> "" Then
    		arrLine = split(strOldLine, ";")
    		strTemp = arrLine(0)
    		arrLine(0) = UCase(SansAccents(strTemp))
    		strTemp = arrLine(16)
    		arrLine(16) = UCase(SansAccents(strTemp))
    		strTemp = arrLine(18)
    		arrLine(18) = UCase(SansAccents(strTemp))
    		strNewLine = ""
    		For j = Lbound(arrLine) To Ubound(arrLine)
    			strNewLine = strNewLine + arrLine(j) + ","
    		Next
    		strNewLine = Left(strNewLine, len(strNewLine)-1)
    		objFormatedFile.WriteLine strNewLine
    	End If
    Loop
     
    objNotFormatedFile.Close
    objFormatedFile.Close
     
    objFSO.DeleteFile strTempFile, FORCE
     
    Set objOkToBeFormatFile = Nothing
    Set objNotOkToBeFormatFile = Nothing
    Set objNotFormatedFile = Nothing
    Set objFormatedFile = Nothing
    Set objFSO = Nothing
     
    WScript.Echo "FIN DU PROGRAMME"
    Si vous avez mieux, ou si vous trouvez des disfonctionnements, ou des ameliorations sont faites, n'hesitez pas.

    pitchalov

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

Discussions similaires

  1. Extraire des données dans un fichier .csv
    Par orj30754 dans le forum C
    Réponses: 7
    Dernier message: 03/11/2006, 14h48
  2. Récuperation des donnees dans un fichier .csv
    Par HMorvan dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 04/09/2006, 22h27
  3. Réponses: 3
    Dernier message: 27/06/2005, 16h24
  4. [D6] Comment remplacer des chaînes dans un fichier ?
    Par fabien25 dans le forum Langage
    Réponses: 4
    Dernier message: 15/06/2005, 13h37
  5. Mettre des donnees dans un fichier Excel
    Par Mouawad dans le forum C++Builder
    Réponses: 6
    Dernier message: 07/10/2004, 14h55

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