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 :

Déposer valeur dans un fichier csv sans supprimer le contenu


Sujet :

VBScript

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 36
    Points : 20
    Points
    20
    Par défaut Déposer valeur dans un fichier csv sans supprimer le contenu
    Bonjour à tous

    Je désire rentrer des valeurs dans un fichier csv en créant à chaque tour de boucle une nouvelle ligne (donc une ligne par fichier dans le fichier .csv)

    Voici la fonction qui me récupère mes valeurs. Je voudrais donc mettre le résultat de la variable "result" dans un fichier csv. Dès que la boucle est fini, le script passe au fichier suivant et la valeur "result" prend les valeurs du nouveau fichier et je voudrais les mettres sur la ligne 2 de mon fichier .csv

    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
    Function traitementFichier()
     
    	fichierComp = resultDossier & "\" & fichier
     
    	Set oFs = CreateObject("Scripting.FileSystemObject")
     
    	'Ouverture et lecture du fichier
    	Set ficSes = oFs.OpenTextFile(fichierComp)
     
    	'récupération d'un tableau de x lignes totalité du fichier
    	ContenuLgnFic = split(ficSes.ReadAll,vbnewline)
    	'Récupère le nombre de ligne dans un fichier
    	nbLgnFic = ficSes.Line -1
    	'fermeture du fichier
    	ficSes.close
     
    	'boucle permettant de calculer le nombre de caractère pour chaque valeur
    	For t = 1 to Len(droite)
     
    			CodAscii = asc(mid(droite,t,1))
     
    				if CodAscii = 32 then Esp = Esp + 1
    				if CodAscii = 39 then Gui = Gui + 1
    				if CodAscii = 46 then Dot = Dot + 1
    				if CodAscii = 40 then ParOuv = ParOuv + 1
    				if CodAscii = 41 then ParFer = ParFer + 1
    				if CodAscii = 233 then ascaig = ascaig + 1
    				if CodAscii = 232 then ascgrav = ascgrav + 1
    				if CodAscii >= 65 and CodAscii <= 90 then LtrMA = LtrMA + 1
    				if CodAscii >= 97 and CodAscii <= 122 then LtrMi = LtrMi + 1
     
    	Next
     
    	'renvoi le nombre de caractère
    	nbreCaractere = Esp+Gui+LtrMA+LtrMi+Dot+ParOuv+ParFer+ascgrav+ascaig
    	'renvoi le nombre de caractères sans espace
    	nbCaSanEsp = nbreCaractere - Esp
     
    	msgbox droite
     
    	'on parcours le fichier par la fin puisque les valeurs à récupérer sont majoritairement situé à la fin du fichier
    	for o = ubound(ContenuLgnFic) to ubound(ContenuLgnFic)-nbLgnFic  Step -1
     
    		'si la valeur dans le fichier *.ini est égale au n caractère du fichier
    		if droite = left(ContenuLgnFic(o),nbreCaractere) then
     
    			'on supprime les espaces de la chaine de caractère
    			suppEspace=replace(ContenuLgnFic(o)," ","")
    			'on supprime les caractères de gauche afin de garder la valeur
    			result = replace(suppEspace,left(suppEspace,nbCaSanEsp),"")
     
    			'si après la valeur il y a un "E", on le supprime
    			if Instr(result,"E") then
     
    				result = replace(result,right(result,1),"")
     
    			end if
     
    			msgbox result
     
    			exit for
     
    		end if
     
    	next
     
    End Function
    Merci pour votre aide

  2. #2
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    J'ai fais ce code pour pouvoir écrire mes valeurs dans un fichier csv

    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
    Function traitementFichier()
     
    	Const ForWriting = 8				' 8 Signifie que l'on va écrire les données à la suite
    	dim fichierCSV
     
    	fichierComp = resultDossier & "\" & fichier
     
    	fichierCSV = "P:\Scripts\band raz\bandeRAZ.csv"
     
    	Set oFs = CreateObject("Scripting.FileSystemObject")
    	Set fCSV = oFs.OpenTextFile(fichierCSV, ForWriting,true)
    	Set oFiles = oFs.GetFolder(resultDossier).Files
    	'Ouverture et lecture du fichier
    	Set ficSes = oFs.OpenTextFile(fichierComp)		
    	'récupération d'un tableau de x lignes totalité du fichier
    	ContenuLgnFic = split(ficSes.ReadAll,vbnewline)
    	'Récupère le nombre de ligne dans un fichier
    	nbLgnFic = ficSes.Line -1
    	'fermeture du fichier
    	ficSes.close
     
    	'boucle permettant de calculer le nombre de caractère pour chaque valeur
    	For t = 1 to Len(droite)
     
    			CodAscii = asc(mid(droite,t,1))
     
    				if CodAscii = 32 then Esp = Esp + 1
    				if CodAscii = 39 then Gui = Gui + 1
    				if CodAscii = 46 then Dot = Dot + 1
    				if CodAscii = 40 then ParOuv = ParOuv + 1
    				if CodAscii = 41 then ParFer = ParFer + 1
    				if CodAscii = 233 then ascaig = ascaig + 1
    				if CodAscii = 232 then ascgrav = ascgrav + 1
    				if CodAscii >= 65 and CodAscii <= 90 then LtrMA = LtrMA + 1
    				if CodAscii >= 97 and CodAscii <= 122 then LtrMi = LtrMi + 1
     
    	Next
     
    	'renvoi le nombre de caractère
    	nbreCaractere = Esp+Gui+LtrMA+LtrMi+Dot+ParOuv+ParFer+ascgrav+ascaig
    	'renvoi le nombre de caractères sans espace
    	nbCaSanEsp = nbreCaractere - Esp
     
    	'msgbox droite
     
    	'on parcours le fichier par la fin puisque les valeurs à récupérer sont majoritairement situé à la fin du fichier
    	for o = ubound(ContenuLgnFic) to ubound(ContenuLgnFic)-nbLgnFic  Step -1
     
    		'si la valeur dans le fichier *.ini est égale au n caractère du fichier
    		if droite = left(ContenuLgnFic(o),nbreCaractere) then
     
    			'on supprime les espaces de la chaine de caractère
    			suppEspace=replace(ContenuLgnFic(o)," ","")
    			'on supprime les caractères de gauche afin de garder la valeur
    			result = replace(suppEspace,left(suppEspace,nbCaSanEsp),"")
     
    			'si après la valeur il y a un "E", on le supprime
    			if Instr(result,"E") then
     
    				result = replace(result,right(result,1),"")
     
    			end if
     
     
    			message = result & ";"
    			fCSV.write (message)
    			fCSV.close
     
    			exit for
     
    		end if
     
    	next
     
     
     
    End Function
    Ca fonctionne bien mais le soucis c'est qu'il m'aligne toutes les valeurs à la suite. Je voudrais qu'il saute une ligne à chaque fois que je change de fichier...

    Auriez vous des idées ? je trouve pas grand chose sur le net en matière de csv pour du vbscript

    Merci

  3. #3
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 101
    Points : 16 618
    Points
    16 618
    Par défaut
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                message = result & ";" & vbNewLine
                fCSV.write (message)
                fCSV.Close
    Je ne suis pas sûr si c'est au bon endroit, mais pour faire un saut de ligne il faut employer une fois vbNewLine, pour insérer une ligne blanche il faut doubler vbNewLine .

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    Merci pour ta réponse ProgElecT mais ça ne fonctionne pas. Le "VbNewLine" saute bien une ligne mais le soucis c'est qu'il me renvoi à la ligne chaque résultat !

    Voici 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
    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
     
    Function traitementFichier()
     
    	Const ForWriting = 8				' 8 Signifie que l'on va écrire les données à la suite
     
    	datej = replace(date,"/","")
     
    	fichierComp = resultDossier & "\" & fichier
    	fichierCSV = "P:\Scripts\band raz\bandeRAZ_" & datej & ".csv"	
     
    	Set oFs = CreateObject("Scripting.FileSystemObject")
     
    	Set oFiles = oFs.GetFolder(resultDossier).Files
     
    	'Ouverture et lecture du fichier
    	set ficSes = oFs.OpenTextFile(fichierComp)
     
    	'Ouverture pour écriture du fichier csv
    	Set ficCSV = oFs.OpenTextFile(fichierCSV, ForWriting,true)
     
    	'récupération d'un tableau de x lignes totalité du fichier
    	ContenuLgnFic = split(ficSes.ReadAll,vbnewline)
    	'Récupère le nombre de ligne dans un fichier
    	nbLgnFic = ficSes.Line -1
    	'fermeture du fichier
    	ficSes.close
     
    	'boucle permettant de calculer le nombre de caractère pour chaque valeur
    	For t = 1 to Len(droite)
     
    			CodAscii = asc(mid(droite,t,1))
     
    				if CodAscii = 32 then Esp = Esp + 1
    				if CodAscii = 39 then Gui = Gui + 1
    				if CodAscii = 46 then Dot = Dot + 1
    				if CodAscii = 40 then ParOuv = ParOuv + 1
    				if CodAscii = 41 then ParFer = ParFer + 1
    				if CodAscii = 233 then ascaig = ascaig + 1
    				if CodAscii = 232 then ascgrav = ascgrav + 1
    				if CodAscii >= 65 and CodAscii <= 90 then LtrMA = LtrMA + 1
    				if CodAscii >= 97 and CodAscii <= 122 then LtrMi = LtrMi + 1
     
    	Next
     
    	'renvoi le nombre de caractère
    	nbreCaractere = Esp+Gui+LtrMA+LtrMi+Dot+ParOuv+ParFer+ascgrav+ascaig
    	'renvoi le nombre de caractères sans espace
    	nbCaSanEsp = nbreCaractere - Esp
     
    	'msgbox droite
     
    	cptt = 0
     
    	do while flagg = 0
     
    		'on parcours le fichier par la fin puisque les valeurs à récupérer sont majoritairement situé à la fin du fichier
    		for o = ubound(ContenuLgnFic) to ubound(ContenuLgnFic)-nbLgnFic  Step -1
     
     
    			'si la valeur dans le fichier *.ini est égale au n caractère du fichier
    			if droite = left(ContenuLgnFic(o),nbreCaractere) then
     
    				'on supprime les espaces de la chaine de caractère
    				suppEspace=replace(ContenuLgnFic(o)," ","")
    				'on supprime les caractères de gauche afin de garder la valeur
    				result = replace(suppEspace,left(suppEspace,nbCaSanEsp),"")
     
    				'si après la valeur il y a un "E", on le supprime
    				if Instr(result,"E") then
     
    					result = replace(result,right(result,1),"")
     
    				end if
     
    				'msgbox result
     
    				exit do
     
    			end if
     
    		next
     
    		if cptt = nbLgnFic then
     
    			flagg = 1
     
    			result = "0"
    			'msgbox result
     
    		end if
     
    		cptt = cptt + 1
     
    	loop
     
    	For Each oFiles In oFiles
     
    		message = result & ";"
    		ficCSV.write (message)
    	next
     
    		ficCSV.write VbNewLine
    		ficCSV.close
     
    End Function
    lorsque j'execute, le fichier CSV se présente comme cela :

    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
    53,50;
    1,00;
    1;
    2;
    4;
    1;
    355,00;
    1052,70;
    25,00;
    10;
    0;
    0;
    0;
    0;
    732,50;
    27,00;
    9;
    2364,80;
    74,00;
    17;
    0;
    0;
    0;
    0;
    3001,10;
    104,00;
    24;
    je voudrais une ligne par fichier soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    53,50;1,00;1;2;4;1;355,00
    1052,70;25,00;10;0;0;0;0
    732,50;27,00;9
    2364,80;74,00;17;0;0;0;0
    3001,10;104,00;24;
    En effet, mon premier fichier me renvoi la première ligne comme valeur, mon deuxième fichier, la deuxième ligne etc...

    Là je bloque vraiment j'ai essayer pas mal de chose et la gestion des fichiers ini en VBS n'est pas très détailler sur google ^^

    Encore merci pour votre aide et votre patiente (surtout à ProgElecT)

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    Problème résolu, je ne mettais pas la fonction au bon endroit

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/06/2011, 17h35
  2. Scanner une valeur dans un fichier CSV
    Par Pierre.B dans le forum Général Java
    Réponses: 2
    Dernier message: 26/05/2010, 16h50
  3. Réponses: 3
    Dernier message: 04/03/2009, 11h35
  4. [JDOM] comment écrire dans un fichier xml sans écraser son contenu
    Par solawe dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 25/03/2008, 14h11
  5. Modifier une valeur dans un fichier sans passer par l'éditeur
    Par elkhy dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 09/06/2006, 00h15

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