Question tordue :-)

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
~Jean-Marc~ [MVP]
Le #673337
Salut OlivierT,
tu nous disais :
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 ?


Il faut utiliser FileSystemObject pour créer un double traitement lecture
écriture.
( Set fso = WScript.CreateObject("Scripting.FileSystemObject") )

Du style (vite fait, non testé, juste pour voir le principe) :
( ForReading = 1 ForWriting = 2
srce = path complet du fichier à lire dest = path fichier à écrire )


Set fsrce=fso.OpenTextFile(srce, ForReading)
Set fdest=fso.OpenTextFile(dest, ForWriting,True)
End If
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

nb : j'ai un trou de mémoire sur le ubound :
For i = 0 To ubound(ALine)
ou bien :
For i = 0 To ubound(ALine) - 1

@+

--
~Jean-Marc~ MVP Shell/User Fr
( Vista x86 Ultimate )
- http://msmvps.com/blogs/docxp/ -
- http://docxp.mvps.org -

Gilles LAURENT
Le #673335
"OlivierT" de
news:
| Bonjour,

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 ?

Une version en batch :

+++ Usage
> Csv2Txt.cmd <CsvFilename>

+++ Exemple
> Csv2Txt.cmd test.csv > test.txt

--- Coupez ici : Csv2Txt.cmd ---
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (%1) do (
set line=%%i& call :_split !line: =¨!
)
goto :eof
:_split
if "%1" neq "" (
set arg=%1& echo !arg:¨= !& shift
goto :_split
)
--- Coupez ici : Csv2Txt.cmd ---

--
Gilles LAURENT
http://glsft.free.fr
jbongran
Le #673334
"~Jean-Marc~ [MVP]" news:
Salut OlivierT,
tu nous disais :
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 ?


Il faut utiliser FileSystemObject pour créer un double traitement lecture
écriture.
( Set fso = WScript.CreateObject("Scripting.FileSystemObject") )

Du style (vite fait, non testé, juste pour voir le principe) :
( ForReading = 1 ForWriting = 2
srce = path complet du fichier à lire dest = path fichier à
rire )


Set fsrce=fso.OpenTextFile(srce, ForReading)
Set fdest=fso.OpenTextFile(dest, ForWriting,True)
End If
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

nb : j'ai un trou de mémoire sur le ubound :
For i = 0 To ubound(ALine)
ou bien :
For i = 0 To ubound(ALine) - 1


Pour t'ôter du doute, passes toi de la boucle ;-)
fdest.WriteLine Join(ALine, "")


Gilles LAURENT
Le #673333
"jbongran" 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
Fred
Le #673332
Dans : news:%,
Gilles LAURENT disait :
"jbongran" 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 ---


:-)

Tu fais du «obfuscated C» en vbs ?
http://www.ioccc.org/

(un petit lien passé par Michel (MCI) il y a quelques temps et dont on
ne se lasse pas !)


--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)


Gilles LAURENT
Le #673329
"Fred" news:%
| Tu fais du «obfuscated C» en vbs ?
| http://www.ioccc.org/
|
| (un petit lien passé par Michel (MCI) il y a quelques temps et dont on
| ne se lasse pas !)

ROTFL

--
Gilles LAURENT
http://glsft.free.fr
Jacques Barathon [MS]
Le #673093
"OlivierT" news:
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 ?


Une version avec PowerShell pour faire bonne mesure :-) :

type fichier.csv | foreach {[String]::Join(" ",$_.Split(";"))} > fichier.txt

La question ne précisait pas quel format devraient prendre les données
envoyées dans le fichier TXT. J'ai assumé qu'elles devaient être simplement
séparées par un espace. La solution peut de toute façon être facilement
adaptée pour tout autre formatage.

J'ai également assumé que le fichier CSV utilisait le point-virgule comme
séparateur. C'est la norme en France. Si le fichier utilise un autre
séparateur, on peut là aussi le changer facilement en passant le bon
séparateur en paramètre à la méthode Split().

Jacques

~Jean-Marc~ [MVP]
Le #673087
Salut Gilles LAURENT,
tu nous disais :
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 ;-) )

@+

--
~Jean-Marc~ MVP Shell/User Fr
( Vista x86 Ultimate )
- http://msmvps.com/blogs/docxp/ -
- http://docxp.mvps.org -

~Jean-Marc~ [MVP]
Le #673086
Salut Jacques Barathon [MS],
tu nous disais :

Une version avec PowerShell pour faire bonne mesure :-) :


Que d'inspiration, messieurs ! :-)))

--
~Jean-Marc~ MVP Shell/User Fr
( Vista x86 Ultimate )
- http://msmvps.com/blogs/docxp/ -
- http://docxp.mvps.org -

Gilles LAURENT
Le #672812
"~Jean-Marc~ [MVP]" 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
Publicité
Poster une réponse
Anonyme