Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Question tordue :-)

16 réponses
Avatar
OlivierT
Bonjour,

Sur une machine, je n'ai pas office d'installé.
J'ai un fichier CSV que je dois traiter pour l'enregistrer dans un fichier
TXT.
Comment lire un fichier CSV en VBS (ou autre) récupérer chaque valeur
(séparateur ;) pour les envoyer dans un fichier TXT ?

Merci,

Olivier

6 réponses

1 2
Avatar
OlivierT
Merci a tous pour vos reponses. Etant pas doué de nature :-) j'ai repris vos
codes pour essayer de le faire fonctionner. Voici mon fichiers VBS :
*********
ForReading = 1
ForWriting = 2
srce = "U:DeveloppementCartoCartographie_serveurs_v6_20070604.csv"
dest = "U:DeveloppementCartotest.txt"

Set fso = WScript.CreateObject("Scripting.FileSystemObject")

Set fsrce = fso.OpenTextFile(srce, ForReading)
Set fdest = fso.OpenTextFile(dest, ForWriting,True)

While Not fsrce.AtEndOfStream
line=fsrce.ReadLine
ALine = split(line,";")
For i = 0 To ubound(ALine)
fdest.WriteLine ALine(i)
Next
Wend

fdest.close
fsrce.close
***********

Quand je l'execute, il me met cette erreur : tets.vbs(6, 1) Microsoft
VBScript compilation error: Expected statement

Ca vous parle ?
J'en profitte pour demander si il est possible de charger l'ensemble du
fichier de facon a ne traiter que certaine ligne, a moins que l'on puisse
traiter "a la volée".

Olivier

"Gilles LAURENT" wrote:

"~Jean-Marc~ [MVP]" a écrit dans le
message de
news:
|| Et pour le Fun uniquement :-)
||
|| --- Coupez ici : Csv2Txt.vbs ---
|| With CreateObject("Scripting.FileSystemObject")
|| .CreateTextFile (dest, True).WriteLine Join (Split ( _
|| .OpenTextFile (srce).ReadAll,";"), VbCrLf)
|| End With
|| --- Coupez ici : Csv2Txt.vbs ---
|
| Ah oui, joli. (mais peu lisible ;-) )

Poutant j'ai indenté :-)
Je vous l'accorde, c'est à proscrire. C'était juste pour vous taquiner !

--
Gilles LAURENT
http://glsft.free.fr





Avatar
OlivierT
Re,

En fin de compte tout fonctionne. Petit problème d'accès au lecteur :-)))
Mais ma question reste intacte :-)))
Est-il possible de charger l'ensemble du fichier de facon a ne traiter que
certaine ligne, a moins que l'on puisse traiter "a la volée" ?

Olivier

"OlivierT" wrote:

Merci a tous pour vos reponses. Etant pas doué de nature :-) j'ai repris vos
codes pour essayer de le faire fonctionner. Voici mon fichiers VBS :
*********
ForReading = 1
ForWriting = 2
srce = "U:DeveloppementCartoCartographie_serveurs_v6_20070604.csv"
dest = "U:DeveloppementCartotest.txt"

Set fso = WScript.CreateObject("Scripting.FileSystemObject")

Set fsrce = fso.OpenTextFile(srce, ForReading)
Set fdest = fso.OpenTextFile(dest, ForWriting,True)

While Not fsrce.AtEndOfStream
line=fsrce.ReadLine
ALine = split(line,";")
For i = 0 To ubound(ALine)
fdest.WriteLine ALine(i)
Next
Wend

fdest.close
fsrce.close
***********

Quand je l'execute, il me met cette erreur : tets.vbs(6, 1) Microsoft
VBScript compilation error: Expected statement

Ca vous parle ?
J'en profitte pour demander si il est possible de charger l'ensemble du
fichier de facon a ne traiter que certaine ligne, a moins que l'on puisse
traiter "a la volée".

Olivier

"Gilles LAURENT" wrote:

"~Jean-Marc~ [MVP]" a écrit dans le
message de
news:
|| Et pour le Fun uniquement :-)
||
|| --- Coupez ici : Csv2Txt.vbs ---
|| With CreateObject("Scripting.FileSystemObject")
|| .CreateTextFile (dest, True).WriteLine Join (Split ( _
|| .OpenTextFile (srce).ReadAll,";"), VbCrLf)
|| End With
|| --- Coupez ici : Csv2Txt.vbs ---
|
| Ah oui, joli. (mais peu lisible ;-) )

Poutant j'ai indenté :-)
Je vous l'accorde, c'est à proscrire. C'était juste pour vous taquiner !

--
Gilles LAURENT
http://glsft.free.fr







Avatar
jbongran
"Gilles LAURENT" a écrit dans le message de news:
%
"jbongran" a écrit dans le message de
news:46713672$0$4997$
| Pour t'ôter du doute, passes toi de la boucle ;-)
| fdest.WriteLine Join(ALine, "")

Et pour le Fun uniquement :-)

--- Coupez ici : Csv2Txt.vbs ---
With CreateObject("Scripting.FileSystemObject")
.CreateTextFile (dest, True).WriteLine Join (Split ( _
.OpenTextFile (srce).ReadAll,";"), VbCrLf)
End With
--- Coupez ici : Csv2Txt.vbs ---

--
Gilles LAURENT
http://glsft.free.fr


T'es dur ;-)
Euh, c'est pas un .Write en lieu et place d'un WriteLine, vu que tu a mis
déja un retour ligne dans le join ?
Remarque générale: le traitement sur un ReadAll (comme le split), pour des
fichiers d'une certaine taille, n'est vraiment pas performant. La version
ligne à ligne est plus rapide dans beaucoup de cas.

Avatar
jbongran
"OlivierT" a écrit dans le message de
news:
Merci a tous pour vos reponses. Etant pas doué de nature :-) j'ai repris
vos
codes pour essayer de le faire fonctionner. Voici mon fichiers VBS :
*********
ForReading = 1
ForWriting = 2
srce = "U:DeveloppementCartoCartographie_serveurs_v6_20070604.csv"
dest = "U:DeveloppementCartotest.txt"

Set fso = WScript.CreateObject("Scripting.FileSystemObject")

Set fsrce = fso.OpenTextFile(srce, ForReading)
Set fdest = fso.OpenTextFile(dest, ForWriting,True)

While Not fsrce.AtEndOfStream
line=fsrce.ReadLine
ALine = split(line,";")
For i = 0 To ubound(ALine)
fdest.WriteLine ALine(i)
Next
Wend

fdest.close
fsrce.close
***********
[..]

Ca vous parle ?
J'en profitte pour demander si il est possible de charger l'ensemble du
fichier de facon a ne traiter que certaine ligne, a moins que l'on puisse
traiter "a la volée".


Le traitement peut être fait ligne à ligne, en fonction de critères définis.
Un exemple:
'En fonction du contenu d'une "colonne" du fichier
If ALine(0) = "prendre cette ligne" Then
fdest.WriteLine Join(ALine(), vbCRLf)
'En fonction du contenu d'une "colonne" du fichier
ElseIf ALine(0) = "Prendre seulement la dernière valeur de la ligne" Then
fdest.WriteLine ALine(UBound(ALine))
'En fonction d'un contenu n'importe où sur la ligne
ElseIf InStr(Join(ALine(), ""), "pas bon" Then
fdest.WriteLine "ERREUR: Le client " & ALine(4) & " ne peut avoir deux
comptes !"
' en fonction du contenu de chaque "colonne" du fichier (à blanc)
Else
intCols = UBound(ALine)
For i = 0 To intCols
If Trim(ALine(i)) = "" Then
fdest.WriteLine "Pas de valeur"
Else
fdest.WriteLine UCase(ALine(i)) 'Mettre la valeur en majuscule
Next
End If

Enfin, c'est juste pour illustrer, je doute que cela puisse servir en l'état
;-)
Il est aussi possible de charger le fichier dans son entier (ReadAll) pour
par exemple procéder à des remplacement de chaines, en faisant appel a
Replace ou des expressions régulières, mais c'est souvent décevant en terme
de performance sur des fichiers d'une taille dépassant à peine quelque
centaines de Ko...

Avatar
OlivierT
Merci beaucoup a tous !

Mon code fonctionne grace a vous !
jbongran, ton code m'a été tres utile !

Merci a tous !

Olivier

"jbongran" wrote:

"OlivierT" a écrit dans le message de
news:
Merci a tous pour vos reponses. Etant pas doué de nature :-) j'ai repris
vos
codes pour essayer de le faire fonctionner. Voici mon fichiers VBS :
*********
ForReading = 1
ForWriting = 2
srce = "U:DeveloppementCartoCartographie_serveurs_v6_20070604.csv"
dest = "U:DeveloppementCartotest.txt"

Set fso = WScript.CreateObject("Scripting.FileSystemObject")

Set fsrce = fso.OpenTextFile(srce, ForReading)
Set fdest = fso.OpenTextFile(dest, ForWriting,True)

While Not fsrce.AtEndOfStream
line=fsrce.ReadLine
ALine = split(line,";")
For i = 0 To ubound(ALine)
fdest.WriteLine ALine(i)
Next
Wend

fdest.close
fsrce.close
***********
[..]

Ca vous parle ?
J'en profitte pour demander si il est possible de charger l'ensemble du
fichier de facon a ne traiter que certaine ligne, a moins que l'on puisse
traiter "a la volée".


Le traitement peut être fait ligne à ligne, en fonction de critères définis.
Un exemple:
'En fonction du contenu d'une "colonne" du fichier
If ALine(0) = "prendre cette ligne" Then
fdest.WriteLine Join(ALine(), vbCRLf)
'En fonction du contenu d'une "colonne" du fichier
ElseIf ALine(0) = "Prendre seulement la dernière valeur de la ligne" Then
fdest.WriteLine ALine(UBound(ALine))
'En fonction d'un contenu n'importe où sur la ligne
ElseIf InStr(Join(ALine(), ""), "pas bon" Then
fdest.WriteLine "ERREUR: Le client " & ALine(4) & " ne peut avoir deux
comptes !"
' en fonction du contenu de chaque "colonne" du fichier (à blanc)
Else
intCols = UBound(ALine)
For i = 0 To intCols
If Trim(ALine(i)) = "" Then
fdest.WriteLine "Pas de valeur"
Else
fdest.WriteLine UCase(ALine(i)) 'Mettre la valeur en majuscule
Next
End If

Enfin, c'est juste pour illustrer, je doute que cela puisse servir en l'état
;-)
Il est aussi possible de charger le fichier dans son entier (ReadAll) pour
par exemple procéder à des remplacement de chaines, en faisant appel a
Replace ou des expressions régulières, mais c'est souvent décevant en terme
de performance sur des fichiers d'une taille dépassant à peine quelque
centaines de Ko...






Avatar
M.Claveau
http://www.ioccc.org/
(un petit lien passé par Michel (MCI) il y a quelques temps et dont
on ne se lasse pas !)


Le même lien, légèrement obfuscatedisé :
http://minilien.com/?IeShFsXuy6







--
@-salutations

Michel Claveau

1 2