OVH Cloud OVH Cloud

modification et transformation d'un fichier CSV pour importation

42 réponses
Avatar
---DGI972---
bonjour
Je dois faire un VBScript qui qui doit transformer et suprimer des
valeurs dans un fichier csv.
Issue d'une exportation d'un logiciel le fichier a traiter est de la
forme:
"D:\EXPORT\image0001.tif";"JEAN";"VALJEAN"
"D:\EXPORT\image0002.tif";"LOUIS";"GEORGES"
"D:\EXPORT\image0003.tif";"FELIX";LOUIS"

pour l'importer dans un autre logicel il faut que que le fichier soit
de la forme:

"JEAN";"VALJEAN";"image0001.tif"
"LOUIS";"GEORGES";"image0002.tif"
"FELIX";LOUIS";"image0003.tif"

Il faut donc mettre le premier champ à la fin et suprimer le chemin
D:\EXPORT\ dans le premier champ.

je ne vois pas par quel bout prendre ce problème et je vous solicite
pour un début d'analyse.
un split dans un tableau puis un remplacement de D:\EXPORT\ par rien ?

merci d'avance

10 réponses

1 2 3 4 5
Avatar
Gilles LAURENT
"---DGI972---" <gilles.dermigny@*NOSPAM*laposte.net> a écrit dans le
message de news:
| oui oui vous avez raison la syntaxe a changée:
|
| "FILENAME","Num_Client","DATE","Num_Relv"
| "D:TEMPRUBISFACT 08-06-06.TIF","112242","MAI 2006","000003"
| "D:TEMPRUBISFACT 08-06-061.TIF","112242","MAI 2006","000003"
|
| mais le pb est plus compliqué, la première ligne est à jeter à la
| poubelle et le non du fichier de sortie doit être index.dat
| dans l'ordre 2 3 4 1
| merci

Une version optimisée en deux lignes seulement :

1. @echo off
2. for /f "skip=1 tokens=1-4 delims=," %%i in (c:temprubisfact.csv)
do @echo %%j,%%k,%%l,"%%~nxi"

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Avatar
---DGI972---
Gilles LAURENT avait écrit le 30/06/2006 :
"---DGI972---" <gilles.dermigny@*NOSPAM*laposte.net> a écrit dans le
message de news:
oui oui vous avez raison la syntaxe a changée:

"FILENAME","Num_Client","DATE","Num_Relv"
"D:TEMPRUBISFACT 08-06-06.TIF","112242","MAI 2006","000003"
"D:TEMPRUBISFACT 08-06-061.TIF","112242","MAI 2006","000003"

mais le pb est plus compliqué, la première ligne est à jeter à la
poubelle et le non du fichier de sortie doit être index.dat
dans l'ordre 2 3 4 1
merci


Une version optimisée en deux lignes seulement :

1. @echo off
2. for /f "skip=1 tokens=1-4 delims=," %%i in (c:temprubisfact.csv)
do @echo %%j,%%k,%%l,"%%~nxi"


Super les 2 versions fonctionnent.
La version optimisée va 2 fois plus vite (temps d'ouverture de la
fenêtre DOS)
Je vais l'integrer dans un VBScript car le fichier d'entrée change et
je dois le passer en paramètre.
Merci merci encore


Avatar
Gilles LAURENT
"---DGI972---" <gilles.dermigny@*NOSPAM*laposte.net> a écrit dans le
message de news:
| Super les 2 versions fonctionnent.
| La version optimisée va 2 fois plus vite (temps d'ouverture de la
| fenêtre DOS)
| Je vais l'integrer dans un VBScript car le fichier d'entrée change et
| je dois le passer en paramètre.
| Merci merci encore

Voici l'ultime version avec passage du fichier d'entrée comme argument
:-)
Vous remarquerez que le script tient sur une seule ligne

1. @for /f "skip=1 tokens=1-4 delims=," %%i in (%1) do @echo
%%j,%%k,%%l,"%%~nxi"

Pour l'exécution :
Si le fichier d'entrée est c:temprubisfact1.csv alors :
>test.cmd c:temprubisfact1.csv > c:temprubisindex1.dat

Si le fichier d'entrée est c:temprubisfact2.csv alors :
>test.cmd c:temprubisfact2.csv > c:temprubisindex2.dat

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Avatar
Méta-MCI
Bonsoir !

Moi pas comprendre. Le problème posé consiste à inverser l'ordre
d'affichage de trois champs, donc forcément, le nombre de champs est
figé. Tu fais bien la même chose dans ton script, non?




En pratique, DGI972 est déjà passé à 4 champs, bousillant, du même coup,
l'analyse de Gilles, et la tienne. Normal, puisque le cahier des charges a
changé.

Mon script prend la première colonne (1er champ), et le met en dernière
position. Indépendamment du nombre de champs. Et ça marche, même une ligne a
un champ de plus, ou de moins.
Cela est dû au fait que Python peut adresser les séquences à partir du début
(>0) ou de la fin (<0) ; ainsi lig[-1] est le premier élément en commençant
par la fin.
Comme tu as installé Python, tu pourrais d'ailleurs essayer le script, si tu
t'ennuies (il paraît que, en été, la fréquence des réunions baisse chez MS).


Ceci étant, on ne peut pas utiliser directement le script dans PeJBshell. On
est obligé, soit d'appeler un fichier externe (comme une
cooommmandelletteeeeee ?), soit
d'exécuter le script, à partir d'une chaîne de caractères.

@+

MCI



Avatar
Méta-MCI
C'est bô !
(avis perso)


MCI
Avatar
---DGI972---
Le 30/06/2006, Méta-MCI a supposé :
C'est bô !
(avis perso)


MCI


je confirme du grand ART

je n'ai pas encore réussi en lancer la dernière version (en une seule
ligne).

Un grand merci

---DGI972---

Avatar
Gilles LAURENT
"Méta-MCI" a écrit dans le message de
news:
| C'est bô !
| (avis perso)
|
|
| MCI

Merci beaucoup.

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Avatar
Gilles LAURENT
"---DGI972---" <gilles.dermigny@*NOSPAM*laposte.net> a écrit dans le
message de news:
| je confirme du grand ART
|
| je n'ai pas encore réussi en lancer la dernière version (en une seule
| ligne).
|
| Un grand merci
|
| ---DGI972---

Merci beaucoup.
Tenez-moi au courant.

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Avatar
---DGI972---
Le 30/06/2006, Méta-MCI a supposé :
C'est bô !
(avis perso)


MCI


je confirme du grand ART

je n'ai pas encore réussi en lancer la dernière version (en une seule ligne).

Un grand merci

---DGI972---


j'ai trouvé le Pb:
le nom long
Avec un petit bat suplémentaire

Copy D:TEMPRUBISFACT*.CSV D:TEMPRUBISFACT.CSV
CMD /E:ON /C C:RUBISbatch.cmd D:TEMPRUBISFACT.CSV >
D:TEMPRUBISindex.dat
DEL D:TEMPRUBISFACT.CSV

Un grand merci encore


Avatar
Gilles LAURENT
"---DGI972---" <gilles.dermigny@*NOSPAM*laposte.net> a écrit dans le
message de news:
| j'ai trouvé le Pb:
| le nom long
| Avec un petit bat suplémentaire
|
| Copy D:TEMPRUBISFACT*.CSV D:TEMPRUBISFACT.CSV
| CMD /E:ON /C C:RUBISbatch.cmd D:TEMPRUBISFACT.CSV >
| D:TEMPRUBISindex.dat
| DEL D:TEMPRUBISFACT.CSV
|
| Un grand merci encore

Une petite correction s'impose :

1. @for /f "skip=1 tokens=1-4 delims=," %%i in ('type %1') do @echo
%%j,%%k,%%l,"%%~nxi"

Pour l'exécution :
>test.cmd "c:temprubisfact espace .csv" > c:temprubisindex.dat

Notez la présence des guillemets autour du nom long

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
1 2 3 4 5