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

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
Méta-MCI
Bonjour !


Un 'tit script en Python, en vitesse (suis à la bourre...) :

import csv
class dblpvirgule:
delimiter=';'
quotechar='"'
escapechar=None
doublequote=True
skipinitialspaceúlse
lineterminator='rn'
quoting=csv.QUOTE_NONNUMERIC

data=csv.reader(open("csvin.txt",'rb'), dialectÛlpvirgule)
w=csv.writer(open("csvout.txt", "wb"), dialectÛlpvirgule)
for lig in data:
w.writerow(lig[1:]+[lig[0].split('')[-1]])




Désolé, je n'ai pas le temps de l'adapter en un batch PeJBshell pour
l'instant...



@-salutations

Michel Claveau
Avatar
Gilles LAURENT
Bonjour,

La version batch cmd :

-- batch.cmd

@echo off
for /f "tokens=1-3 delims=;" %%i in (csvin.txt) do (
for /f "tokens=3 delims=" %%l in ('echo %%i') do @echo %%j;%%k;"%%l
)

-- batch.cmd

Les données au format CSV sont disponibles dans le fichier csvin.txt
Pour procéder à la transformation :
>batch.cmd > csvout.txt

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Avatar
---DGI972---
Bonjour,

La version batch cmd :

-- batch.cmd

@echo off
for /f "tokens=1-3 delims=;" %%i in (csvin.txt) do (
for /f "tokens=3 delims=" %%l in ('echo %%i') do @echo %%j;%%k;"%%l
)

-- batch.cmd

Les données au format CSV sont disponibles dans le fichier csvin.txt
Pour procéder à la transformation :
>batch.cmd > csvout.txt


bonjour,
J'aurais préféré en VBScript ;-) , mais j'essaye cela dans 2 heures et
je vous tiend au courant.
merci :')

Avatar
Jacques Barathon [MS]
"---DGI972---" <gilles.dermigny@*NO SPAM* laposte.net> wrote in message
news:
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:EXPORTimage0001.tif";"JEAN";"VALJEAN"
"D:EXPORTimage0002.tif";"LOUIS";"GEORGES"
"D:EXPORTimage0003.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.


Désolé pour le retard à l'allumage, voici la version PowerShell en une
ligne:

type csvin.txt | %{$fic,$prenom,$nom=$_.split(";");'{0};{1};"{2}' -f
$prenom,$nom,$fic.split('')[-1]} | out-file csvout.txt

Jacques

Avatar
Michel Claveau
Bonsoir !

J'ai un doute, pour certains cas :
- si une chaîne contient des ;
- si une chaîne contient des " (généralement, on les double)

--
@-salutations

Michel Claveau
Avatar
Michel Claveau
Bonsoir !

J'ai les mêmes doutes que pour Gilles (voir mon message).

Et, en plus, le nombre de champ est figé (remarque valable aussi pour
Gilles).

--
@-salutations

Michel Claveau
Avatar
Gilles LAURENT
"Michel Claveau" <Enleverles a écrit dans
le message de news:
| Bonsoir !

Bonsoir,

| J'ai un doute, pour certains cas :
| - si une chaîne contient des ;
| - si une chaîne contient des " (généralement, on les double)

Aucun doute à avoir, vous avez totalement raison.
Je suis néanmoins conforme au cahier des charges ;-)

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Avatar
jbongran
---DGI972--- wrote:
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:EXPORTimage0001.tif";"JEAN";"VALJEAN"
"D:EXPORTimage0002.tif";"LOUIS";"GEORGES"
"D:EXPORTimage0003.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


Juste la fonction en vbs qui devrait faire ce que tu veux:
Function ParseLine(strLine)
Dim testcsv, img, image
testcsv = Split(strLine, """;""")
img = Split(testcsv(0), "")
image = img(UBound(img))
ParseLine = """" & testcsv(1) & """;""" & testcsv(2) & """;""" & image &
""""
End Function

Il suffit d'ouvrir le fichier source, d'envoyer ligne par ligne à la
fonction et de récuperer le résultat pour mettre dans un nouveau fichier
Pas testé ;-)

Avatar
---DGI972---
Il se trouve que Gilles LAURENT a formulé :
"Michel Claveau" <Enleverles a écrit dans
le message de news:
Bonsoir !


Bonsoir,

J'ai un doute, pour certains cas :
- si une chaîne contient des ;
- si une chaîne contient des " (généralement, on les double)


Aucun doute à avoir, vous avez totalement raison.
Je suis néanmoins conforme au cahier des charges ;-)


Désolé, mais je n'ai pas réussi a sortir une seule ligne et même pas le
fichier de sortie (même vide).
J'ai essayé de debugger le cmd et j'ai un message %%i attendue !!


Avatar
---DGI972---
Le 29/06/2006, jbongran a supposé :
---DGI972--- wrote:
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:EXPORTimage0001.tif";"JEAN";"VALJEAN"
"D:EXPORTimage0002.tif";"LOUIS";"GEORGES"
"D:EXPORTimage0003.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


Juste la fonction en vbs qui devrait faire ce que tu veux:
Function ParseLine(strLine)
Dim testcsv, img, image
testcsv = Split(strLine, """;""")
img = Split(testcsv(0), "")
image = img(UBound(img))
ParseLine = """" & testcsv(1) & """;""" & testcsv(2) & """;""" & image &
""""
End Function

Il suffit d'ouvrir le fichier source, d'envoyer ligne par ligne à la fonction
et de récuperer le résultat pour mettre dans un nouveau fichier
Pas testé ;-)


Merci, j'essaye cela et je vous tiens au courant.

NB: je suis trés lent


1 2 3 4 5