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 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
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]" <doc.j-m.OTER@ouanadoudou.fr> a écrit dans le
message de
news:3D7863CD-BE3D-4470-9EF9-D71E608DDFFA@microsoft.com
|| 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 !
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
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
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]" <doc.j-m.OTER@ouanadoudou.fr> a écrit dans le
message de
news:3D7863CD-BE3D-4470-9EF9-D71E608DDFFA@microsoft.com
|| 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 !
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
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.
"Gilles LAURENT" <glsft@free.fr> a écrit dans le message de news:
%23WMHVTorHHA.4664@TK2MSFTNGP04.phx.gbl...
"jbongran" <jbongrand@nrg.fr> a écrit dans le message de
news:46713672$0$4997$426a74cc@news.free.fr
| 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.
"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.
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...
"OlivierT" <OlivierT@discussions.microsoft.com> a écrit dans le message de
news: DFC30226-F8A8-487E-B66B-A032954190FE@microsoft.com...
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...
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...
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...
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" <OlivierT@discussions.microsoft.com> a écrit dans le message de
news: DFC30226-F8A8-487E-B66B-A032954190FE@microsoft.com...
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...
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...
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
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